以下嵌套循环依赖关系的时间复杂度是多少?

问题描述:

count=0; 
for(i=1;i<=n;i*=5) 
    for(j=1;j<=i;j++) 
     count++; 

根据我目前所了解的内容,内环将增加5的幂数,就像我在下面的表格中所描述的那样,即当i = 1,j = 1时,当i = 5,j = 5和等等。以下嵌套循环依赖关系的时间复杂度是多少?


i | 1 | 5 | 25 | 125 |


j | 1 | 5 | 25 | 125 |


这使j增加,如在5^0,5^1,5^2,5^3等等。使用高斯特技,1 + 2 + 3 + 4 ... + n =(n 2 + n)/ 2 = n 2/2 + n/2,这给出了5 ^((n 2 + n)/2)。

这是否使总运行时间O(log base(5)n)?

我们会考虑循环,其中内循环的迭代次数是独立于外环的指数值

然后我们会尽量的n不同的情况,以找出正确的模式:

n = 5 

外:1 5

内:

i = 1:1次

i = 5:5次

1 + 5 = 6次,k = 2

n = 25 

外:1 5 25

内:

i = 1:1次

i = 5:5次

i = 25:25倍

1 + 5 + 25 = 31次,k = 3

n = 125 

外:1 5 25 125

内:

1 + 5 + 25 + 125 = 156次,k = 4

inn ER:

(1 + ... + n/5^2 + n/5^1 + n/5^0) 

n(1/n + ... + 1/5^2 + 1/5^1 + 1/5^0) 

n(1/5^k-1 + ... + 1/5^2 + 1/5^1 + 1/5^0) 

O(n(1/5^k-1 + ... + 1/5^2 + 1/5^1 + 1/5^0)) 

= O(n)的

最后你可以从我们计算时间复杂度为为O(n)格局看。

链接,时间复杂度解决方案的论证与等比数列: https://justpaste.it/15fhs

+0

处测试n的不同情况时,我得到的模式完全相同,这很好看,括号中的因子是一个常数 – gartenkralle

+0

你可以请我解释一下,它是如何变成O(n)使用几何级数的公式? – Tia

+0

是的,你可以从几何级数推断时间复杂度 看到更新的答案链接。 – Oghli

这里不能直接应用公式1 + 2 + … + n = n(n+1)/25^0 + 5^1 + … + 5^m5^(0 + 1 + … + m)是两个完全不同的东西。

该系列5^0 + 5^1 + … + 5^mgeometric series。使用式应该是

enter image description here

这意味着5^0 + 5^1 + … 5^m = O(5^m)。还请注意5 m = n。

类=>
+0

这是错误的。你忽略了对数行为。 – gartenkralle

+0

@gartenkralle你的意思是什么? – kennytm

+0

总和不应该运行到(n-1)。它应该运行到log(n)。由于那个结果是不同的。 – gartenkralle

您必须从m = 0到小于2n的log5(n)之和5^m。所以运行时间在O(n)

例如,如果n = 125,则总和为156(< 2n)。

对于任何n,总和小于2n。

+0

你是对的,当我在你的最后一行代码行的内循环 – Oghli