Algorithm 字符串生成算法的时间复杂度

Algorithm 字符串生成算法的时间复杂度,algorithm,Algorithm,这本书将此报告为O(xn^2) 以下是我的工作: 1调用以最初创建字符串句子 有N个调用(由于for循环有N个调用) 然后有N个调用要分配句子=句子+w 最后一次调用send返回语句 总计: 这使得O(N^2+2)=O(N^2) 问题 (1) 我的工作正确吗 (2) 他们从哪里得到O(xn^2)中的x的额外因子 谢谢 总计: 这使得O(N^2+2)=O(N^2) 把你的自行车这样放: String joinWords (String[] words){ String sentence =

这本书将此报告为
O(xn^2)

以下是我的工作:

1调用以最初创建
字符串句子

有N个调用(由于for循环有N个调用)


然后有N个调用要分配
句子=句子+w

最后一次调用send
返回语句

总计:

这使得O(N^2+2)=O(N^2)

问题 (1) 我的工作正确吗

(2) 他们从哪里得到
O(xn^2)
中的
x
的额外因子

谢谢

总计:

这使得O(N^2+2)=O(N^2)

把你的自行车这样放:

String joinWords (String[] words){
   String sentence = "";
   for(String w: words){
     sentence = sentence + w;
   }
  return sentence;
}
String连接词(String[]词){
字符串句子=”;
//字数。长度是一个常数,不进行调用

对于(int i=0;i,这是一个写得很差的示例,因为它将重新分配句子
N
次,而不是一次导致
O(x.N^2)

字符串句子=”;
for(String w:words)//循环N次(如果N是字数)
句子=句子+w;//这会重新分配整个事情
如果
句子=句子+w;
将是
O(1)
,那么结果将是
O(N)
,但情况并非如此,因为:

句子=句子+w;
实际上是这样的:

String joinWords (String[] words){
   String sentence = "";
   for(String w: words){
     sentence = sentence + w;
   }
  return sentence;
}
String temp=大小为的新字符串(句子大小+w大小);

对于(i=0;iit将仅为O(n)!”则有n个调用指定句子=句子+w“true,但为什么这些n需要与另一个n相乘?什么抽象机器模型/运行时环境/编程语言?是
句子=句子+w;
持续努力?x是单词的平均长度,但时间复杂度是O((xn)^2)。可通过StringBuilder将其优化为O(xn):