这个算法的复杂性是什么,我能把它加到无穷大吗?

时间:2015-12-16 17:54:28

标签: algorithm loops while-loop time-complexity logarithm

Func(n)
{
   i = n
   while(i>=1)
      g(i);
      i = i/3;
}

这种算法的复杂性是什么? (而g(n)的复杂度是theta(n²)) 我假设更大的n你说复杂性是

n²+(n / 3)²+(n /3²)²+(n /3³)².....无穷大。

答案是theta(n²)。 这是真的吗?

3 个答案:

答案 0 :(得分:3)

正如您所观察到的,循环运行如下。

Iteration 1: n^2 = n^2/3^0
Iteration 2: (n/3)^2 = n^2/3^2
Iteration 3: (n/3^2)^2 = n^2/3^4
Iteration 4: (n/3^3)^2 = n^2/3^6
...
Iteration k: (n/3^(k-1))^2 = n^2/3^(2*(k-1))

使用几何级数求和的公式,我们得到的总时间是

T(iteration1) + T(iteration2) + ... + T(Iterationk)

term 1 = n^2
ratio = 1/9
sum = 9 * n^2 / 8 

当K是一个可以假定为无穷大的大数时。

由于Big O表示法忽略常量,

O( 9* n^2 /8) = O(n^2)

答案 1 :(得分:1)

让我们看一下我们手中的系列。

=> n² + (n²/3) + (n/3)² + (n/3²)² + (n/3³)²..... 
taking n² common
=> n² * [ 1 + (1/3) + (1/3)² + (1/3²)² + (1/3³)²..... ]

由于[ 1 + (1/3) + (1/3)² + (1/3²)² + (1/3³)²..... ]是递减系列,它等于1

因此答案是O(n²)

<小时/> 编辑1:

证明系列[ 1 + (1/3) + (1/3)² + (1/3²)² + (1/3³)²..... ]的总和,在下面。

enter image description here

答案 2 :(得分:1)

严格地说,i是一个整数,很快就会变成0(在floor(log3(n)之后)迭代),所以没有理由去无限。

无论如何,考虑i作为理性结果,近似的真实公式不会改变渐近行为,仍然是O(n²)。近似以两种方式出现

  • i / 3可能与楼层(i / 3)不同;

  • 可以加入无穷大;小于1的条件只会增加到4/3,这是完全可以忽略的。