这是片段:
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)..
请帮助
答案 0 :(得分:0)
因为你每次增加一倍。你的计算不正确。它应该是(1 + 2 + 4 + .... n / 2 + n)
for(k=1;k<=n;k*=2)
所以,O(nlogn)是对的。