algorithm - 这个算法的复杂度是多少,我可以把它加到无穷大吗?

标签 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²)。 是真的吗?

最佳答案

如您所见,循环运行如下。

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是一个可以假定为无限大的数时。

由于大 O 符号忽略常量,

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

关于algorithm - 这个算法的复杂度是多少,我可以把它加到无穷大吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318891/

相关文章:

regex - 检测正则表达式是否为指数

javascript - CoffeeScript 循环方法

php - While 循环过滤器类别

c - 用ctrl+d结束while循环,scanf?

python - 循环遍历 os.walk() 困惑

java - 需要帮助编程战舰位置选择器/检查器

c - 为什么我的线程合并排序比基本的递归合并排序慢? [复制]

algorithm - 扩大或缩小不规则多边形

algorithm - 多项式逆

java - 创建一个简单的文本菜单: String out of bonds expection ( range 0 ) Java