演算法導論讀書筆記(3)

2021-07-28 08:04:06 字數 2592 閱讀 8743

當輸入規模大到使執行時間只和增長的量級有關時,就是在研究演算法的漸近效率。就是說,從極限角度看,我們只關心演算法執行時間如何隨著輸入規模的無限增長而增長。

表示演算法的漸近執行時間的記號是用定義域為自然數集n= 的函式來定義的。這些記號便於用來表示最壞情況執行時間 t ( n )。

對乙個給定的函式 g ( n ),用 θ ( g ( n ))來表示函式集合:

對任何乙個函式 f ( n ),若存在正常數 c1

, c2

,使當 n 充分大時, f ( n )能被夾在 c1 g ( n )和 c2 g ( n )之間,則 f ( n )屬於集合 θ ( g ( n ))。可以寫成「 f( n ) ∈ θ ( g ( n ))」表示 f ( n )是 θ ( g ( n ))的元素。不過,通常寫成「 f ( n ) = θ ( g ( n ))」來表示相同的意思。

上圖給出了函式 f ( n )和 g ( n )的直觀圖示,其中 f ( n ) = θ ( g ( n ))。對所有位於 n0

右邊的 n 值, f ( n )的值落在 c1 g ( n )和 c2 g ( n )之間。換句話說,對所有的 n >= n0

, f ( n )在乙個常數因子範圍內與 g ( n )相等。我們說 g ( n )是 f ( n )的乙個漸近確界

θ ( g ( n ))的定義要求每個成員 f ( n ) ∈ θ ( g ( n ))都是漸近非負,就是說當 n 足夠大時 f ( n )是非負值。這就要求函式 g ( n )本身也是漸近非負的,否則集合 θ ( g ( n ))就是空集。

θ 記號的效果相當於捨棄了低階項和忽略了最高端項的係數。

θ 記號漸近地給出了乙個函式的上界和下界。當只有漸近上界時,使用 o 記號。對乙個函式 g ( n ),用 o ( g ( n ))表示乙個函式集合:

上圖說明了 o 記號的直觀意義。對所有位於 n0

右邊的 n 值,函式 f ( n )的值在 g ( n )下。

ω 記號給出了函式的漸近下界。給定乙個函式 g ( n ),用 ω ( g ( n ))表示乙個函式集合:

上圖說明了 ω 記號的直觀意義。對所有在 n0

右邊的 n 值,函式 f ( n )的數值等於或大於 c g ( n )。

定理

對任意兩個函式 f ( n )和 g ( n ), f ( n ) = θ ( g ( n ))當且僅當 f ( n ) = o ( n )和 f ( n ) = ω ( g ( n ))。

o 記號提供的漸近上界可能是也可能不是漸近緊確的。這裡用 o 記號表示非漸近緊確的上界。 o ( g ( n ))的形式定義為集合:

o 記號與 o 記號的主要區別在於對 f ( n ) = o ( g ( n )),界0 <= f ( n ) <= c g ( n )對某個常數 c > 0成立;但對 f ( n ) = o ( g ( n )),界0 <= f ( n ) <= c g ( n)對所有常數 c > 0都成立。即

我們用 ω 記號來表示非漸近緊確的下界。 ω ( g ( n ))的形式定義為集合:

關係 f ( n ) = ω ( g ( n ))意味著

如果這個極限存在。也就是說當 n 趨於無窮時, f ( n )相對 g ( 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 ))

讀書筆記 演算法導論

第2章演算法入門 浮於表面不如深入其中,送給自己,自己是最大的敵人,那麼就盡最大努力去克服自己,沉思,冷靜,不浮躁!勘誤 在演算法導論第9頁,扼要的扼 內容提要 1 偽 的表示方法 2 插入排序演算法分析 3 迴圈不變式 4 演算法設計之分治法 divide and conquer 5 合併排序演算...

演算法導論 讀書筆記2010 12 6

演算法就是一系列的計算步驟,用來將輸入資料轉換為輸出結果。資料結構師儲存和組織資料的一種方式,以便於對資料進行訪問和修改。插入排序演算法,對n個資料項的時間大約是c1n 2,其中c1是乙個不依賴於n的常量。亦即該演算法所需的時間大致與n 2成正比。合併排序演算法,排序n個資料項的時間大約是c2log...

《演算法導論》讀書筆記(一)

理解 輸入到輸出的計算過程稱為演算法。1.演算法描述 2.證明演算法正確性 3.分析演算法效率 兩個例子 1.插入排序 思想 從未排序的序列中取出乙個元素,將其插入到已排序序列的正確位置。實現 include include using namespace std int main for int ...