第 2 章 算法

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取代運行時間中的所有加法常數。
  2. 在修改後的運行次數函數中,只保留最高階項。
  3. 如果最高階項存在切不是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(n2 ) < O(n3 ) < O(2n ) < O(n!) < O(n^n)

2.11 最壞情況與平均情況

最壞情況運行時間是一種保證。在應用中,這是一個最重要的需求,通常,除非特殊指定,提到的運行時間都是最壞情況的運行時間。
平均運行時間是所有情況中最有意義的,因爲它是期望的運行時間。

2.12 算法空間複雜度

2.13 總結回顧

2.14 結尾語

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章