本文摘自下面链接文章的一部分:http://blog.csdn.net/xiazdong/article/details/8491622
对于某个比较简单的算法,我们有时候确实能够精确地分析出算法的复杂度,比如算法复杂度为5n^2+10n+6,但是事实上并不需要这样,因为当n足够大时,可以忽略掉低阶项和最高次项的系数,因此就引出了“渐近复杂度”,并且用“渐近记号”来表示“渐近复杂度”。
渐近记号包括:
(1)Θ(theta):紧确界。 相当于"="
(2)O (大欧):上界。 相当于"<="
(3)o(小欧):非紧的上界。 相当于"<"
(4)Ω(大omega):下界。 相当于">="
(5)ω(小omega):非紧的下界。 相当于">"
给出这些记号的定义:
对于定义的注意点:
(1)这些定义的前提是f(n)和g(n)是渐近非负的,渐近非负的意思是“当n趋于无穷大时,f(n)和g(n)都非负”。
(2)对于第4和第5条定义,需要注意是对于任意的c。
用集合论来表示这5个符号的关系:
从上面的图可以看出:
(1)如果f(n)=Θ(g(n)),则f(n)=
O
(g(n))且f(n)=
Ω(g(n))。
(2)如果f(n)=
o
(g(n)),则f(n)=
O
(g(n))
。
(3)如果f(n)=
ω(g(n)),则f(n)=
Ω(g(n))。
(4)如果
f(n)=
O
(g(n)),则要么是
f(n)=
o
(g(n)),要么是
f(n)=
Θ(g(n))。
(5)
如果
f(n)=
Ω(g(n))
,则要么是
f(n)=
ω
(g(n)),要么是
f(n)=
Θ(g(n))。