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

时间:2017-04-09 20:33:20

标签: for-loop time-complexity big-o nested-loops

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)?

3 个答案:

答案 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)/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。

答案 2 :(得分:0)

你必须将5 ^ m从m = 0加到log5(n),小于2n。所以运行时在 O(n)

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

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