1. 程式人生 > >演算法導論 第三章:函式的增長 筆記(Θ記號、O記號、Ω記號、o記號、ω記號、漸近記號的性質、標準記號與常用函式)

演算法導論 第三章:函式的增長 筆記(Θ記號、O記號、Ω記號、o記號、ω記號、漸近記號的性質、標準記號與常用函式)

Θ記號

該記號圓圈中是個M。Θ記號漸近地給出一個函式的上界和下界。

對於一個給定的函式g(n),我們用Θ(g(n))來表示以下函式的集合

Θ(g(n))={f(n):存在正常量c1、c2和n0,使得對於所有n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n)}。

即若存在正常量c1和c2,使得對於足夠大的n,f(n)能夠夾入c1g(n)和c2g(n)之間,則f(n)屬於集合Θ(g(n))。對在n0及其右邊的所有值,函式f(n)在一個常量因子內等於g(n),我們稱g(n)是f(n)的一個漸近緊確界(asymptotically tight bound)

Θ(g(n))的定義要求每個成員f(n)屬於Θ(g(n))集合均漸近非負

,即當n足夠大時,f(n)非負,即要求f(n)為漸近正函式

引進非正式的Θ記號,其效果相當於捨棄了低階項和忽略了最高階項的係數。

如:

使用定義證明:

首先要確定正常量c1、c2和n0,使得對於所有n⩾n0,有下式成立:

用n2除上式得:

選擇任何常量c1⩽1/14,可以使左邊的不等式對任何的n⩾7的值成立。同樣的,通過選擇任何常量c2⩾1/2,可以使右邊的不等式對任何n⩾1都成立。

這樣,通過選擇c1=1/14,c2=1/2,n0=7,可以證明12n2−3n=Θ(n2)。

O記號:

O記號給出一個函式的漸近上界。

對於給定的函式g(n),用O(g(n))來表示以下函式的集合:

O(g(n))={f(n):存在正常量c和n0,使得對所有n⩾n0,有0⩽f(n)⩽cg(n)}。

O記號為函式給出一個在常量因子內的上界,如果存在正常量c和n0,使得在n0及其右邊,f(n)的值總小於或等於cg(n),那麼記f(n)=O(g(n))。

Ω記號:

Ω記號給出一個函式的漸近下界。

對於給定的函式g(n),用Ω(g(n))來表示以下函式的集合:

Ω(g(n))={f(n):存在正常量c和n0,使得對所有n⩾n0,有0⩽cg(n)⩽f(n)}。

Ω記號為函式給出一個在常量因子內的下界,如果存在正常量c和n0,使得在n0及其右邊,f(n)的值總大於或等於cg(n),那麼記f(n)=Ω(g(n))。

定理3.1:

對於任意的兩個函式f(n)和g(n),我們有f(n)=Θ(g(n)),當且僅當f(n)=O(g(n))且f(n)=Ω(g(n))。

等式和不等式中的漸近記號:

一般來說,當漸近記號出現在某個公式中,我們將其解釋為代表某個我們不關注名稱的匿名函式。

如:

公式2n2+3n+1=2n2+Θ(n)指2n2+3n+1=2n2+f(n),其中f(n)是集合Θ(n)中的某個函式。一個表示式中匿名函式的數目可以理解為等於漸近記號出現的次數。

漸近記號的這種用法有助於略去一個等式中無關緊要的細節

如:

合併排序的最壞情況執行時間遞迴式為:

如果僅對T(n) 的漸近行為感興趣,則沒有必要寫出所有低階項,它們都被包含在由Θ(n) 表示的匿名函式中了。

o記號:

我們使用o記號來表示一個非漸近緊確的上界。

形式化地定義o(g(n))為以下集合:o(g(n))={f(n):對任意正常量c>0,存在常量n0>0,使得對所有n⩾n0,有0⩽f(n)<cg(n)}。

O記號與o記號主要的區別是在f(n)=O(g(n))中,界0⩽f(n)⩽cg(n)對某個常量c>0成立,但在f(n)=o(g(n))中,界0⩽f(n)<cg(n)對所有常量c>0成立。直觀上,在o記號中,當n趨於無窮時,函式f(n)相對於g(n)來說變得微不足道了。

ω記號:

我們使用ω記號來表示一個非漸近緊確的下界。

ω記號的定義為:f(n)∈ω(g(n))當且僅當g(n)∈o(f(n))

形式化定義ω(g(n))為以下集合:ω(g(n))={f(n):對任意正常量c>0,存在常量n0>0,使得對所有n⩾n0,有0⩽cg(n)<f(n)}。

直觀上,當n趨於無窮時,f(n)相對於g(n)來說變得任意大了。

漸近記號的性質:

傳遞性: 

f(n)=Θ(g(n))且g(n)=Θ(h(n)) 蘊涵f(n)=Θ(h(n))
f(n)=O(g(n))且g(n)=O(h(n)) 蘊涵f(n)=O(h(n))
f(n)=Ω(g(n))且g(n)=Ω(h(n)) 蘊涵f(n)=Ω(h(n))
f(n)=o(g(n))且g(n)=o(h(n)) 蘊涵f(n)=o(h(n))
f(n)=ω(g(n))且g(n)=ω(h(n)) 蘊涵f(n)=ω(h(n))

自反性 :

f(n)=Θ(f(n))
f(n)=O(f(n))
f(n)=Ω(f(n))

對稱性: 

f(n)=Θ(g(n))當且僅當g(n)=Θ(f(n))

轉置對稱性:

f(n)=O(g(n))當且僅當g(n)=Ω(f(n))
f(n)=o(g(n))當且僅當g(n)=ω(f(n))

f(n)=O(g(n)類似於a⩽b
f(n)=Ω(g(n)類似於a⩾b
f(n)=Θ(g(n)類似於a=b
f(n)=o(g(n))類似於a<b
f(n)=ω(g(n))類似於a>b

若f(n)=o(g(n)),則稱f(n)漸近小於g(n);若f(n)=ω(g(n)),則稱f(n)漸近大於g(n)。

對於任意兩個實數a和b,必然存在a<b、a>b、a=ba<b、a>b、a=b三者之一成立,稱為實數的三分性;而對於漸近符號,則不存在三分性。

習題:

3.1-1:

設f(n)與g(n)都是漸近非負函式。利用記號的基本定義來證明

題目即要證明存在正常數c1,c2,n0;使對於所有n>=n0,有0 <= c1(f(n)+g(n)) <= max(f(n),g(n))<=c2(f(n)+g(n))
因為f(n)+g(n) <= 2max(f(n),g(n))
所以1/2(f(n)+g(n)) <= max(f(n),g(n))

又因為f(n)和g(n)都均非負,
所以max(f(n),g(n)) <= (f(n)+g(n))
所以1/2(f(n)+g(n)) <= max() <= f(n)+g(n)

所以存在正常數c1=1/2,c2=1, n0=0對所有n>0都有有c1(f(n)+g(n)) <= max(f(n),g(n))<=c2(f(n)+g(n)),得證。

3.1-2:

證明對任意實常數a和b,其中b>0,有

因為n+a <= n+|a|
所以當|a| <= n時,n+a <= 2n
因為n+a >= n-|a|
所以當|a| <= n/2時, n-|a| >= n/2
所以n+a >= n/2
綜上可得當n >= 2|a|時,0 < n/2 <= n+a <= 2n

又因為b>0,所以當底數x為正實數時,為單調增函式。故得證。

標準記號與常用函式: