博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《算法设计与分析》一一2.2 函数的渐近增长率
阅读量:6635 次
发布时间:2019-06-25

本文共 1760 字,大约阅读时间需要 5 分钟。

2.2 函数的渐近增长率

根据1.3节的定义,算法的最坏情况时间复杂度是规模n的函数。由于n是一个变量,这就给比较算法的优劣带来一个问题:算法1和算法2在规模值n取不同值的时候,它们的优劣可能是不一样的。常见的情况是,有一些复杂的算法在小规模的时候无优势甚至有劣势,但是它们的优势将在问题规模很大的时候显现出来。我们在进行算法分析的时候,更关心问题规模很大时算法的表现。但是何谓规模大,对于不同的算法而言又千差万别。有的算法可能在几千的规模上就比同类算法有优势,而有的算法可能需要到百万级的规模才能显现优势。

正是针对算法分析中的上述困难,我们引入函数的渐近增长率(asymptotic growth rate)概念,其中:
●增长率的概念使得我们集中关注算法在规模较大时候的性能表现,它关注的不是代价函数的具体的值,而是代价函数的值随规模增长的速度。因而不管开始的优劣如何,增长率较快的函数在面对大规模输入的时候值会变得更大。
●渐近的概念帮我们处理了不同算法对于 “大规模”的含义有不同解读的问题,它关注的是问题规模趋于无穷时算法代价的变化情况。
我们引入3组共5个不同的记号来描述函数的渐近增长率之间的关系,它们是O和o 、Ω 和ω 、Θ。我们首先给出使用极限语言的定义,在此基础上给出基于求极限的判别方法。在这3组记号中,O和o的定义是基础,这两个符号之间的差别是理解其定义的重点。首先给出这两个记号的定义。
定义2.2(f(n)=O(g(n)))
●O(g(n)) ={f(n):存在常数c>0和n0>0,满足0≤f(n)≤cg(n)对所有n≥n0均成立}。
●f(n)=O(g(n)) iff limn→∞f(n)g(n)=c<∞。
定义2.3(f(n)=o(g(n)))
●o(g(n)) ={f(n):对任意常数c>0,均存在常数n0>0,满足0≤f(n)●f(n)=o(g(n)) iff limn→∞f(n)g(n)=0。
不严格地说,f(n)=O(g(n))描述的是当问题规模充分大的时候,函数f(n)的增长率不会超过g(n)的增长率。与记号O(g(n))相比,f(n)=o(g(n))虽然同样表示函数f(n)的增长率不会超过g(n)的增长率,但是它的要求更强。f(n)=o(g(n))强调函数f(n)和g(n)在增长率方面有一种“实质性的差距”:总可以通过增加问题规模n,使得函数f(n)和g(n)之间有任意大的差距。
与上述定义对偶,我们有下面两个定义。
定义2.4(f(n)=Ω(g(n)))
●Ω(g(n)) ={f(n):存在常数c>0和n0>0,满足0≤cg(n)≤f(n)对所有n≥n0均成立}。
●f(n)=Ω(g(n)) iff limn→∞f(n)g(n)=c>0(c也可以为∞)。
定义2.5(f(n)=ω(g(n)))
●ω(g(n)) ={f(n):对任意常数c>0,均存在常数n0>0,满足0≤cg(n)●f(n)=ω(g(n)) iff limn→∞f(n)g(n)=∞。
与O和o的定义对偶,f(n)=Ω(g(n))描述的是随着问题规模的增大,函数f(n)的增长率不会低于g(n)的增长率;而f(n)=ω(g(n))同样强调函数f(n)和g(n)在增长率方面有一种“实质性的差距”:总可以通过规模n的增大,使得f(n)和g(n)有任意大的差距。
另外,我们可以定义f(n)=Θ(g(n)),它表示f(n)和g(n)的增长率处于“同一水平”。
定义2.6(f(n)=Θ(g(n)))
●Θ(g(n)) ={f(n):存在常数c1>0,c2>0和n0>0,满足0≤c1g(n)≤f(n)≤c2g(n)对所有n≥n0均成立}。
●f(n)=Θ(g(n)) iff limn→∞f(n)g(n)=c,这里 0根据上述定义,我们很容易验证:
●O、Ω、Θ、o、ω这5种关系均满足传递性。
●O、Ω、Θ这3种关系满足自反性。
●Θ是一个等价关系。
●f(n)=Θ(g(n)) iff f(n)=O(g(n))且f(n)=Ω(g(n))。
●O、 o和Ω、ω之间有一种对偶的关系,即f=O(g) iff g=Ω(f),f=o(g) iff g=ω(f)。
这些性质的证明留作习题。

转载地址:http://whdvo.baihongyu.com/

你可能感兴趣的文章
数据库恢复之丢失联机重做日志文件的恢复
查看>>
手机上的体验
查看>>
[LeetCode] Factorial Trailing Zeroes 求阶乘末尾零的个数
查看>>
【leetcode】Combination Sum (middle)
查看>>
关于aop:pointcut的expression配制说明及JoinPoint
查看>>
UVA10341:Solve It(二分+math.h库)
查看>>
[UI] 精美UI界面欣赏[3]
查看>>
vector的成员函数解析
查看>>
Pyqt QSplashScreen启动画面
查看>>
游戏 TRAP(SNRS)AlphaBeta版本
查看>>
[转]Redis实现分析
查看>>
POJ 3057 Evacuation 二分+最大流
查看>>
openstack 网络
查看>>
CSS定位之position详解
查看>>
Visio插入竖直省略号
查看>>
【翻译自mos文章】改变数据库用户sysman(该用户是DB Control Repository 的schema)password的方法...
查看>>
放弃使用jQuery实现动画
查看>>
第十一章 企业项目开发--消息队列activemq
查看>>
嵌入式 使用udev高效、动态地管理Linux 设备文件
查看>>
spring核心容器
查看>>