这是本文档旧的修订版!
CLRS 算法导论
第一部分 基础知识
2.1 插入排序 INSERTION-SORT
- 循环不变式,三条性质:
- 初始化:循环第一次迭代之前,它为真
- 保持:如果某次迭代之前它为真,那么下次迭代之前仍为真
- 终止:循环终止时,不变式有其性质助于证明算法正确
2.2 分析算法
- 通常集中于只求最坏情况运行时间,除了随机化算法
- 感兴趣的是运行时间的增长率或增长量级
- 插入排序增长率为 Θ(n2)
2.3 设计算法
- 分治法:
- 分解原问题为若干规模较小实例的子问题
- 解决子问题,递归求解子问题,直到子问题足够小时直接求解
- 合并子问题的解,成为原问题的解
- 归并排序 MERGE-SORT
- 增长量为 Θ(nlgn)
- 思考题2-2 冒泡排序 BUBBLE-SORT
- 最坏Θ(n2)
3.1 渐近记号
- 渐近紧确界(asymptotically tight bound)
- Θ(g(n)) 表示以下函数的集合
- Θ(g(n)):={f(n):∃c1∃c2∃n0(∀n⩾n0⇒0⩽c1g(n)⩽f(n)⩽c2g(n))}
- Θ 记号渐近地给出一个函数的上界与下界
- 对任意多项式 p(n)=∑di=0aini 可证 p(n)=Θ(nd)
- 当只推渐近上界时,使用 O 记号
- O(g(n)):={f(n):∃c∃n0(∀n⩾n0⇒0⩽f(n)⩽cg(n))}
- 显然 Theta(g(n))⊆O(g(n))
- 相应得,Ω 记号只推一个函数的渐近下界
- Ω(g(n)):={f(n):∃c∃n0(∀n⩾n0⇒0⩽cg(n)⩽f(n))}