【耀阳的读书笔记】算法导论(2)_Θ、O、Ω傻傻分不清楚

来源:互联网 发布:填表软件 编辑:程序博客网 时间:2024/06/07 22:13

ΘOΩ傻傻分不清楚

远离数学太久,又看到这些符号,一开始真的有点懵。本书的第三章在介绍渐近符号的时候,侧重在概念和举例,然后就抛出了渐近符号相关的定理和性质,但是没有给出证明,乍看起来很让人崩溃,所以,我从概念出发,试着对这些定理和性质进行了证明。
由于通常情况下,渐近地,更有效的某个算法对除很小的输入规模外的情况,将是最好的选择,所以,研究渐进符号是必要的,这两天对这几种渐进记号以及渐进记号的几个性质重新复习了一下。


Θ:描述渐近紧确界的渐近记号

Θ记号的定义

对于一个给定的函数g(n), 用Θ(g(n))来表示一下函数的集合:
Θ(g(n)) = { f(n): 存在正常量c1,c2,n0,使得对与所有的nn0,有0c1g(n)f(n)c2g(n) }

根据概念,可以知道Θ(g(n))是一个函数集合,即f(n)Θ(g(n)),在算法分析中,通常记作f(n)=Θ(g(n))

多项式的渐近紧确界

直觉上,一个渐进整函数的低阶项在确定渐近确界的时候可以被忽略,因为对大的n,它们是无足轻重的。当n比较大的时候,即使是高阶项的一个很小的部分都足以支配所有的低阶项。

一般来说,对于任意多项式p(n)=di=0aini,其中ai为常量并且ai>0,根据上面所述,我们可以得到p(n)=Θ(nd)。特殊的,当d = 0时,即p(n)是一个常量函数,此时p(n)=Θ(n0)p(n)=Θ(1),我们经常用记号Θ(1)来意指一个常量或关于某个变量的常量函数。

O:描述渐近上界的渐近记号

对于给定的函数g(n),用O(g(n))来表示一下函数的集合:
O(g(n)){f(n): 存在正常量c和n0,使得对所有的nn0, 都有0f(n)cg(n) }

Ω:描述渐近下界的渐近记号

对于给定的函数g(n),用Ω(g(n))来表示一下函数的集合:
Ω(g(n)){f(n): 存在正常量c和n0,使得对所有的nn0, 都有0cg(n)f(n) }

ο:描述非渐近紧确的上界的渐近记号

定义一

对于给定的函数g(n),用ο(g(n))来表示一下函数的集合:
ο(g(n)) = {f(n): 对于任意正常量c > 0, 存在常量n00,使得对所有nn0,都有0f(n)<cg(n) }

定义二

根据定义一,容易想到,当n趋向于无穷时,函数f(n)相对于g(n)来说变得微不足道了,即

limn+f(n)g(n)=0

这就是ο(g(n))的另一个定义。

ω:描述非渐近紧确的下界的渐近记号

定义一

对于给定的函数g(n),用ω(g(n))来表示一下函数的集合:
ω(g(n)) = {f(n): 对于任意正常量c > 0, 存在常量n00,使得对所有nn0,都有0cg(n)<f(n) }

定义二

根据定义一,容易想到,当n趋向于无穷时,函数f(n)相对于g(n)来说变得任意大了,即

limn+f(n)g(n)=

一个定理、四种性质

一个定理

对于任意两个函数f(n)g(n),我们有f(n)=Θ(g(n)),当且仅当f(n)=O(n)f(n)=Ω(g(n))

我们来试着证明一下,根据这个定理的描述,我们要分别证明充分性和必要性。
充分性:
即证明当f(n)=O(g(n))f(n)=Ω(g(n))时,有f(n)=Θ(g(n))
f(n)=O(g(n))可以得到,存在正常量c1n0,使得当nn0时,
0f(n)c1g(n) (1)
同理,由f(n)=Ω(g(n))可知,存在正常量c2n1,使得当nn0时,
0c2g(n)f(n) (2)
由(1)、(2)可知,存在正常量c1,c2,和正常量n0(n0n1)或者n1(n1>n0)
使得当nn0或者nn1时,
0c2g(n)f(n)c1g(n)
也即 f(n)=Θ(g(n))
必要性:
即证明当f(n)=Θ(g(n))时,有f(n)=O(g(n))f(n)=Ω(g(n))
根据充分性的证明过程,可以很显然的得出这种情况必然成立。

