算法导论-第3章-描述运行时间

第3章 描述运行时间

本章研究算法的渐近(asymptotic)效率。我们关心的是,当输入规模足够大时,算法运行时间与随着输入规模的增大发生怎样的变化,即研究T(n)随着n的增大发生怎样的变化。

3.1 O符号,Ω符号,Θ符号

O符号

描述函数的渐近上界(upper bound)。换句话说,它表示一个函数的增长速度并不超过一定速率的速度,基于最高阶项。

例如,7n3+100n220n+6。它的最高项是7n3,所以我们说这个函数的增长率是n3。因为这个函数的增长率不大于n3,所以我们表示为O(n3)。你可能会好奇,我们也可以将其表示为O(n4)。为什么?因为其增长率确实比n4慢🤣。确实,我们也可以表示为O(n5)O(n6)

实际上,对于任何常数c3O(nc)都可以表示。

Ω符号

描述函数的渐近下界(lower bound)。也就是说,函数的增长速度至少和某个速率一样快,基于O符号。

例如,7n3+100n220n+6。其中的最高阶项的增长速度至少和n3一样快,所以是Ω(n3)。同样也可以是Ω(n2)Ω(n)

实际上,对于任何常数c3O(nc)都可以表示。

Θ符号

描述函数的渐近紧确界(tight bound)。

例如,7n3+100n220n+6。渐近上界O(n3),渐近下界Ω(n3),夹逼得渐近紧确界为Θ(n3)

3.2 渐近符号:形式化定义

O符号

对于给定的函数g(n)

O(g(n))={f(n): c>0, n0>0, nn0, 0f(n)cg(n)}

f(n)O(g(n)),一般书写为f(n)=O(g(n)),计算可转化为0f(n)cg(n)

Ω符号

对于给定的函数g(n)

Ω(g(n))={f(n): c>0, n0>0, nn0, 0cg(n)f(n)}

f(n)Ω(g(n)),一般书写为f(n)=Ω(g(n)),计算可转化为0cg(n)f(n)

Θ符号

对于给定的函数g(n)

Θ(g(n))={f(n):c1>0, c2>0, n0>0, nn0, 0c1g(n)f(n)c2g(n)}

f(n)Θ(g(n)),一般书写为f(n)=Θ(g(n)),计算可转化为c1g(n)f(n)c2g(n)

Figure 3.2.png

定理:对于任意两个函数f(n)g(n),当且仅当f(n)=O(g(n))f(n)=Ω(g(n))时,有f(n)=Θ(g(n))

ο符号

对于给定的函数g(n)

ο(g(n))={f(n):c>0, n0>0, nn0, 0f(n)<cg(n)}

limxf(n)g(n)=0

ω符号

对于给定的函数g(n)

ω(g(n))={f(n):c>0, n0>0, nn0, 0cg(n)<f(n)}

limxf(n)g(n)=

posted @   gengduc  阅读(96)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示