时间复杂度-While循环除以2,嵌套的for循环

时间:2018-10-24 19:33:23

标签: algorithm time big-o complexity-theory

我在即将到来的期中考试中遇到了一个问题,我们将不胜感激。

请参见下面的功能

void george(int n) {                
    int m = n;                              //c1 - 1 step
    while (m > 1)                           //c2 - log(n) steps
    {                       
        for (int i = 1; i < m; i++)         //c3 - log(n)*<Stuck here>
          int S = 1;                        //c4 - log(n)*<Stuck here>
        m = m / 2;                          //c5 - (1)log(n) steps
    }
}

由于每次迭代后i都在递增且m被2除,因此我陷入了内部for循环。

如果m = 100: 第一次迭代m = 100:循环将运行100,我迭代100次+ 1进行最后检查 第二次迭代m = 50:循环将运行50次,我将迭代50次+ 1进行最后检查 .....等等

因为m被2除,这也将被视为log(n)吗?

1 个答案:

答案 0 :(得分:4)

外部循环执行log(n)
内部循环执行n + n/2 + n/4 +..+ 1 ~ 2*n次(几何级数之和)
总时间为O(n + log(n)) = O(n)


注意-如果在内部循环中将i < m替换为i < n,则将获得O(n*log(n))的复杂度,因为在这种情况下,我们对内部循环有n + n + n +.. + n个操作,其中被加数为log(n)