





















🕒 阅读时间:3 分钟 📝 字数:803 👀 阅读量: Loading...
计算机算法设计与分析(第5版)
ISBN编号:9787121344398
💡 有趣的发现: ISBN编号相同却有两个不同封面的书,可能是出版商重印了。
上界(Upper Bound): 算法复杂度的上界用大O表示法表示,即 O(f(n))O(f(n)),表示算法的运行时间不会超过 f(n)f(n) 的常数倍。
确界(Tight Bound): 算法复杂度的确界用Θ表示法表示,即 Θ(f(n))Θ(f(n)),表示算法的运行时间既有上界又有下界,都是 f(n)f(n) 的常数倍。
下界(Lower Bound): 算法复杂度的下界用Ω表示法表示,即 Ω(f(n))Ω(f(n)),表示算法的运行时间至少是 f(n)f(n) 的常数倍。
注意:一般而言,我们通常考虑最差情况的复杂度,也就是 O(f(n))O(f(n))。
原理:通过计算 T(n)T(n) 与 f(n)f(n) 的比值极限来确定渐进复杂度。
验证方法:对于给定的 T(n)T(n) 和 f(n)f(n),计算 limn→∞T(n)f(n)\lim_{n\to\infty}\frac{T(n)}{f(n)}。
例子:对于 T(n)=2n2+3n+1T(n)=2n^2+3n+1 和 f(n)=n2f(n)=n^2,计算极限 limn→∞2n2+3n+1n2=limn→∞(2+3n+1n2)=2\lim_{n\to\infty}\frac{2n^2+3n+1}{n^2}=\lim_{n\to\infty}(2 + \frac{3}{n} +\frac{1}{n^2})=2
这是一个正常数,所以 T(n)=Θ(n2)T(n)=\Theta(n^2)。
提示:一般而言,我们只需要考虑最高次项的系数,除非实在是不确定才会用到这个公式。
主定理(Master Theorem)是分析递归算法时间复杂度的一个强大工具,适用于形如 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n) 的递归方程,其中:
主定理的三种情况:
例子:分析归并排序 T(n)=2T(n2)+nT(n) = 2T(\frac{n}{2}) + n
递归树方法是一种可视化的方式来分析递归方程。
基本步骤:
例子:分析 T(n)=2T(n/2)+nT(n) = 2T(n/2) + n
递归树:
总工作量 = n+n+...+nn + n + ... + n (log2n+1\log_2 n + 1项) = Θ(nlogn)\Theta(n\log n)
代入法(也称为归纳法)是通过猜测解的形式,然后使用数学归纳法证明猜测是正确的。
基本步骤:
例子:证明 T(n)=2T(n/2)+nT(n) = 2T(n/2) + n 的解为 T(n)=O(nlogn)T(n) = O(n\log n)
假设 T(n)≤cnlognT(n) \leq cn\log n 对某个常数 c>0c > 0
验证: T(n)=2T(n/2)+n≤2c(n/2)log(n/2)+n=cnlog(n/2)+n=cnlogn−cnlog2+n=cnlogn−cn+nT(n) = 2T(n/2) + n \leq 2c(n/2)\log(n/2) + n = cn\log(n/2) + n = cn\log n - cn\log 2 + n = cn\log n - cn + n
当 c≥1c \geq 1 时,T(n)≤cnlognT(n) \leq cn\log n,假设成立。
这要没ai,写latex得累死…
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。