函式漸進性的O, , 的表示

2021-07-09 05:42:21 字數 2156 閱讀 8179

對於任何函式f(

n)都可以用o,

ω,φ 來表示當n→

∞ 時的階的情況,可以把o,

ω,φ 分別看成是≥,

≤,= ,分別估計了函式的漸進上界,漸進下屆和準確界。定義表示如下:

設函式f(

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))。

對於非負函式t(

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倍。因此需要乙個用來描述演算法的效...