algorithm - 循环分析——算法分析

标签 algorithm loops time-complexity

此问题基于此资源 http://algs4.cs.princeton.edu/14analysis .

有人可以分解为什么练习 6 字母 b 是线性的吗?外循环似乎每次都将 i 增加 2 倍,所以我认为它是对数的...

来自链接:

int sum = 0;
for (int n = N; n > 0; n /= 2)
   for (int i = 0; i < n; i++) 
      sum++;

最佳答案

这是一个几何级数。 内循环在外循环的每一次迭代中运行 i 次迭代,外循环每次减少一半。

所以,总结起来你:

n + n/2 + n/4 + ... + 1

这是 geometric series , r=1/2a=n - 收敛于 a/(1-r)=n/(1/2)=2n,所以:

T(n) <= 2n

并且由于 2nO(n) 中 - 该算法以线性时间运行。


这是一个完美的例子,可以看出复杂性不是通过乘以每个嵌套循环的复杂性来实现的(这会让你得到 O(nlogn)),而是通过实际分析有多少迭代是需要。

关于algorithm - 循环分析——算法分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31019864/

相关文章:

algorithm - "adjacent"字符串的构建图

容器规划算法

arrays - 数组中两个数字之间的最小绝对差

c++ - 提取所有可能的有序子集

c++ - 排序 k 个有序链表?

javascript - 如何构建带有循环的字符串?

arrays - 在bash中同时迭代两个数组

java - For 循环迭代挂起

python - 从列表中删除重复项的时间和空间复杂度

algorithm - Summation(n) Theta(n^2) 根据其公式如何计算,但 Theta(n) ij 我们只是将其视为单个 for 循环?