【问题标题】:Running time complexity of a code fragment代码片段的运行时间复杂度
【发布时间】: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)..

请帮忙

【问题讨论】:

    标签: algorithm analysis


    【解决方案1】:

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

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

    所以,O(nlogn) 是对的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2020-07-24
      相关资源
      最近更新 更多