第二章 算法分析的数学基础
第二章 算法分析的数学基础
2.1 计算复杂性函数的阶
2.1.0 增长的阶
- 描述算法效率?增长率
- 忽略低阶项,保留高阶项;忽略常系数
- θ
- 插入排序最坏运行时间θ( n 2 n^2 n2)
2.1.1 同阶函数集合-θ(g(n))-渐进紧界
注意: C 1 、 C 2 > 0 C_1、C_2>0 C1、C2>0;
- p ( n ) = ∑ i = 1 d a i n i = θ ( n d ) , a i 为 常 数 且 a d > 0 p(n)=\sum_{i=1}^d a_in^i=θ(n^d),a_i为常数且a_d>0 p(n)=∑i=1daini=θ(nd),ai为常数且ad>0
2.1.2 低阶函数-O(g(n))-渐进上界(cg(n)作为f(n)的上界)
- f(n)=θ(g(n)) => f(n)=O(g(n));θ(g(n))∈O(g(n));
- θ标记(渐进紧界)强于O标记(渐进上界)
- an+b = O( n 2 n^2 n2); n =O( n 2 n^2 n2) ;
- f(n)=O( n k n^k nk) <=> f(n)是多项式界限的
- O用来描述运行时间最坏情况,对所有输入都正确,但θ无法对所有输入都正确。
2.1.3 高阶函数-Ω(g(n))-渐进下界
- 关于高阶低阶容易混淆的情况,当f(n)是g(n)的高阶函数,即f(n)在某个结点之后一直在c*g(n)上方,记为f(n)=O(g(n))。
- 对于f(n)和g(n), f(n) = θ(g(n))当且仅当f(n) = O(g(n))且f(n) = Ω(g(n)).
- Ω用来描述运行时间最好情况,对所有输入都正确,∴最好运行时间=运行时间≠最坏运行时间
2.1.4 严格低阶-o(g(n))-不紧的上界
- 某个正常数c在O标记中, 但所有正常数c在o标记中(存在与任意)
- f(n)=o(g(n)) => lim n → + ∞ f ( n ) g ( n ) = 0 \lim_{n\to +\infty}\frac {f(n)}{g(n)}=0 limn→+∞g(n)f(n)=0
2.1.5 严格高阶-ω(g(n))-不紧的下界
- f(n)=w(g(n)) <=> g(n)=o(f(n))
2.1.6 渐近符号的性质
- 传递性-所有符号
- 自反性-O、θ、Ω
- 对称性-θ
- 反对称性-O&Ω、o&ω
- 存在f(n)≠O(g(n)),f(n)≠Ω(g(n))同时成立的情况
2.2 和式的估计与界限
-
可以通过上界和下界描述时间复杂度
-
和式的估计:
-
线性和
- ∑ ( c a k + b k ) = c ∑ a k + ∑ b k ; ∑(ca_k+b_k)=c∑a_k+∑b_k; ∑(cak+bk)=c∑ak+∑bk;
-
级数
- ∑ i = 1 n i = θ ( n 2 ) \sum_{i=1}^ni=θ(n^2) ∑i=1ni=θ(n2)
- ∑ k = 0 n x k = x n + 1 − 1 x − 1 , ( x ≠ 1 ) \sum_{k=0}^{n}x^k=\frac{x^{n+1}-1}{x-1},(x≠1) ∑k=0nxk=x−1xn+1−1,(x=1)
- ∑ k = 0 ∞ x k = 1 1 − x , ( ∣ x ∣ < 1 ) \sum_{k=0}^{\infty}x^k=\frac{1}{1-x},(|x|<1) ∑k=0∞xk=1−x1,(∣x∣<1)
- ∑ k = 1 n 1 k = l n k + O ( 1 ) \sum_{k=1}^n\frac{1}{k}=lnk+O(1) ∑k=1nk1=lnk+O(1)
- ∑ k = 1 n − 1 1 k ( k + 1 ) = 1 − 1 n \sum_{k=1}^{n-1}\frac{1}{k(k+1)}=1-\frac{1}{n} ∑k=1n−1k(k+1)1=1−n1
- l o g ( ∏ k = 1 n a k ) = ∑ k = 1 n l g a k log(\prod_{k=1}^{n}a_k)=\sum_{k=1}^{n}lga_k log(∏k=1nak)=∑k=1nlgak
- etc…
-
和的界限
-
-
直接求和的界限
-
放缩: ∑ k = 1 n a i ≤ n × m a x { a k } \sum_{k=1}^na_i≤n\times max\{a_k\} ∑k=1nai≤n×max{ak}
-
比值: a k + 1 a k ≤ r , 则 a k ≤ a 0 r k \frac{a_k+1}{a_k}≤r,则a_k≤a_0r^k akak+1≤r,则ak≤a0rk
-
分裂和: ∑ k = 1 n k ≥ ∑ k = 1 n / 2 0 + ∑ k = n / 2 + 1 n n 2 \sum_{k=1}^nk≥\sum_{k=1}^{n/2}0+\sum_{k=n/2+1}^n\frac{n}{2} ∑k=1nk≥∑k=1n/20+∑k=n/2+1n2n
-
分裂+比值:
-
积分的几何性质:
- 单调递减则恰好相反。
-
2.3 递归方程
-
替代方法
-
猜想:联想已知的T(n)或先证明较松的上下界,再缩小不确定性范围。
-
数学归纳法
-
可以在猜测值中减去低阶项进行处理
-
-
变量替换方法:
对于 T ( n ) T(\sqrt{n}) T(n):令 m = lg n 则 n = 2 m , S ( m ) = T ( 2 m ) , 则 T ( 2 m 2 ) = S ( m 2 ) m=\lg{n}则n=2^m,S(m)=T(2^m),则T(2^{\frac {m}{2}})=S(\frac{m}{2}) m=lgn则n=2m,S(m)=T(2m),则T(22m)=S(2m)
-
迭代(递归树)法
-
递归树+和式估计
-
T = a T ( n b ) + O ( g ( n ) ) T=aT(\frac {n}{b})+O(g(n)) T=aT(bn)+O(g(n))
- 树高: log b n + 1 \log_bn+1 logbn+1, 叶子节点数: a log b n = n log b a a^{\log_bn}=n^{\log_ba} alogbn=nlogba
-
- 可以猜测: T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2),然后用归纳法证明
-
Master定理
-
求解 T ( n ) = a T ( n b ) + f ( n ) , a ≥ 1 且 b > 1 T(n)=aT(\frac{n}{b})+f(n),a≥1且b>1 T(n)=aT(bn)+f(n),a≥1且b>1的递归方程:
-
a : 子问题数量
b : 子问题从原问题缩小的比例
f(n): 将子问题的解,整合的代价
-