渐进符号

渐进符号

渐进记号是根据定义域为自然数集N={0,1, 2 , …}的函数来定义的,所以用渐进记号描述最坏情况运行时间的T(n)是方便的。然而,因为活用渐进记号会更方便处理问题,我们可以扩展该记号到实数域或者选择性地限制其到自然数的一个子集。但在活用时我们要理解该符号的精确含义,以便在活用时不会误用它。

渐进记号、函数和运行时间

插入排序的最坏情况运行时间为an2+bn+c,将这个函数通过渐进记号可以简写为θ(n2),θ除去了函数的某些细节。我们要知道θ(n2)就是函数an2+bn+c。

θ记号

插入排序的最坏情况运行时间为T(n)=θ(n2)。这个记号的意义是,对于一个给定的函数g(n),用θ(g(n))来表示以下函数的集合:

θ(g(n)) = { f(n):存在正常量c1、c2和n0,使得对所有n>=n0,有0<=c1g(n)<=f(n)<=c2g(n) }

若存在正常量c1、c2,使得当n>=n0时,函数f(n)能“夹入”c1g(n)和c2g(n)之间,则f(n)输入集合θ(g(n)) 。因为θ(g(n)) 是一个集合,所以可以记为“f(n)∈θ(g(n))”,以指出f(n)是θ(g(n))的成员。我们可以使用“f(n)=θ(g(n))””来表示相同的概念。这种表示方式活用了等式,有好处。

对于第一幅图,是对f(n)=θ(g(n))的直观描述,主要理解为,对于所有的n>=n0,函数f(n)在一个常量因子内等于g(n),我们称g(n)是f(n)的一个渐进紧确界。
θ、O和Ω记号的图例

O记号

θ记号给出一个渐进的函数的上界和下界,当只有一个渐进上界时,使用O记号。对于给定的函数g(n),用O(g(n))来表示以下函数的集合:

θ(g(n)) = { f(n):存在正常量c和n0,使得对所有n>=n0,有0<=f(n)<=cg(n) }

我们使用O记号给出函数在一个常量因子内的上界(这里应该是c除到左边作为f(n)的系数,此时g(n)固定,f(n)函数集合在某个常量因子内有一个固定的上界)。图片中的b图像展示了O记号后的直觉知识。对于n0及其右边的所有值n,函数f(n)的值总小于或等于cg(n)。

我们记f(n)=O(g(n))表示f(n)是集合O(g(n))的成员。注意,如果f(n)=θ(g(n))则表示同样f(n)=O(g(n)),按照集合论中的写法,我们有θ(g(n))∈O(g(n)),θ是比O更强的概念。θ(n2)中的证明也证明了任意的二次函数当a>0时,在O(n2)中,不仅如此,线性函数an+b也在O(n2)中。

当f(n)=O(g(n))时,我们仅仅要求g(n)的某个常量倍数是f(n)的渐进上界,而不要求它是一个多么紧确的上界。在算法文献中,标准的做法是区分渐进上界和渐进确界。

使用O记号,常常可以仅通过检查算法的总体结构来描述算法的运行时间。例如,观察插入排序总共有两层循环,每层循环最多运行n次,可以很容易得出最坏情况运行时间为O(n2)。

O记号描述上界,用它来限制算法的最坏情况运行时间,同时,关于算法在每个输入上的运行时间,我们也有一个界,这叫做综合性陈述。对插入排序的最坏情况运行时间的界O(n2)适用于该算法对每个输入运行时间。然而,对插入排序的最坏情况运行时间的界θ(n2)并不表示插入排序对每个输入的界也是θ(n2)。例如,输入已经排好序时,插入排序的运行时间是θ(n)。

当我们说运行时间为O(n2)时,意指存在一个O(n2)的函数f(n),使得对n的任意值,不管选择什么特定规模的输入,其运行时间的上界都是f(n)。也就是说最坏运行时间为O(n2)。

Ω记号

正如O记号提供了一个函数的渐进上界,Ω记号提供了一个函数的渐进下界。对于给定的函数g(n),用Ω(g(n))来表示一下函数的集合:

Ω(g(n)) = { f(n): 存在正常量c和n0,使得对于任意的n>n0,有0<=cg(n)<=f(n) }

插图中的c图像给出了Ω记号的直观解释。对在n0及其右边的所有值n,f(n)的值总大于或等于cg(n)。

根据目前看到这些渐进记号的定义,容易证明以下重要定理。
定理1:对于任意的函数f(n)和g(n),我们有f(n)=θ(g(n)),当且仅当f(n)=O(g(n))且f(n)=Ω(g(n)) 。
通常是从渐进上界和渐进下界退出渐进确界。

插入排序的最好情况运行时间为Ω(n) ,是插入排序的运行时间为Ω(n)的一种情况,一种最好的情况,一种最好输入的情况,插入排序的运行时间在其他的输入顺序情况下,可能出现运行时间为Ω(n2)的情况。插入排序的运行时间介于Ω(n) 和O(n2)之间,并且这两个界是渐进紧确的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值