算法分析常用记号

下面四种记号是为了建立函数间的相对级别。
CLRS上的一张图很直观:
这里写图片描述

大O记号

定义:如果存在正常数ccn0n0,使得当NnoN≥noT(N)cf(N)T(N)≤cf(N),记T(N)=O(f(N))T(N)=O(f(N))

举个栗子:
N<1000N<1000时,1000N>N21000N>N2,但N2N2增长率更大,所以最终N2N2会更大,即O(N2)=1000NO(N2)=1000N

也就是说,总会存在某个点n0n0,从这个点以后cf(N)cf(N)至少和T(N)T(N)一样大,忽略常数因子,即T(N)T(N)增长率小于等于f(N)f(N)的增长率。

那么为什么这个常数因子cc可以忽略呢?
NnoN≥no时,T(N)cf(N)T(N)≤cf(N),也就是T(N)f(N)cT(N)f(N)≤c。此时如果T(N)T(N)增长率大于f(N)f(N)的增长率,那么T(N)f(N)T(N)f(N)不可能小于某个常数,也就是cc不存在,与我们的前提条件矛盾,所以说忽略掉常数因子后,T(N)T(N)增长率仍然小于等于f(N)f(N)的增长率。

那么既然T(N)T(N)是以不快于f(N)f(N)的速度增长,也就可以说f(N)f(N)T(N)T(N)的一个上界(upper bound)。

ΩΩ记号

定义:如果存在正常数ccn0n0,使得当NnoN≥noT(N)cg(n)T(N)≥cg(n),记T(N)=Ω(g(n))T(N)=Ω(g(n))

与上述大O的分析类似,可知:
T(N)T(N)增长率大于等于g(N)g(N)的增长率,g(N)g(N)T(N)T(N)的一个下界(lower bound)。

ΘΘ记号

定义:当且仅当T(N)=Ω(h(n))T(N)=Ω(h(n))T(N)=O(h(n))T(N)=O(h(n))时,
T(N)=Θ(f(n))T(N)=Θ(f(n))

那么这个就是说T(N)T(N)增长率等于h(N)h(N)的增长率。

小o记号

定义:若T(N)=O(p(n))T(N)=O(p(n))T(N)Θ(p(n))T(N)≠Θ(p(n))时,
T(N)=o(f(n))T(N)=o(f(n))

与大O不同,小o表示T(N)T(N)增长率小于p(N)p(N)的增长率,不包括等于。

转载于:https://www.cnblogs.com/EIMadrigal/p/9248206.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值