这个问题的时间复杂度是多少?

时间:2020-02-21 17:30:16

标签: data-structures time-complexity

这段代码的时间复杂度是多少?

int count=0;

for(int I=N;I>0;I=I/2)

{

for(int j=0;j<I;j++)

   {

      count=count+1;

    }

}

请清楚解释

1 个答案:

答案 0 :(得分:2)

内部循环执行n次迭代,然后进行n / 2,然后进行n / 4,等等。

i =n   n/2      n/4    n/8  ....................logn times

j=n     n/2     n/4    n/8 ...........logn tmes

T(n) = n+ n/2 + n/4 + n/8 + ...........logn time
       = n(1+ 1/2 + 1/4 + .............logn times) Decreasing GP
     =O(n)

因此

时间复杂度为O(n)

要了解有关几何级数的更多信息,请参见此document

这里让我们举个例子:

LET n = 10

最初:i = 10(第一个循环)

           j = 0 < 10(i) so it will loop from 0 to 9 times

现在,嵌套环超过这个位置

i /= 2

i = 5(第一个循环)2次迭代的SO值。

这一次j将从j = 0 <5(i)开始运行,因此它将从0循环到5次

i的每个时间值都将除以2,并且类似的j值将从0迭代到i / 2次。

因此,T(n) = O(n + n/2 + n/4 + … 1) = O(n)代表j(仅用于j的迭代)

i               j

10           0-9 times

5              0 - 4 times

2             0 - 1 times

类似地,最初为n的j值(即10)按n / 2形成GP的顺序递减,因此我们得到 O(n)