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.1 事前分析估算方法
在計算機程序編制前,依據統計方法對算法進行估算。
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(1) < O(log n) < O(n) < O(nlog n) < O(
2.11 最壞情況與平均情況
最壞情況運行時間是一種保證。在應用中,這是一個最重要的需求,通常,除非特殊指定,提到的運行時間都是最壞情況的運行時間。
平均運行時間是所有情況中最有意義的,因爲它是期望的運行時間。