【发布时间】:2012-05-08 19:38:16
【问题描述】:
这是片段:
sum1=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
sum1++
sum2=0
for(k=1;k<=n;k*=2)
for(j=1;j<=k;j++)
sum2++
下面是答案:
2 个赋值语句——每个 O(1) 第一个嵌套循环 - O(n2) 第二个嵌套循环 - O(n) 代码片段运行时间复杂度 = O(1) + O(n^2) + O(1) + O(n) = O(n2)
但我是这样解决的:
2 个作业:- O(1)。 第一个嵌套循环:O(n*n)=O(n^2) 第二个嵌套循环:
外循环运行 n 次.. 现在内部循环将被执行 (1+2+3+.....+(n-1)+n) 次 这给出了 n(n+1)/2 =O(n^2)
总运行时间 = O(n^2)+O(n^2)+O(1)=O(n^2)
是的,我做了一些研究,发现了以下内容:
在循环中,如果索引在每次迭代中跳跃的量增加,则序列的复杂度为 log n。
在这种情况下,我认为第二个循环的复杂度为 (n-1)/2*logn...这将等于 O(n*log n)。
我真的对第二个循环感到困惑,它应该是 O(n)..O(n^2) 还是 O(nlogn)..
请帮忙
【问题讨论】: