时间复杂度和几何级数,嵌套循环

时间:2019-03-21 11:10:52

标签: loops time-complexity big-o

我有以下代码,我试图了解其时间复杂度是什么:

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

这是对的吗?
谢谢!

1 个答案:

答案 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来满足。