算法——概述

今天上完了學生生涯的最後一堂課。幸運的是,這堂課老師講得不錯,也是我喜歡的算法課,算是一個完美的句號。藉此機會將一直以來想寫的算法系列博客開個頭。大抵按照劉老師所述結構,借各家之長加以我的理解來撰寫。

算法概述

定義

算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表着用系統的方法描述解決問題的策略機制。

(百度百科)

算法就是求解某一特定問題的有窮規則集合

特徵

確定性,每一個步驟必須有確切的定義

可行性,算法中執行的任何計算步驟都是可以被分解爲基本的可執行的操作步驟,即每個計算步驟都可以在有限時間內完成

輸入項,一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件

輸出項,一個算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的算法是毫無意義的

有窮性,算法必須在執行有限步驟後終止。

 

質量指標

時間複雜度 算法時間複雜度是問題規模 n 的函數f(n) ,一般記爲,T(n)=Ο(f(n))。 問題的規模n 越大,算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間複雜度 

空間複雜度 算法需要消耗的內存空間

正確性

可讀性

健壯性 一個算法對不合理數據輸入的反應能力和處理能力,也稱爲容錯性

 

算法複雜度

算法所需要的計算機資源 = 時間複雜度 + 空間複雜度

一般考慮三種情況下的時間性:最壞情況(Tmax(n))最好情況(Tmin(n))平均情況(Tavg(n))

漸進複雜性

對於問題規模 n 較大的情況,需要引入漸進符號來描述,

設算法執行時間爲 T(n) ,若存在 T*(n) , 使得

就稱T*(n) 爲算法的漸進時間複雜性。

上界函數

若存在兩個正常數c和n0 ,對於所有的 n >= n0 ,有 |f(n)| <= c|g(n)|,則記爲 f(n) = O(g(n))

說明,

  • 對於規模 n 若算法所用時間總是小於|g(n)|的一個常數倍,則g(n) 就是 f(n)的一個上界函數,f(n) 的數量級就是g(n).
  • f(n) 的增長最多像 g(n) 一樣快
  • 試圖求最小的g(n),使得f(n)=O(g(n)),即 求最小上界函數。

算法分類

多項式時間算法:即 可用多項式對其計算時間界限的算法

O(1)<O(logn)<O(n)<O(nlogn)<O(n^{2})<O(n^{3})

指數時間算法:計算時間用指數函數限界的算法

O(2^{n})<O(n!)<O(n^{n})

計算時間函數的曲線如上圖,可見當 n 曲較大值時指數時間算法和多項式時間算法的計算時間差別懸殊。

下界函數

類似上界函數,若存在兩個常數c 和 n0 對於所有n >= n0, 有 |f(n)| >= c|g(n)|,則記爲f(n) = Ω(g(n))

說明,

  • 對於規模 n 若算法所用時間總是不小於|g(n)|的一個常數倍,則g(n) 就是 f(n)的一個下界函數
  • f(n) 的增長至少像 g(n) 一樣快
  • 試圖求最大的g(n),使得f(n)=O(g(n)),即 求最大下界函數。

平均情況界限函數

若存在正常數c1,c2,n0,對於所有n >= n0 ,有c1|g(n)| <= |f(n)| <= c2|g(n)|,則記f(n)=\Theta (g(n))

說明,

  • 算法的最好、最壞情況計算時間對於c1,c2常數因子範圍內而言是相同的,可以看作,既有f(n) = O(g(n)),又有f(n) = Ω(g(n))
  • \Theta 表明算法運行時間有一個準確的界限

最優算法

問題的計算時間的下界Ω(f(n)),則時間複雜性O(f(n))是算法的最優算法。例,排序問題計算時間下界Ω(nlogn),則計算時間複雜性O(nlogn)爲最優算法。

 

 

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