算法描述
算法描述是指對設計出的算法,用一種方式進行詳細的描述,以便與人交流。描述可以使用自然語言、偽代碼,也可使用程序流程圖,但描述的結果必須滿足算法的五個特征。
使用自然語言描述算法顯然很有吸引力,但是自然語言固有的不嚴密性使得要簡單清晰的描述算法變得很困難。因此,使用偽代碼來描述算法是一個很好的選擇。
算法的特征
-
輸入:一個算法必須有零個或以上輸入量。
-
輸出:一個算法應有一個或以上輸出量,輸出量是算法計算的結果。
-
明確性:算法的描述必須無歧義,以保證算法的實際執行結果是精確地符合要求或期望,通常要求實際運行結果是確定的。
-
有限性:依據圖靈的定義,一個算法是能夠被任何 圖靈完備系統模擬的一串運算,而圖靈機器只有有限個狀態、有限個輸入符號和有限個轉移函數(指令)。而一些定義更規定算法必須在有限個步驟內完成任務。
-
有效性:又稱可行性。能夠實現,算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現。
偽代碼
偽代碼是自然語言和類編程語言組成的混合結構。它比自然語言更精確,描述算法很簡潔;同時也可以很容易轉換成計算機程序。雖然如此,但計算機科學家們從來就沒有對偽代碼的形式達成共識,不同作者的教材會設計他們自己的“方言”(偽代碼)。幸運的是,這些偽代碼都十分相似,任何熟悉一門現代變成語言的人都完全能夠理解。
使用偽代碼描述算法可以讓程序員很容易將算法轉換成程序,同時還可以避開不同程序語言的語法差別,如Pascal語言使用“:=”作為賦值,使用“=”作為比較;又如C/C++的賦值使用“=”,而判斷相等的比較則是用“==”。
常用的微帶關鍵詞含義如下表所示:
偽代碼 | 含義 | C/C++語言 |
---|---|---|
縮進 | 程序塊 | {} |
/ / | 行注釋 | / / |
← | 賦值 | = |
= | 比較運算——等於 | == |
≠ | 比較運算——不等於 | != |
≤ | 比較運算——小於或等於 | < = |
≥ | 比較運算——大於或等於 | >= |
for i←1 to n do | For循環 | for(i=1;i⇐n;i++){} |
for i←n downto 1 do | For循環 | for(i=n;i>=1;i–){} |
while i<n do | Wihle循環 | while(i<n){} |
do while i<n | Do-While循環 | do {} while(i<n) |
repeat until i<n | Repeat循環 | |
if i<n else | If-Else語句 | if(i<n){} else {} |
return | 函數返回值 | return |
A[0..n-1] | 數組定義 | int A[n-1] |
A[i] | 引用數組 | A[i] |
SubFun() | 函數調用 | SubFun() |
流程圖
在計算機應用早期,描述算的主要工具是流程圖。流程圖使用一系列相連的幾何圖形來描述算法,幾何圖形內部包含對算法步驟的描述。實踐證明,除了一些非常簡單的算法外,這種表示方法使用起來非常不方便。