算法(一):算法概述


1.算法的概念

1.1.算法的定義

算法是解決問題的一系列操作步驟,而計算機算法要具有一般性,而非只適用於一些特殊實例。

1.2.算法的求解

從實例開始,一步一步解決問題,最終得到算法。
image

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表示。
  • hbAk7j.jpg
  • hbAhDg.jpg

由於算法的執行次數還和數據集有關,因此存在着算法時間復雜度的最好、平均、最壞三種情況,一般來說我們只考慮最壞情況下的時間復雜度。

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.按數據存在的介質分

  • 內存算法
  • 外存算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM