本文是《算法导论》第三章:函数的增长的学习笔记。
没有涉及到具体的算法。
主要内容有:
- 五种渐近记号的表示
- 常用的函数与标记
3.1 渐近记号
Θ、O和Ω三种记号的图示:
先看第一幅图(a)——Θ记号
若存在正常量c1,c2,n0,使得对所有n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n),则f(n)属于集合Θ(g(n)),
可以记为f(n)∈Θ(g(n)),我们通常用f(n)=Θ(g(n))表达相同的概念。
上述公式的含义:函数f(n)能“夹入”c1g(n)和c2g(n)之间。换句话说,对所有的n⩾n0,函数f(n)在一个常量因子内等于g(n),我们称g(n)是f(n)的一个渐近紧确界(asymptotically tight bound)。
实例:可以用上述的形式化定义来证明:12n2−3n=Θ(n2),以及6n3≠Θ(n2)。
渐近正函数就是对足够大的n均为正的函数。
直觉上,一个渐近正函数的低阶项 在确定渐近确界时可以被忽略,因为对于大的n,它们是无足轻重的。
一般来说,对任意多项式p(n)=∑di=0aini,其中ai为常量且ad>0(最高阶的系数大于零),则有p(n)=Θ(nd)。
接着看图(b)——O记号
Θ记号渐近地给出了一个函数的上界和下届。当只有一个渐近上界时,使用O记号。
O(g(n))={f(n):存在正常量c,n0,使得对所有n⩾n0,有0⩽f(n)⩽cg(n)}
我们记f(n)=O(g(n))表示f(n)是集合O(g(n))的成员。注意f(n)=Θ(g(n))蕴含了f(n)=O(g(n)),因为Θ记号是一个比O记号更强的概念。
使用O记号,我们常常可以仅仅通过检查算法的总体结构来描述算法的运行时间。O记号描述上界,对插入排序算法的最坏情况运行时间的界O(n2)也适合于该算法对每个输入的运行时间。该算法对每个输入的运行时间都有一个界,这就是综合性描述。
最后看图(c)——Ω记号
正如O记号提供了渐近上界,Ω记号提供了渐进下界。
Ω(g(n))={f(n):存在正常量c,n0,使得对所有n⩾n0,有0⩽cg(n)⩽f(n)}
于是,由此引出了定理3.1。
定理 3.1
对任意两个函数f(n)和g(n),我们有f(n)=Θ(g(n)),当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))。
当一个算法的运行时间为Ω(g(n))时,我们意指不管n是什么规模,只要n足够大,对那个输入的运行时间至少是g(n)的常数倍。
等式和不等式中的渐近记号
当渐近记号出现在某个公式中时,我们将其解释为代表某个我们不关注名称的匿名函数。
例如:2n2+3n+1=2n2+Θ(n)。
按这种方式使用渐记号可以帮助消除一个等式中无关紧要的细节与混乱。
例如:归并排序的最坏情况运行时间:
如果只对T(n)的渐近行为感兴趣,就没必要准确说明所以低阶项,它们都被理解为包含在由项Θ(n)表示的匿名函数中。
在某些例子中,渐近记号出现在等式的左边,如:
无论怎么选择等号左边的匿名函数,总有一种办法来选择等号右边的匿名函数使等式成立。
o记号
o记号,非渐近紧确的上界。
o(g(n))={f(n):对任意正常量c>0,存在正常量n0>0,使得对所有n⩾n0,有0⩽f(n)<cg(n)}。
O记号与o记号类似,主要的区别 是在f(n)=O(g(n))中,界0⩽f(n)⩽cg(n)对某个常量c>0成立,但在f(n)=o(g(n))中,界0⩽f(n)<cg(n)对所有常量c>0成立。
直观上,在o记号中,当n趋向于无穷时,函数f(n)相对于g(n)来说变得微不足道了,即:
ω记号
非渐近紧确下界。
ω(g(n))={f(n):对任意正常量c>0,存在正常量n0>0,使得对所有n⩾n0,有0⩽cg(n)<f(n)}。
渐近运算的运算性质
传递性、自反性、对称性与转置对称性:
而且:两个函数f和g的渐近比较关系可与实数a与b之间的比较做类比:
- f(n)=O(g(n)) 类似于a<= b
- f(n)=Ω(g(n)) 类似于a>= b
- f(n)=Θ(g(n)) 类似于a= b
- f(n)=o(g(n)) 类似于a< b
- f(n)=w(g(n)) 类似于a> b
三分性:虽然实数具有三分性,即对于任意两个实数a、b,下列三种情况必须有一种成立:a<b,a=b或a>b。但是不是所有函数都可以渐近比较。
3.2 标准记号与常用函数
单调性
单调递增/单调递减:包含等号;严格递增/严格递减:不包含等号。
向下取整与向上取整
x的向下取整:⌊x⌋;x的向上取整:⌈x⌉。
模运算
对任意整数a和正整数n,a mod n 的值就是商a/n的余数。
若(a mod n)=(b mod n),则记a≡b(modn)
多项式
给定一个非负整数d,n的d次多项式p(n):
其中,ad≠0。
多项式为渐近正的当且仅当ad>0。对于一个d次渐近正的多项式p(n),有p(n)=Θ(nd)
若对于某个常量k,有f(n)=O(nk),则称函数f(n)是多项式有界的。
指数
对所有使得a>1的实常量a和b,有
据此可得:
对数
以2为底的自然数:
自然对数:
取幂:
复合:
一个重要的记号约定:对数函数只适用于公式中的下一项,所以lgn+k意思是指(lgn)+k
对于a>0,b>0,c>0和n,有
其中,上述等式的对数底不为1。
对任意常量a,有
表示任意正的多项式函数都比任意多对数函数增长得快。
阶乘
n!,读作“n的阶乘”。其定义为对整数n⩾0:
阶乘函数的一个弱上界是n!⩽nn,因为在阶乘中,n项的每项最多为n。
斯特林(Stirling)近似公式
由上述公式可以证明:
多重函数
记号f(i)(n)表示f(n)重复i次作用于一个初值n上。对非负整数i,我们递归地定义:
多重对数函数
lg∗n表示多重对数,多重对数增长非常慢。
斐波那契数
斐波那契数的递归定义: