第二章演算法
2.1 開場白
2.2 資料結構與演算法關係---梁山伯與祝英台
2.3兩種演算法的比較
2.4 演算法定義
演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
2.5演算法的特性
2.5.1輸入輸出:演算法具有零個或多個輸入,至少有乙個或多個輸出
2.5.2有窮性:執行完有限步驟後,自動結束不會出現無限迴圈,並且每個步驟在可接 受的時間裡完成
2.5.3確定性:不出現二義性
2.5.4可行性:每一步都能夠通過有限次數完成
2.6 演算法設計的要求
2.6.1 正確性
2.6.2 可讀性
2.6.3 健壯性
2.6.4 時間效率高和儲存量低
2.7 演算法效率的度量方法
2.7.1事後統計方法(不予採納)
2.7.2事前分析估算方法:在計算機程式編制前,依據統計方法對演算法進行估算。
乙個用高階程式語言編寫的程式在計算機上執行時所消耗的時間取決於下列因素:
l演算法採用的策略、方法
l編譯產生的**質量
l問題的輸入規模
l機器執行指令的速度
2.8 函式的漸近增長
函式的漸近增長:給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有n>n,f(n)總是比g(n)大,那麼,我們說f(n)的增長漸近快於g(n)。
2.9 演算法時間複雜度
2.9.1 演算法時間複雜度定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)= o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
2.9.2推導大o介方法
推導大o階:
① 用常數1取代執行時間中的所有加法常數。
② 在修改後的執行次數函式中,只保留最高端項。
③ 如果最高端項存在且不是1,則去除與這個項相乘的常數。得到的結果就是最大o 階。
2.9.3常數階
2.9.4線性階
2.9.5對數階
2.9.6平方階
2.10 常見的時間複雜度
o(n) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)
2.11最壞情況與平均情況
最壞情況執行時間是一種保證,那就是執行時間將不會再壞了。在應用中,這是一種最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間。
平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。
對演算法的分析,一種方法是計算所有情況的平均值,這種時間複雜度的計算方法稱為平均時間複雜度。另一種方法是計算最壞情況下的時間複雜度,這種方法稱為最壞時間複雜度。一般在沒有特殊說明的情況下,都是指最壞時間複雜度。
2.12演算法空間複雜度
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n)= o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
2.13 總結回顧
讀書筆記 《大話資料結構》第二章演算法
2.3兩種演算法的比較 include if 0 需要執行 100次 int main std cout sum return 0 endif if 1 int main endif 顯然 第二個演算法更優秀 演算法 解決特定問題求解的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個...
《大話資料結構》筆記 第二章 演算法(下)
給定兩個函式 f n 和 g n 如果存在乙個整數 n,使得對於所有的 n n,f n 總大於 g n 那麼我們說 f n 的增長漸近快於 g n 例如,演算法 a 要 2n 3 次操作,而演算法 b 要 3n 1 次。隨著 n 的增大,比較執行次數時,我們可以忽略加法常數。再例如,演算法 c 是 ...
老楊《大話資料結構》第二章 演算法
演算法是解決特定問題求解步驟的描述,計算機中表現為指令的有限序列,每條指令表示乙個或者多個操作。輸入輸出 有窮性確定性 可行性正確性 可讀性健壯性 時間效率高和儲存量低 事後統計方法 事前分析估計方法 通過書中所給1 2 99 100的例子,可以明顯對比出幾種不同演算法具有不同的空間和時間開銷。某個...