2.1 计算复杂性函数的阶
## 增长的阶
算法的实际运行时间受除算法设计本身以外很多其他因素的影响,如:指令集、操作系统、编译器……
- 如何描述算法的效率→\to→只与输入问题的规模有关
- 增长率
- 时间复杂度
- 忽略低阶项
- 保留最高阶项
- 忽略常系数
- 常见增长阶:Θ(1)\Theta(1)Θ(1), Θ(lg n)\Theta(lg\,n)Θ(lgn), Θ(n)\Theta(\sqrt[]{n})Θ(n), Θ(n)\Theta(n)Θ(n), Θ(nlg n)\Theta(nlg\,n)Θ(nlgn), Θ(n2)\Theta(n^2)Θ(n2), Θ(n3)\Theta(n^3)Θ(n3), Θ(2n)\Theta(2^n)Θ(2n), Θ(n!)\Theta(n!)Θ(n!)
- 利用Θ(n2)\Theta(n^2)Θ(n2)表示插入排序的最坏运行时间
- 增长记号O,Θ,Ω,o,ωO, \Theta, \Omega, o, \omegaO,Θ,Ω,o,ω
- OOO表示渐进上界
- Θ\ThetaΘ表示渐进紧界
- Ω\OmegaΩ表示渐进下界
同阶函数集合 Θ\ThetaΘ
Θ(g(n))={ f(n)∣∃c1,c2>0,∀n>n0,c1g(n)≤f(n)≤c2g(n) } \Theta(g(n))=\{\,f(n)|\exists c_1,c_2 >0,\forall n>n_0,c_1g(n)\le f(n) \le c_2g(n) \,\} Θ(g(n))={ f(n)∣∃c1,c2>0,∀n>n0,c1g(n)≤f(n)≤c2g(n)}
称为与g(n)同阶的函数集合
- 若f(n)∈Θ(g(n))f(n)\in \Theta(g(n))f(n)∈Θ(g(n)), g(n)g(n)g(n)与f(n)f(n)f(n)同阶, 记作f(n)=Θ(g(n))f(n) = \Theta(g(n))f(n)=Θ(g(n))
Θ(g(n))\Theta(g(n))Θ(g(n))例子:
- 通常f(n)=an2+bn+c=Θ(n2)f(n)=an^2+bn+c=\Theta(n^2)f(n)=an2+bn+c=Θ(n2),其中a,b,c是常数且a>0a>0a>0
- 若p(n)=∑i=0dainip(n)=\sum_{i=0}^{d}a_in^ip(n)=∑i=0daini,其中aia_iai是常数且ad>0a_d>0ad>0,则p(n)=Θ(nd)p(n)=\Theta(n^d)p(n)=Θ(nd)
- Θ(n0)\Theta(n^0)Θ(n0)或者Θ(1)\Theta(1)Θ(1)为常数时间复杂性
低阶函数集合 OOO
对于给定函数g(n)g(n)g(n):
O(g(n))=f{
(n) 存在正常数c和n0满足对于所有n≥n0,0≤f(n)≤cg(n) } O(g(n))=f\{(n) \,\bold{存在}正常数c和n_0 满足对于所有n\ge n_0, 0 \le f(n) \le cg(n)\,\} O(g(n))=f{
(n)存在正常数c和n0满足对于所有n≥n0,0≤f(n)≤cg(n)}
记作f(n)∈O(g(n))f(n)\in O(g(n))f(n)∈O(g(n)), 或简记为f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n))
Θ(g(n))\Theta(g(n))Θ(g(n))与O(g(n))O(g(n))O(g(n))的关系:
- f(n)=Θ(g(n)) ⟹ f(n)=O(g(n))f(n)=\Theta(g(n))\implies f(n)=O(g(n))f(n)=Θ(g(n))⟹f(n)=O(g(n))
- Θ\ThetaΘ强于OOO
- Θ(g(n))⊆O(g(n))\Theta(g(n)) \subseteq O(g(n))Θ(g(n))⊆O(g(n))
- an2+bn+c=Θ(n2)an^2+bn+c=\Theta(n^2)an2+bn+c=Θ(n2)并且an2+bn+c=O(n2)an^2+bn+c=O(n^2)an2+bn+c=O(n2)
- an+b=O(n2)an+b=O(n^2)an+b=O(n2)
- n=O(n2)n=O(n^2)n=O(n2)
如果 f(n)=O(nk)f(n)=O(n^k)f(n)=O(nk) ,则称f(n)f(n)f(n)是多项式界限的
严格低阶函数 ooo
对于给定函数g(n)g(n)g(n):
o(g(n))=f{
(n) 存在任意正常数c,存在一个正数n0满足对于所有n≥n0,0≤f(n)<cg(n) } o(g(n))=f\{(n) \,存在\bold{任意}正常数c,\bold{存在一个正数}n_0 满足对于所有n\ge n_0, 0 \le f(n) < cg(n)\,\} o(g(n))=f{
(n)存在任意正常数c,存在一个正数n0满足对于所有n≥n0,0≤f(n)<cg(n)}
记作f(n)∈o(g(n))f(n)\in o(g(n))f(n)∈o(g(n)), 或简记为f(n)=o(g(n))f(n)=o(g(n))f(n)=o(g(n))
ooo与OOO的关系:
- OOO可能是或不是紧的
- 2n2=O(n2)2n^2=O(n^2)2n2=O(n2)是紧的,但2n=O(n2)2n=O(n^2)2n=O(n2)不是紧的
- ooo标记上界且不紧
- 2n=o(n2)2n=o(n^2)2n=o(n2),但是2n2≠o(n2)2n^2\ne o(n^2)2n2=o(n2)
- 区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{O:\exist\,c\,某…
高阶函数集合 Ω\OmegaΩ
对于给定函数g(n)g(n)g(n):
Ω(g(n))=f{
(n) 存在正常数c和n0满足对于所有n≥n0,0≤cg(n)≤f(n) } \Omega(g(n))=f\{(n) \,存在正常数c和n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} Ω(g(n))=f{
(n)存在正常数c和n0满足对于所有n≥n0,0≤cg(n)≤f(n)}
记作f(n)∈Ω(g(n))f(n)\in \Omega(g(n))f(n)∈Ω(g(n)), 或简记为f(n)=Ω(g(n))f(n)=\Omega(g(n))f(n)=Ω(g(n))
Ω\OmegaΩ用来描述运行时间的最好情况,对所有输入都正确
例如,对于插入排序:
- 最好运行情况为Ω(n)\Omega(n)Ω(n)
- 运行时间为Ω(n)\Omega(n)Ω(n) (Ω(n2)\Omega(n^2)Ω(n2)[x])
- 最坏运行时间为Ω(n2)\Omega(n^2)Ω(n2)
也可以用来描述问题:
- 排序问题的时间复杂性为Ω(n)\bold{\Omega(n)}Ω(n) →\to→ 最好情况
O,Θ,Ω\bold{O,\Theta,\Omega}O,Θ,Ω的关系:
对于f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n)) 对于f(n)和g(n),\bold{f(n)=\Theta(g(n))}当且仅当\\ \bold{f(n)=O(g(n))且f(n)=\Omega(g(n))} 对于f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))
严格高阶函数集合 ω\omegaω
对于给定函数g(n)g(n)g(n):
ω(g(n))=f{
(n) 对于任意正常数c,存在正数n0满足对于所有n≥n0,0≤cg(n)≤f(n) } \omega(g(n))=f\{(n) \,对于\bold{任意}正常数c,\bold{存在正数}n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} ω(g(n))=f{
(n)对于任意正常数c,存在正数n0满足对于所有n≥n0,0≤cg(n)≤f(n)}
记作f(n)∈ω(g(n))f(n)\in \omega(g(n))f(n)∈ω(g(n)), 或简记为f(n)=ω(g(n))f(n)=\omega(g(n))f(n)=ω(g(n))
limn→∞f(n)g(n)=∞ \lim_{n\to \infty}\frac{f(n)}{g(n)}=\infty n→∞limg(n)f(n)=∞
ω\omegaω表示不紧的下界
KaTeX parse error: Can't use function '$' in math mode at position 25: …2}{2}=\omega(n)$̲,但$\frac{n^2}{2…
ω\omegaω与 Ω\OmegaΩ 的区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{ \omega:\,\exi…
ω\omegaω与ooo的关系:
f(n)=ω(g(n)) ⟺ g(n)=o(f(n)) f(n)=\omega(g(n)) \iff g(n)=o(f(n)) f(n)=ω(g(n))⟺g(n)=o(f(n))
渐进符号的性质
-
传递性:O,Θ,Ω,o,ωO, \Theta, \Omega, o, \omegaO,Θ,Ω,o,ω
f(n)=Θ(g(n))并且g(n)=Θ(h(n)) ⟹ f(n)=Θ(h(n)) f(n)=\Theta(g(n))并且 g(n)=\Theta(h(n)) \implies f(n)=\Theta(h(n)) f(n)=Θ(g(n))并且g(n)=Θ(h(n))⟹f(n)=Θ(h(n)) -
自反性:$O,\Theta,\Omega $
f(n)=Θ(f(n)) f(n)=\Theta(f(n)) f(n)=Θ(f(n)) -
对称性:Θ\ThetaΘ
f(n)=Θ(g(n)) ⟺ g(n)=Θ(f(n)) f(n)=\Theta(g(n)) \iff g(n)=\Theta(f(n)) f(n)=Θ(g(n))⟺g(n)=Θ(f(n)) -
反对称性:O,Ω,o,ωO, \Omega, o, \omegaO,Ω,o,ω
f(n)=O(g(n)) ⟺ g(n)=Ω(f(n))f(n)=o(g(n)) ⟺ g(n)=ω(f(n)) f(n)=O(g(n)) \iff g(n)=\Omega(f(n))\\ f(n)=o(g(n)) \iff g(n)=\omega(f(n)) f(n)=O(g(n))⟺g(n)=Ω(f(n))f(n)=o(g(n))⟺g(n)=ω(f(n)) -
等价性$\cases{\text{传递性}\自反性\对称性} $$\implies $ Θ\ThetaΘ
-
并非所有函数都可比
2.2 和式的估计与界限
求和公式
-
线性和
∑k=1n(cak+bk)=c∑k=1nak+∑k=1nbk \sum_{k=1}^{n}(ca_k+b_k) = c\sum_{k=1}^{n}a_k+\sum_{k=1}^{n}b_k k=1

本章介绍了计算复杂性函数的阶,包括同阶函数集合 Θ、低阶函数集合 O、严格低阶函数 o、高阶函数集合 Ω、严格高阶函数集合 ω,以及它们之间的关系。此外,还讨论了和式的估计与界限,如求和公式、求和的界限,并通过替换法、迭代方法和Master定理法解析递归方程。内容涵盖了算法分析中的重要概念和方法。
最低0.47元/天 解锁文章
1709

被折叠的 条评论
为什么被折叠?



