二、演算法

weixin_33978044發表於2016-03-02

演算法定義

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或者多個操作。

演算法的特性

  • 輸入和輸出

演算法具有零個或多個輸入,但是至少有一個輸出,演算法是一定需要輸出的,輸出的形式可以是列印,後者返回值

  • 確定性

演算法的每個步驟都具有確定的含義,不會出現二義性,一個條件下之意一條執行路徑,相同的輸入也只能有唯一的結果,誒個步驟都被精準定義而不會有歧義。

  • 有窮性

演算法在執行有限步驟後,自動結束不會出現無限迴圈,並且每一步都在可接受的時間內完成。有窮指的是實際應用當中合理的、在可行方案中是最優的有邊界。

  • 可行性

演算法的每一步都是能夠通過執行有限次數完成的,並能得到正確的結果

演算法的設計要求

  • 正確性

1、演算法程式沒有語法錯誤:最基本的要求
2、對於合法的輸入資料能得到正確的結果
3、對於非法的輸入資料能得出滿足規格說明的結果,也就是做了特殊資料的判斷處理。

  • 可讀性

便於閱讀、理解和交流。我們寫程式碼的目的,出列讓計算機執行外還有一個更重要的目的是為了便於他人閱讀,讓人理解和交流。
可讀性是演算法(也包括程式碼)好壞很重要的標誌。

  • 健壯性

好的演算法應該對輸入資料不合法的情況做合適的處理。

  • 時間效率高,佔用儲存少。

演算法應該儘量滿足時間效率高和儲存量(包括演算法執行過程中佔用的記憶體和硬碟儲存空間)低的需求。

演算法效率度量方法

一個程式的執行時間,依賴於演算法的好壞和輸入量的多少

在估計演算法執行時間時最可靠的就是計算對執行時間有消耗的基本操作的執行次數。應該把程式看成是執行演算法的一系列步驟,然後建立基本運算元量與輸入量多少的關係函式。

判斷一個演算法效率的時候,一般都更關注最高階項,忽略函式中的常數項和其他次要項。
演算法的基本操作次數y與輸入量的多少x有很大關係。例:

兩個演算法S1、S2的基本操作次數y1、y2,輸入量x,可能存在某個n值的存在,當x>n的時候總有y1>y2,又或者y2>y1,因此評估演算法的執行次數的時候應該看具體的輸入量多少。

演算法的時間複雜度

時間複雜度是演算法的時間度量。

推導O( )的技巧:

1.用常數1代替所有的加法項的常數。
2.在修改後的函式中,去掉次要項,只保留最高項。
3.使最高項為1,得到的就是O( )。

相關文章