1. 程式人生 > >【大話資料結構】02 演算法 筆記

【大話資料結構】02 演算法 筆記

《大話資料結構》 ——程傑 共463頁 筆記圈點主要內容,也請多多支援大話資料結構該書作者
第 2 章 演算法
42頁_開場白 44頁_演算法定義 演算法的定義 演算法是解決特定問題求解步驟的描述, 在計算中表現為指令的有限序列, 並且每條指令表示一個或多個操作 演算法的特性 輸入輸出:演算法具有零個或多個輸入, 有一個或多個輸出。 有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈, 並且每一個步驟在可接受的時間內完成。 確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。 可行性:演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限的次數完成。
演算法設計的要求
正確性:演算法的正確性是指演算法至少應該具有輸入丶輸出和加工處理無歧義性丶 能正確反映問題的需求丶能夠得到問題的正確答案。 ——正確性的是四層次 @ 演算法程式沒有語法錯誤 @ 演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 @ 演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 @ 演算法程式對於精心選擇的,甚至刁難的測試資料都有滿足要求的結果。
可讀性:演算法設計的另一個目的為了便於閱讀丶理解和交流 健壯性:當輸入資料不合法時,演算法也能做出相關的處理,而不是產生異常或莫名其妙的錯誤 時間效率高和儲存量低:
設計演算法應該儘量滿足時間效率高和儲存量低的要求
演算法效率的度量方法 事後統計方法:運用編輯程式自帶的功能比較演算法的好壞及突出問題 事前分析估算方法:計算執行次數 普通方法為1次,迴圈為n次,迴圈套迴圈為n*n 函式的漸近增長:n^k >kn^2 > kn >n 演算法時間複雜度定義:T(n) = O(f(n)) 一般情況下,隨著n的增大,T(n)增長最慢的演算法為最優演算法 ——常數階:O(1) 例:sum = (1+n)* n/2 ——線性階:O(n) 例:for(i = 0; i < n; i++) ——對數階:
O(logn) 例:while(count < n){ count = count * 2 } ——平方階:O(n^2) 例:迴圈相套


最壞情況與平均情況: 演算法空間複雜度: