分析嵌套的for循环

时间:2016-01-23 20:02:53

标签: for-loop time-complexity

  

分析运行时间的复杂性:

for(i=1; i <= n; i=i*2)
  for(j=1; j<= n-i; j++)
    print j;

我的尝试:

记下i,j

的值
i:  1       |   2        |  …|  2^i     |...| 2^log_2(n)=n

j:  1...n-1 |   1...n-2  |   | 1...n-2^i|...| 0

所以我得到以下内容:

enter image description here

这是对的吗?我真的不确定变量和中间总和的变化。

1 个答案:

答案 0 :(得分:1)

我们将分别查看循环的每个部分。

外部循环可以表示为:

for(i=1; i <= n; i=i*2)
    f(n, i)

其中f(n,i)是复杂O(f)的内循环。这具有log(n) * O(f)的复杂性。

for(j=1; j<= n-i; j++)
    print j;

由于n支配n,因此复杂度为ii是2的幂,小于n,所以它们的差异最差n - 1

因此,复杂性为log(n) * nnlog(n)