以下代码的时间复杂度是多少?

时间:2016-09-05 02:38:42

标签: algorithm loops for-loop math time-complexity

For(I=1 ; I<=n ; I++)
{
    For(J=1 ; J<=I ; J++)
        {
             For(K=1 ; K<=n^5 ; K=15 × K)
                 {
                      x=y+z;
                 }
        }  
}

根据我似乎是O(N ^ 2 log N),但是当我分析k循环时,它没有跟随Log N,这让我感到困惑,

3 个答案:

答案 0 :(得分:5)

它应该是O(n^2 log(n)),因为内部循环将被称为(n/2)(n+1)次,并且它将循环n的n^5 = 5 * log base 15的日志基数15,因为k在循环数中呈指数增长。 / p>

这导致5(n^2+n)(log base 15 of n)/2分配给x,即O(n^2 * log(n))

答案 1 :(得分:2)

问题的时间复杂性是:

enter image description here

<强>解释

当我们说

enter image description here

我们的意思是

enter image description here

<强>不

enter image description here

2个日志函数的基础来自于除以2 在for循环内部关于二进制搜索的定义,而不是来自计算机的二进制性质。

但在你的情况下,由于k = 15 × k的定义,除以值不是2而是15,所以log函数的基数必须是15而不是2。

您可以通过将k *= 15行替换为k *= 2

来查看这些相关性
print n * n * int(math.log(n**5,15) + 1)

对齐
print n * n * int(math.log(n**5,2) + 1)

在上面给出的Python代码中。结果将继续匹配。

另外,由于二进制库的退出,您需要使用nearest integer function舍入日志功能:

enter image description here

Python代码:

import math

n = 100
i = 1
while i <= n:
    j = 1
    while j <= i:
        k = 1
        counter = 1
        while k <= n**5:
            x = 1 + 1
            k *= 15
            counter += 1
        #print k
        #print counter
        j += 1
    #print j
    i += 1
#print i

print "\nTime Complexity Prediction:"
print n * n * int(math.log(n**5,15) + 1)

print "\nReal World Result:"
print (i - 1) * (j - 1) * (counter - 1)
print ""

该计划的示例结果:

对于n = 10:

Time Complexity Prediction:
500

Real World Result:
500

对于n = 100:

Time Complexity Prediction:
90000

Real World Result:
90000

对于n = 1000:

Time Complexity Prediction:
13000000

Real World Result:
13000000

对于n = 3000:

Time Complexity Prediction:
135000000

Real World Result:
135000000

答案 2 :(得分:-1)

实际上是Find-WikipediaArticle

现在,看看Search-Wikipedia-Article15BaseLog(n)

的强大功能

了解他们的成长速度。当您运行15时,效果是可忽略的,因为此序列(15的幂)在可数次迭代之前传递15, 225, 3375, 50625, 759375, 11390625, ......上的值。

这就是为什么,2nd inner loop

没有显着影响