代码片段的运行时复杂性

时间:2012-05-08 11:28:37

标签: algorithm analysis

这是片段:

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)..

请帮助

1 个答案:

答案 0 :(得分:0)

因为你每次增加一倍。你的计算不正确。它应该是(1 + 2 + 4 + .... n / 2 + n)

     for(k=1;k<=n;k*=2)

所以,O(nlogn)是对的。