【发布时间】:2011-11-01 15:17:10
【问题描述】:
我正在从我拥有的电子书中粘贴此文本。它说明了复杂性 if O(n2) 并给出了解释,但我看不出如何。
问题:这段代码的运行时间是多少?
public String makeSentence(String[] words) {
StringBuffer sentence = new StringBuffer();
for (String w : words) sentence.append(w);
return sentence.toString();
}
本书给出的答案:
O(n2),其中 n 是句子中的字母数。原因如下:每次你 将字符串附加到句子,您创建句子的副本并遍历所有字母 复制它们的句子如果您每次在 循环,并且您至少循环了 n 次,这给了您 O(n2) 的运行时间。哎哟!
有人可以更清楚地解释这个答案吗?
【问题讨论】:
-
@Kublai Khan:这不是他/她的答案。正在阅读的是书中的答案,也就是被质疑的内容。
-
StringBuffer 有一个内部缓冲区,一旦溢出就会翻倍。这实际上意味着每次添加内容时都不会复制“句子”。只有当缓冲区溢出时才会发生。
-
如果您关心性能,请使用 StringBuilder "从 JDK 5 版本开始,此类已补充了一个为单线程使用而设计的等效类 StringBuilder。通常应使用 StringBuilder 类优于这个,因为它支持所有相同的操作,但速度更快,因为它不执行同步。"
标签: java complexity-theory big-o time-complexity stringbuffer