渐近记号定义
据knuth:
1>*O(g(n)): 定义F(n)集合,存在c>0,n0属于|N|,对于一切n>n0,都有|f(n)|≤cg(n)成立。*
CLRS定义略有区别,将|f(n)|改为它本身,既就是0≤f(n)≤cg(n)
2>*Ω(g(n)):定义F(n)集合,存在c>0,n0属于|N|,对于一切n>n0,都有0≤cg(n)≤f(n)成立。*
3>*Θ(g(n)):定义F(n)集合,存在c>0,n0属于|N|,对于一切n>n0,都有0≤c1g(n)≤f(n)≤c2g(n)成立。*
形象化解释
O是基本形状,Ω和Θ有点像,但意义不同。
O是边界,不可超过的上界,圈住内部的一种体现。
Ω相对于大O记号有变化,支脚Ω,定义了函数的下界。
Θ给出了较为紧致的界限,即为上界又为下界。H撑在边界上。
H与我们的等号有点像,H有左右,横线在中间c1g(n)≤f(n)≤c2g(n)
#符号“∈”用起来不方便。
3n = O(n) = O(n2)更简洁,用起来更方便
实例
例:
f(n) = 32n2- 10n + 5 = O(n2)
f(n) ≤ cn2 ,c取系数绝对值之和。即32+5+10=47。
0 ≤ 32n2- 10n + 5 ≤ 32n2 + 10n2 + 5n2 (1≤n)
取c=47,取n0=1, 对于一切n>n0,都有|f(n)|≤cg(n)成立。
#任何满足O(n),一定满足O(n2)。
例:
f(n) = 32n2- 10n + 5 = Ω(n2)
cn2≤ f(n),c取最高项的系数的一半。即16。
16n2 ≤ 32n2- 10n + 5 and 0 ≤ 16n2 - 10n + 5
取c=16,n0=0,对于一切n>n0,都有0≤cg(n)≤f(n)成立。
推论: 32n2- 10n + 5 = O(n2) = Θ(n2)
不需要精确的证明集合的存在个数,只需要证明它的成立。
考虑ad>0,多项式为f(n) = adnd+ ad-1nd-1+…+a0。
练习 : f(n) = O(nd) , 细节在于f(n)何时大于等于0。
例子 :
f(n) = Ω(nd)
f(n) ≥
a
d
2
\frac{a_d}{2}
2adnd
a
d
2
\frac{a_d}{2}
2adnd ≥ -ad-1nd-1-ad-2nd-2-…-a0
a
d
2
\frac{a_d}{2}
2adnd ≥ (
∑
i
=
0
d
−
1
∣
a
i
∣
\displaystyle\sum_{i=0}^{d-1} |a_i|
i=0∑d−1∣ai∣)nd-1≥-ad-1nd-1-ad-2nd-2-…-a0
n≥
∑
i
=
0
d
−
1
∣
a
i
∣
\displaystyle\sum_{i=0}^{d-1} |a_i|
i=0∑d−1∣ai∣ / ad
n0取max{1,
∑
i
=
0
d
−
1
∣
a
i
∣
\displaystyle\sum_{i=0}^{d-1} |a_i|
i=0∑d−1∣ai∣ / ad}
定理: 如果ad> 0,
∑
i
=
0
d
a
i
n
i
\displaystyle\sum_{i=0}^{d} a_in^i
i=0∑daini = Θ(nd)
极限
设f(n)和g(n)是定义域为自然数集合的函数。lim n趋近于无穷大时, f ( n ) g ( n ) \frac{f(n)}{g(n)} g(n)f(n) = c >0 ,f(n) = Θ(g(n))。
此外,还有o记号等记号,详情可参考博客算法导论------渐近记号Θ、Ο、o、Ω、ω详解
。