各種語句和模組分析應遵循的規則:
(1)賦值語句和讀寫語句:執行時間取 o(1)。有函式呼叫的除外,此時要考慮函式的執行時間。
(2)順序執行語句:執行時間有加法規則確定,即該序列中耗時最多的語句的執行時間。
(3)條件分支語句:執行時間有條件測試(通常為 o(1))加上分支中執行時間最長的語句的執行時間。
(4)迴圈語句:
執行時間是對輸入資料重複執行n次迴圈體所耗時間的總和。
時間複雜度的運算法則:
設t1(n) = o(ƒ(n)),t2() = o(g(n)),則
①加法規則:t1(n) + t2(n) = o( max );
②乘法規則:t1(n) + t2(n) = o( ƒ(n)xg(n) );
接下來是對《演算法導論》這一章的歸納:
首先是關於漸近記號。
有三種漸近記號:θ記號、o記號、ω記號。(這些描述記號都確定一類函式的集合,是集合!!!!)
(1)θ記號:(演算法在某種情況下的執行時間)
θ記號的定義:θ(g(n))表示下類所描述函式的集合。
θ(g(n)) =理解:若存在正常量c1和c2,使得對於足夠大的n,函式 f(n) 能「夾入」c1g(n)與c2g(n)之間,則 f(n)屬於集合θ(g(n))。(非常類似數學中的極限的定義)
換句話說,對所有 n≥n0,函式 f(n)在乙個常量因子內等於 g(n)。我們稱g(n) 是 f(n) 的乙個漸近緊確界。
(2)o記號:(限制演算法的最壞情況執行時間)
o記號的定義:o(g(n))表示下類所描述函式的集合。
o(g(n)) =我們使用o記號來給出函式的乙個在常量因子內的上界,並稱g(n)是f(n)的乙個漸近上界。
此處請注意,o記號描述演算法的漸近上界,但不要求是漸近緊上界。(要注意區分漸近上界和漸近確界)
(3)ω記號:(限制演算法的最佳情況執行時間)
ω記號的定義:ω(g(n))表示下類所描述函式的集合。
ω(g(n)) =我們用ω記號提供乙個演算法的漸近下界,稱g(n)是f(n)的乙個漸近下界。(此處同樣不要求是漸近緊下界)
定理:對任意兩個函式 f(n) 和 g(n),我們有 f(n) =θ(g(n)),當且僅當 f(n) = o(g(n)) 且 f(n) =ω(g(n))。
注:通常情況下使用該定理,我們可以通過演算法的漸近上界和漸近下界相等來證明演算法的漸近確界存在並給出該確界。
但多數情況下,演算法的最壞情況執行時間和最佳情況執行時間的確界不相等。例如插入排序,插入排序的最壞運**況時間為 o(n^2),最佳情況執行時間為 ω(n),此時無法用 θ 記號描述該演算法,但我們可以說在最壞運**況下演算法時間為θ(n^2)(即補加乙個演算法條件來說明)。
還有兩種描述演算法不常用的記號:o記號、ω記號
o記號:
o記號描述的漸近上界可能是也可能不是漸近緊確的。我們使用 o 記號來表示乙個非漸近緊確的上界,數學上常用該記號表示更高階的無窮小量。
ω記號:
我們使用 ω 記號來表示乙個非漸近緊確的上界,數學上使用該記號表示更低價的無窮小量。
演算法導論 函式的增長。
因為在計算機程式設計的學習中,我們需要掌握乙個類似於 需求量 的東西,怎麼去理解需求量呢,舉個最簡單的例子,你有乙個雙層迴圈,這個雙層迴圈所需要的時間,就是乙個增長量。具體一點可以這麼去解釋這個問題,如果你在乙個迴圈裡面的每乙個步驟所需要的時間都不同的話,那麼 你的需求量就是乙個分布式的增長。我們需...
函式的增長 演算法導論 2
1.引言 這一章主要是介紹一些概念,雖然很乏味,但是它確實能夠幫助我們去更好的分析 處理問題。2.漸進記號 1 記號 g n 通俗地講,若存在正常數才c1,c2,使得對於足夠大的n,函式f n 能 夾入 c1 g n 與c2 g n 之間,則f n 屬於集合 g n 通常把f n g n 記為f n...
MIT演算法導論 演算法分析與基礎知識
演算法分析 是對計算機效能以及計算機資源的研究 除去 效能 程式還有哪些重要的性質 即使存在著以上這些比效能更加重要的特質,那麼為什麼還要研究演算法與效能?問題描述 將一系列元素 a1,a2,an 進行排序後重新輸出,要求排序後的元素是非遞減的。問題解決 插入排序等多種經典排序方案 概念 過程與思想...