四个性质

传递性

f(n)=Θ(g(n))g(n)=Θ(h(n)),蕴含着f(n)=Θ(h(n))

来证明一下这条性质:
f(n)=Θ(g(n))可知,存在正常量c1,c2,n0,使得当nn0时,
0c1g(n)f(n)c2g(n) (1)
同理,由g(n)=Θ(h(n))可知,存在正常量c3,c4,n1,使得当nn1时,
0c3h(n)g(n)c4h(n) (2)
将(2)乘以c1可得,0c1c3h(n)c1g(n)c1c4h(n)(3),
将(2)乘以c2可得,0c2c3h(h)c2g(n)c2c4h(n)(4),
由(1)(3)可知,存在正常量c5=c1c3使得当nn1时,
0c5h(n)f(n)(5)
由(1)(4)可知,存在正常量c6=c2c4使得当nn1时,
0f(n)c6h(n)(6)
由(5)(6)可知,存在正常量c5,c6,n1,使得当nn1时,
0c5h(n)f(n)c6h(n)
f(n)=Θ(h(n))
下面这几条性质的证明方法也类似:

f(n)=O(g(n))g(n)=O(h(n)),蕴含着f(n)=O(h(n))
f(n)=Ω(g(n))g(n)=Ω(h(n)),蕴含着f(n)=Ω(h(n))
f(n)=ο(g(n))g(n)=ο(h(n)),蕴含着f(n)=ο(h(n))
f(n)=ω(g(n))g(n)=ω(h(n)),蕴含着f(n)=ω(h(n))

自反性

f(n)=Θ(f(n))
f(n)=O(f(n))
f(n)=Ω(f(n))

对称性

f(n)=Θ(g(n))g(n)=Θ(f(n))

下面来证明一下这个性质,也是分别证明充分性和必要性:
必要性:
f(n)=Θ(g(n))可知,存在正常量c1,c2,n0,使得当nn0时,有
0c1g(n)f(n)c2g(n)(1)
将(1)除以以正常量c1得:
0g(n)1/c1f(n)c2/c1g(n)
即存在正常量c3=1/c1使得,当nn0时,有
0g(n)c3f(n)(2)
将(1)除以正常量c2得:
0c1/c2g(n)1/c2f(n)g(n)
即存在正常量c4=1/c2使得,当nn0时,有
0c4f(n)g(n)(3)
由(2)(3)得:
存在正常量c3,c4,n0使得,当ngeqn0时,有
0c4f(n)g(n)c3f(n)
g(n)=Θ(f(n))
充分性:
同证明必要性得步骤,可以证得,充分性也成立。

转置对称性

f(n)=O(g(n))g(n)=Ω(f(n))
f(n)=ο(g(n))g(n)=ω(f(n))

按照之前得证明方式,根据渐近记号得概念,这两个性质容易证明。

等式和不等式中的渐近记号

我们知道,当渐近记号独立于等式(或不等式)得右边时,比如n=O(n2),实际上意味着nO(n2)

当渐近记号位于公式中时,我们将其解释为代表某个我们不关注名称得匿名函数。例如:
公式:2n2+3n+1=2n2+Θ(n)意思是2n2+3n+1=2n2+f(n),其中f(n)Θ(n),根据渐近记号得性质可以知道,3n+1=Θ(n)

当渐近记号出现在等式得左边得时候,例如:
2n2+Θ(n)=Θ(n2),我们可以直观得理解,无论怎样选择等式左边得匿名函数,总有一种办法来选择等号右边得匿名函数,使等式成立。即:
对于任意函数f(n)Θ(n),总有g(n)Θ(n2),使得对于所有得n,都有2n2+f(n)=g(n)。换句话说,也就是右边比左边提供得细节更为粗糙。

未完待续

下一篇将详细的讨论分治策略,另外,将会学习一些使用分治策略的新的算法

原创粉丝点击