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等等时
我| 1 | 5 | 25 | 125 |
j | 1 | 5 | 25 | 125 |
这使j增加,如5 ^ 0,5 ^ 1,5 ^ 2,5 ^ 3等。使用高斯特里克,1 + 2 + 3 + 4 ... + n =(n²+ n)/ 2 =n²/ 2 + n / 2,这给出了总迭代次数5 ^((n²+ n) / 2)。
这是否会使总运行时间为O(log base(5)n)?
答案 0 :(得分:4)
We'll consider loops where the number of iterations of the inner loop is independent of the value of the outer loop's index
then we will try different cases of n
to figure out the right pattern :
n = 5
outer : 1 5
inner :
i = 1
: 1 times
i = 5
: 5 times
1 + 5 = 6 times , k = 2
n = 25
outer : 1 5 25
inner :
i = 1
: 1 times
i = 5
: 5 times
i = 25
: 25 times
1 + 5 + 25 = 31 times , k = 3
n = 125
outer : 1 5 25 125
inner :
1 + 5 + 25 + 125 = 156 times , k = 4
inner :
(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)
finally you can see from the pattern that we calculate time complexity is O(n).
link to time complexity solution proof with geometric series: https://justpaste.it/15fhs
答案 1 :(得分:1)
您无法在此处直接应用公式1 + 2 + … + n = n(n+1)/2
。
5^0 + 5^1 + … + 5^m
和5^(0 + 1 + … + m)
是完全不同的两件事。
系列5^0 + 5^1 + … + 5^m
是geometric series。使用的公式应为
这意味着
5^0 + 5^1 + … 5^m = O(5^m)
。另请注意,5 m = n。
答案 2 :(得分:0)
你必须将5 ^ m从m = 0加到log5(n),小于2n。所以运行时在 O(n)。
例如,如果n = 125,则sum为156(<2n)。
对于任何n,总和小于2n。