1.算法的概念
1.1.算法的定義
算法是解決問題的一系列操作步驟,而計算機算法要具有一般性,而非只適用於一些特殊實例。
1.2.算法的求解
從實例開始,一步一步解決問題,最終得到算法。
2.算法的描述
算法的描述就是用自然語言、流程圖、偽代碼這幾種方式,以及順序結構、 分支結構、 循環結構這三種控制結構來將問題求解的操作步驟描述出來。
算法描述有以下優點:
- 讓目標讀者看得懂;
- 便於分析算法的性質;
- 有助於程序的實現。
3.算法的分析
3.1.正確性
是否能得到預期輸出。
3.2.健壯性
當輸入非法數據時,算法恰當地做出反應或者進行相應的處理,而不是給出一個莫名奇妙的結果。
處理數據的方法錯誤時,不應是中斷程序的執行,而應是返回一個表示錯誤的值,以便在更高的抽象層次上進行處理。
3.3.高效性
a.時間效率
事后分析法就是讓算法運行起來,然后看運行的時間。
事前分析法就是算法的運行時間=所有語句的執行次數*一條語句的執行時間
。由於一條語句的執行時間隨着硬件的不同而不同,因此我們假設一條語句的執行時間均為單位時間,從而讓算法的運行時間只和語句的執行次數有關。
為了便於比較不同算法之間的差異,我們取一個輔助函數f(n),使得當n無窮大時,T(n) / f(n)的極限值為不等於零的常數,此時記T(n) = O(f(n)),稱 O(f(n))為算法的漸近時間復雜度。簡而言之,時間復雜度就是執行次數T(n)關於數據規模n的函數,記T(n) = O(f(n))。
- 時間復雜度的計算方法為:先找出語句頻度最大的作為基本語句;再計算基本語句的執行次數和問題規模n之間的關系f(n)(在計算f(n)時,如果不好計算可以使用級數來計算,也可以使用加法法則和乘法法則);最后取其數量級用符號O表示。
-
-
由於算法的執行次數還和數據集有關,因此存在着算法時間復雜度的最好、平均、最壞三種情況,一般來說我們只考慮最壞情況下的時間復雜度。
b.空間效率
算法的空間效率就是算法要占據的內存空間。我們也有事前分析法和事后分析法。
事后分析法就是空間效率就是算法使用的輔助空間。
類似的,使用S(n) = O(f(n)),將O(f(n))稱為算法的空間復雜度。
3.4.可讀性
a.代碼規范
命名:大駝峰命名法、小駝峰命名法、下划線法、匈牙利命名法。
b.設計模式
4.算法的分類
4.1.按設計思想分
- 窮舉算法
- 動態規划算法
- 分治算法
- 貪心算法
- 啟發算法
- 回溯算法
4.2.按效率分
- O(1)、O(logn)、O(n)、O(n^2)、O(n!)
4.3.按應用場合分
- 數值算法:主要目的在於模擬與仿真。
- 非數值算法:主要目的在於搜索、推理、決策、規划等。
4.4.按數據存在的介質分
- 內存算法
- 外存算法