對於任何函式f(
n)都可以用o,
ω,φ 來表示當n→
∞ 時的階的情況,可以把o,
ω,φ 分別看成是≥,
≤,= ,分別估計了函式的漸進上界,漸進下屆和準確界。定義表示如下:
設函式f(對於非負函式t(n)代表某一演算法在輸入大小為
n 的情況下的工作量(效率),假設f(
n)、g
(n) 非負單調,且極限
n 趨於無窮的時候,我們將f(
n)與另一行為已知的函式g(
n)進行比較:
1)如果
n)在數量級上嚴格小於g(
n),記為f(
n)=o
(g(n
))。
2)如果
n)在數量級上嚴格大於g(
n),記為f(
n)=ω
(g(n
))。
3)如果
n)在數量級上等於g(
n),記為f(
n)=θ
(g(n
))。
4)如果f(
n)在數量級上小於或等於g(
n),則記為f(
n)=o
(g(n
))。
5)如果f(
n)在數量級上大於或等於g(
n),則記為f(
n)=ω
(g(n))。
n),存在兩個正常數c和
n0,並且對於所有的
n>n0
,有t(
n)≤c
f(n)
,則稱t(
n)在集合o(
f(n)
) 裡(即前乙個集合可以被後乙個集合覆蓋),記為t(
n)=o
(f(n
)),直觀意義是,對於足夠大的資料集合,本演算法執行的步驟數總是少於cf
(n) 。我們在進行演算法分析時希望獲得的是盡可能緊湊的上界。
上述演算法計算時間的漸進表示是由d.knuth提出的,但是在數學家眼中f(
n)=o
(g(n
))這種等於號是不嚴格,但這沒關係,不影響計算機演算法的分析。
利用這些性質可以大大簡化對演算法的分析。
1)性質1 o,ω,θ 是自反的、傳遞的。例如:
· 自反性,f(
n)=o
(f(n
))·傳遞性,若f(
n)=o
(g(n
)),g
(n)=
o(h(
n)) ,則f(
n)=o
(h(n
))。
2)性質2 θ還有對稱性:f(
n)=θ
(g(n
))⟺g
(n)=
θ(f(
n)) 。
3)性質3 對於任意的f(
n),g
(n) ,我們有f(
n)+g
(n)=
θ(ma
x),即對於乙個由若干部分組成的序列程式,其總的漸進複雜度等於其複雜度最高的部分,這是個十分有用的性質。
4)性質4 如果f(
n)=o
(kg(
n)) ,這裡k是乙個常數,則f(
n)=o
(g(n
)),這條規則告訴我們係數是無關緊要的。因為我們關心的是數量級的比較,而不是同一數量級裡面的細小差異。當然當關注點不同時,係數可能會變得重要。
5)性質5 如果f1
(n)=
o(g1
(n) ,並且f2
(n)=
o(g2
(n) ,則(f
1+f2
)(n)
=o(m
ax) .
6)性質6 如果f1
(n) 在o(
g1(n
) 裡,並且f2
(n) 在o(
g2(n
) 裡,則f1
(n)f
2(n)
在o(g1(n
)o(g
2(n)
裡。
大O表示法的理解
一.背景 在現實生活中,解決乙個問題可以有多種方法,其中有好的方法,也有較為一般的方法。評判標準雖有不同,但總體思想是 用最小的代價獲得最多的收益。這裡所說代價並不僅指金錢開銷,有時也包括時間,所耗費資源等。電腦程式也是為了解決問題而編寫的。同理可知,程式有好的,也有一般的,評判標準主要有兩方面 時...
如何表示演算法的效率?初識大O表示
我們在比較演算法的時候經常說 演算法1 比 演算法2 快 2倍 之類的話,但實際上類似這種說法不具有說服力。因為當資料的個數發生變化時,對應的比例可能也會發生改變,有可能 當資料為10個時,演算法1比演算法2快2倍,但是當資料為100時,演算法1有可能比演算法2快3倍。因此需要乙個用來描述演算法的效...
如何表示演算法的效率?初識大O表示
我們在比較演算法的時候經常說 演算法1 比 演算法2 快 2倍 之類的話,但實際上類似這種說法不具有說服力。因為當資料的個數發生變化時,對應的比例可能也會發生改變,有可能 當資料為10個時,演算法1比演算法2快2倍,但是當資料為100時,演算法1有可能比演算法2快3倍。因此需要乙個用來描述演算法的效...