算法设计与分析——第二章算法分析的数学基础

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

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)cn0nn0,0f(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,n0nn0,0f(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))

oooOOO的关系:

  • 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)cn0nn0,0cg(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)cn0nn0,0cg(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))

lim⁡n→∞f(n)g(n)=∞ \lim_{n\to \infty}\frac{f(n)}{g(n)}=\infty nlimg(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 和式的估计与界限

求和公式

  1. 线性和
    ∑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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值