如何找到此代码的渐近时间复杂度?
for i=1 to n do
j=2
while j<i do
j=j*j
在我的笔记中,我有答案O(n * log(logn)),但没有解释。
答案 0 :(得分:2)
第一个for循环运行n次。内部循环以正方形进行迭代,因此需要O(loglogn)
因此,总复杂度为O(n*log(logn))
。
要理解为什么在广场中迭代需要O(log(logn))
次,请看这种方式:
假设n与2 ^ 16一样大。
Initially: j = 2
1st step : j = 2^2
2nd step : j = 2^4
3rd step : j = 2^8
4th step : j = 2^16.
因此只需要4个步骤即loglog(2 ^ 16)。
所以现在对于任何n = 2^k
,你从2开始,每次你正在平方时。所以,你可以做到最近O(logk)
平方来达到k。自n = 2^k
起,k = log(n)
因此O(logk)
与O(log(logn)).
相同