我有以下代码,我试图了解其时间复杂度是什么:
for (int i = 1 ; i <= n ; i = i*2)
for (int j = 1 ; j <= n ; j = j*2)
for (int k = 1 ; k <= j ; k++)
我所做的是:
第一个循环运行log n次,第二个循环运行log n次,第三个循环是几何级数
所以总的来说,我的运行时间将是:n*(log(n))^2
这是对的吗?
谢谢!
答案 0 :(得分:-1)
从理论上讲,您是正确的,复杂度为n*(log(n))^2
。
对于实用让我们迭代n = 1000:
i = 1; n= 1000; j= 1;k =1; result = 0
while i<=n:
j=1
while j<=n:
k=1
while k<=j:
result = result+1
k = k+1
j = j*2
i = i*2
print(result)
我们得到结果= 10230
因此,我们使用floor(logn)+1) * (2 ^ floor(logn)+1) - 1)
公式得出的结果的实际值。对于n = 1000,它是10 *(2 ^ 10-1)
对于n = 2 ^ 25 我们得到的结果1744830438也可以使用公式= 26 *((2 ^ 26)-1)= 1744830438来满足。