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

阿米特·南达尔

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

int count=0;

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

{

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

   {

      count=count+1;

    }

}

请解释清楚

用户11935734

内部循环进行 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)

要了解有关几何系列的更多信息,请参阅此文档

这里让我们举个例子:

让 n = 10

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

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

现在在嵌套循环结束之后

i /= 2

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

这次 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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章