确定Big-o While循环

时间:2014-07-15 20:03:15

标签: algorithm while-loop big-o

// n> 0

i ← 0 
while (i < n) 
     j ← 0 
     while (j < power(2,i)) 
         j ← j + 1 
     done 
    i ← i + 1 
done

总体复杂度是否为O(n(log(n)),因为内部while循环具有条件,其中2 ^ i so 2 ^ 0 2 ^ 1 2 ^ 2 ... = 1 2 8 16 32 64 128。因此对于2 ^ i&lt; n - &gt; log(n)&gt; i?

外环看起来简直就是O(n)。

O(n(log(n))的多个循环复杂度,请确认?提前感谢。

4 个答案:

答案 0 :(得分:5)

这是O(2^n)

对于外循环,迭代次数为n,因此内部循环对i的每个值执行从0到n-1。
每次内循环的迭代次数为2^i,因此整个程序的迭代次数为:

2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + ... +2^(n-1)

此总和等于2^n - 1。因为2 ^ n与1相比是如此之大,我们可以在big-O表示法中删除1,给我们O(2^n)

答案 1 :(得分:3)

使用Sigma表示法的正式方法:

enter image description here

答案 2 :(得分:0)

看起来像O(2 ^ n),内部循环是从i = 0到i = n-1的(2 ^ i)之和,它总和为2 ^(i)-1次操作

答案 3 :(得分:0)

i ← 0 
while (i < n) 
    j ← 0 
    while (j < power(2,i)) 
         j ← j + 1 
    done 
    i ← i + 1 
done

时间复杂度

Time = 2^0 + (2^0 + 2^1) + .. + (2^0 + .. + 2^(n-1))

Time = n * 2^0 + (n-1) * 2^1 + .. + (n-(n-1)) * 2^(n-1)

Time = SUM { (n-k) * 2^k | k = 0..(n-1) }

Time = 2^(n+1) - n - 2

Time ~ O(2^(n+1))