// 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))的多个循环复杂度,请确认?提前感谢。
答案 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表示法的正式方法:
答案 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))