正确的时间复杂性

时间:2017-02-17 18:03:01

标签: for-loop time-complexity big-o complexity-theory

我遇到过这个问题,要求找时间的复杂性。

int count = 0;
        for (int i = N; i > 0; i /= 2) {
            for (int j = 0; j < i; j++) {
                count += 1;
            }
        }

它表示时间复杂度为O(n),如果它是O(nlogn),则第一个循环为logn,第二个循环为n

1 个答案:

答案 0 :(得分:1)

  

它说它的时间复杂度是O(n),如果它是O(nlogn)那么   第一个循环是logn,第二个循环是n。

内循环基于外循环。因此,您的声明无效。

并且,+ =(加法赋值运算符)复杂度为O(1)。

对于外循环的第一次迭代,内循环将执行N次。

对于外循环的第二次迭代,内循环将执行N / 2次。

等等......

因此,总执行步骤

       = N + N/2 + ... + 1  

// log 2 N次几何级数...

       ~ N / (1-(1/2)) (Infinite GP Summation Formula) //though the series would go up to 1
       ~ 2N.
       // ~ means approximately.

因此,代码的时间复杂度为O(N)。

所以,给出的答案是正确的。