01D 复杂度分析
算法分析
两个主要任务 = 正确性(不变性 * 单调性) + 复杂度
- 迭代: 级数求和
- 递归: 递归跟踪 + 递推方程 + 猜测验证
级数
- 算术级数: 与末项平方同阶
1 + 2 + ... + n = O(n^2) - 幂方级数: 比幂次方高出一阶
1^2 + 2^2 + ... n^2 = O(n^3) - 几何级数:与末项同阶
a^0 + a^1 _... + a^n = O(a^n) - 收敛级数:
1/3 + 1/7 + 1/8 + 1/15 + ... + 1/(n^2-1) = 1 = O(1), 比如抛硬币,每次的概率小于1, 可能用到小于1的项。 - 未必收敛但长度有限
- 调和级数
h(n) = 1 + 1/2 + 1/3 ... + 1/n = Θ(logn) - 对数级数
log1 + log2 + ... + logn = log(n!) = Θ(nlogn)
- 调和级数
循环
i, j 两层循环对应算术级数, 即 O(n^2), 也可以想象为矩形面积。
非极端元素 + 起泡排序
非极端元素 , 任意取3个元素,中间值,O(1) 算法
起泡排序,任意一对相邻元素都是顺序或逆序的
正确性证明
有穷性 <- 不变性 单调性 正确性
封底估算
- 原子弹当量
- 地球直径 787 * 360/7.2 = 39350
- 人口普查数据排序
- 硬件提升 30年 -》20分;
- 算法提升 30年 -》30秒
1天 = 10^5秒
1生 = 100 年 = 3 * 10^9 秒
三生三世 = 300年 = 10^10 秒