您好我想知道String类的“replaceAll”函数的时间复杂度是什么,但我找不到任何相关信息。(http://docs.oracle.com/javase/6/docs/api/java/lang/String.html)
Java在Javadoc中包含复杂性会不会更好?我相信有人知道这是非常重要的事情。
答案 0 :(得分:9)
大多数功能都具有相当直接的时间复杂性。 AFAIK,replaceAll是O(n)
IMHO。没有什么能够凭经验自行测试,例如使用分析器,因为您使用99%的方法很可能对应用程序的性能几乎没有影响。
答案 1 :(得分:3)
如果有保证,可以记录复杂性。例如,某些集合类记录了复杂性保证。例如,来自HashMap:
此实现为基本操作(get和put)提供了恒定时间性能......
然而,有时复杂性是:
答案 2 :(得分:1)
Java API的javadocs指定了每个方法必须完成 的一般合同,而不是如何。 API的每个实现者(比如OpenJDK,Oracle的JDK等)在如何实现每个合同方面都有一定的自由,这种自由可能包括进行优化,甚至牺牲性能。所以javadocs一般不会指定函数的时间/复杂性等细节,除非方法满足某些性能要求是绝对必要的。
答案 3 :(得分:0)
如果您正在使用基本操作的空间/时间复杂度来推动设计决策,那么您几乎肯定会做错了。
首先构建一个正确的应用程序,然后对其进行分析。然后优化分析过程显示的瓶颈。
答案 4 :(得分:0)
一般的答案是,复杂性通常取决于难以分析的因素。这当然适用于String.replaceAll
,其中有效复杂性主要取决于regex
字符串。 (一个设计不佳的正则表达式可能会让匹配的veriyy变慢。)