老楊《大話資料結構》第二章 演算法

2021-10-09 19:12:20 字數 904 閱讀 6174

演算法是解決特定問題求解步驟的描述,計算機中表現為指令的有限序列,每條指令表示乙個或者多個操作。

輸入輸出

有窮性確定性

可行性正確性

可讀性健壯性

時間效率高和儲存量低

事後統計方法

事前分析估計方法

通過書中所給1+2+...+99+100的例子,可以明顯對比出幾種不同演算法具有不同的空間和時間開銷。某個演算法隨著n增大,會越來越優於另一演算法,或者越來越差於另一演算法。這裡就可以體現出,演算法本身的複雜度是時刻變化的,那麼如何量化衡量這種複雜度呢?演算法時間複雜度的定義是,語句總的執行次數t(n)是關於問題規模n的函式,而分析t(n)的變化情況並確定t(n)的數量級。演算法時間複雜度,也就是演算法的時間量度,記作:t(n) = o(f(n)) 它表示隨著問題規模的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,稱為時間複雜度。一般都用大寫的o來表示。推導大o階的基本流程:

推導大o階:

1. 用常數1取代執行時間中的所有加法常數

2. 在修改後的執行次數函式中,只保留最高端項

3. 如果最高端項存在且不是1,則去除與這個項相乘的常數,得到的結果就是大o階

複雜度名稱

大o記號

常數階o (1)

線性階o (n)

對數階o (logn)

平方階o (

nlogn

o (nlogn)

立方階o (

指數階o (

常用演算法複雜度順序從小到大:

o(1) < o(logn) < o(n) < o(nlogn) < o(n^2) < o(n^3) < o(2^n) < o(2^n) < o(n!) < o(n^n)

《大話資料結構》筆記 第二章 演算法(下)

給定兩個函式 f n 和 g n 如果存在乙個整數 n,使得對於所有的 n n,f n 總大於 g n 那麼我們說 f n 的增長漸近快於 g n 例如,演算法 a 要 2n 3 次操作,而演算法 b 要 3n 1 次。隨著 n 的增大,比較執行次數時,我們可以忽略加法常數。再例如,演算法 c 是 ...

大話資料結構第二章學習筆記

演算法 資料結構與演算法的關係 演算法是什麼?指令的有限序列,每條指令表示乙個或多個操作。演算法能輸入輸出,能自動結束不會無限迴圈,而且每乙個步驟在可接受的時間內完成。好的演算法什麼正確可讀健壯都不算什麼,最重要的是時間效率高和儲存量低。怎麼衡量演算法的效率啊?事前分析估算的方法 時間取決於演算法採...

讀書筆記 《大話資料結構》第二章演算法

2.3兩種演算法的比較 include if 0 需要執行 100次 int main std cout sum return 0 endif if 1 int main endif 顯然 第二個演算法更優秀 演算法 解決特定問題求解的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個...