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,这让我感到困惑,
答案 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)
问题的时间复杂性是:
<强>解释强>
当我们说
时我们的意思是
<强>不强>
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舍入日志功能:
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-Article
:15BaseLog(n)
了解他们的成长速度。当您运行15
时,效果是可忽略的,因为此序列(15的幂)在可数次迭代之前传递15, 225, 3375, 50625, 759375, 11390625, ......
上的值。
这就是为什么,2nd inner loop