【耀阳的读书笔记】算法导论(2)_Θ、O、Ω傻傻分不清楚
来源:互联网 发布:填表软件 编辑:程序博客网 时间:2024/06/07 22:13
Θ 、O 、Ω 傻傻分不清楚
远离数学太久,又看到这些符号,一开始真的有点懵。本书的第三章在介绍渐近符号的时候,侧重在概念和举例,然后就抛出了渐近符号相关的定理和性质,但是没有给出证明,乍看起来很让人崩溃,所以,我从概念出发,试着对这些定理和性质进行了证明。
由于通常情况下,渐近地,更有效的某个算法对除很小的输入规模外的情况,将是最好的选择,所以,研究渐进符号是必要的,这两天对这几种渐进记号以及渐进记号的几个性质重新复习了一下。
Θ :描述渐近紧确界的渐近记号
Θ 记号的定义
对于一个给定的函数g(n), 用
Θ(g(n)) 来表示一下函数的集合:
Θ(g(n)) = {f(n) : 存在正常量c1,c2,n0 ,使得对与所有的n≥n0 ,有0≤ c1g(n) ≤ f(n) ≤ c2g(n) }
根据概念,可以知道
多项式的渐近紧确界
直觉上,一个渐进整函数的低阶项在确定渐近确界的时候可以被忽略,因为对大的n,它们是无足轻重的。当n比较大的时候,即使是高阶项的一个很小的部分都足以支配所有的低阶项。
一般来说,对于任意多项式
O :描述渐近上界的渐近记号
对于给定的函数
g(n) ,用O(g(n)) 来表示一下函数的集合:
O(g(n)) {f(n) : 存在正常量c和n0 ,使得对所有的n≥ n0 , 都有0≤f(n)≤cg(n) }
Ω :描述渐近下界的渐近记号
对于给定的函数
g(n) ,用Ω(g(n)) 来表示一下函数的集合:
Ω(g(n)) {f(n) : 存在正常量c和n0 ,使得对所有的n≥ n0 , 都有0≤cg(n)≤f(n) }
ο :描述非渐近紧确的上界的渐近记号
定义一
对于给定的函数g(n),用
ο(g(n)) 来表示一下函数的集合:
ο(g(n)) = {f(n) : 对于任意正常量c > 0, 存在常量n0≥0 ,使得对所有n≥n0 ,都有0≤f(n)<cg(n) }
定义二
根据定义一,容易想到,当n趋向于无穷时,函数f(n)相对于g(n)来说变得微不足道了,即
limn→+∞f(n)g(n)=0
这就是
ω :描述非渐近紧确的下界的渐近记号
定义一
对于给定的函数g(n),用
ω(g(n)) 来表示一下函数的集合:
ω(g(n)) = {f(n) : 对于任意正常量c > 0, 存在常量n0≥0 ,使得对所有n≥n0 ,都有0≤cg(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)) 。
我们来试着证明一下,根据这个定理的描述,我们要分别证明充分性和必要性。
充分性:
即证明当
由
同理,由
由(1)、(2)可知,存在正常量
使得当
也即
必要性:
即证明当
根据充分性的证明过程,可以很显然的得出这种情况必然成立。
四个性质
传递性
f(n)=Θ(g(n))且g(n)=Θ(h(n)) ,蕴含着f(n)=Θ(h(n))
来证明一下这条性质:
由
同理,由
将(2)乘以
将(2)乘以
由(1)(3)可知,存在正常量
由(1)(4)可知,存在正常量
由(5)(6)可知,存在正常量
即
下面这几条性质的证明方法也类似:
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))
下面来证明一下这个性质,也是分别证明充分性和必要性:
必要性:
由
将(1)除以以正常量
即存在正常量
将(1)除以正常量
即存在正常量
由(2)(3)得:
存在正常量
即
充分性:
同证明必要性得步骤,可以证得,充分性也成立。
转置对称性
f(n)=O(g(n))当且仅当g(n)=Ω(f(n))
f(n)=ο(g(n))当且仅当g(n)=ω(f(n))
按照之前得证明方式,根据渐近记号得概念,这两个性质容易证明。
等式和不等式中的渐近记号
我们知道,当渐近记号独立于等式(或不等式)得右边时,比如
当渐近记号位于公式中时,我们将其解释为代表某个我们不关注名称得匿名函数。例如:
公式: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) 。换句话说,也就是右边比左边提供得细节更为粗糙。
未完待续
下一篇将详细的讨论分治策略,另外,将会学习一些使用分治策略的新的算法
- 【耀阳的读书笔记】算法导论(2)_Θ、O、Ω傻傻分不清楚
- 傻傻分不清楚---运筹学
- 《八位,十六位,傻傻分不清楚》
- session?用户?傻傻分不清楚
- Cookie、Session傻傻分不清楚
- ""和null,傻傻分不清楚
- 金属,塑料,傻傻分不清楚
- 对象,数组,傻傻分不清楚
- [.NET] MailMessage 的 Sender 和 From? 傻傻分不清楚~
- iOS中傻傻分不清楚的一些定义
- 指向常量的指针、常量指针傻傻分不清楚
- 文科,理科,傻傻分不清楚……
- MVP, MVC, MVVM, 傻傻分不清楚~
- 排序?重叠数?傻傻分不清楚
- jQuery、DOM对象傻傻分不清楚
- jQuery、DOM对象傻傻分不清楚
- dp、sp、px傻傻分不清楚[完整]
- UML关联组合聚合傻傻分不清楚
- Git_解决库早已经存在问题
- pygame库写游戏——入门<6>——存储图像
- leetCode-Spiral Matrix II
- 关于IP协议首部长度的计算
- 【Scikit-Learn 中文文档】模型选择:选择估计量及其参数
- 【耀阳的读书笔记】算法导论(2)_Θ、O、Ω傻傻分不清楚
- 云南之旅:随想+攻略
- 快速搭建搜索引擎。haystack + whoosh(Django)
- Python学习系列(一)配置环境
- 最小生成树--Prim算法
- 图形用户界面--窗口菜单
- 三个例子,让你看懂数据仓库多维数据模型的设计
- 【Scikit-Learn 中文文档】无监督学习: 寻求数据表示
- F-score is ill-defined and being set to 0.0 due to no predicted samples.