2018/05/21

演算法的描述法

  因為應用環境以及需求的不同,演算法的描述方式有著各種不同的方法,並無一統一之標準存在。除了本書使用的流程圖之外,比較常見的還有下列的數種:

一、自然語言描述

直接用自然語言一步一步的描述解題的步驟。這種描述法常見於各種說明文件以及操作手冊中,有時會輔以說明性的圖片。但是,運用在描述一個演算法時,最好加入下列的考量,才能清楚明確並具有較大的彈性:

  1. 在整個步驟說明之前方加上二個獨立的段落,分別說明給予(或已知,或輸入)的資料(及條件),以及最後要得到的結果(或輸出);
  2. 將各步驟之說明獨立成段落,各段落給予適當之編號,以方便流程之敘述與參照。

  這個方法的最大優點是幾乎沒有任何的技術需求,任何人都可以馬上上手。但是它有如下的幾個問題,使用時必須設法加以規避或處理:

  1. 自然語言的多義性,往往造成不同解讀者有不同想法;
  2. 句中所使用的代名詞所確切指稱的對象往往難以精確掌握;
  3. 難以全面掌握,有些流程可能會漏掉而未加以描述,造成整體的執行邏輯不完整;
  4. 有些結構(如遞迴法)不易用此方法來描述。

二、虛擬程式碼

和電腦語言相較,自然語言的邏輯架構顯得複雜而鬆散。為了補救此一問題,虛擬程式碼的作法是在整體架構上採用程式語言的架構,嚴格限制為只有循序、分歧、以及重複三種,而在此架構中的執行動作或是判斷條件則仍是以自然語言進行。
  基本上,只要花一點時間理解前述所謂的程式語言三種架構,就可以不至於太困難的上手。但這裡開始有一些標準化的要求出現。例如,所謂「程式語言」,到底在演算法的描述中要不要選定一種程式語言的「語法」或「表示法」加以遵循?早期最常見到的是採用Algol或是Pascal在流程控制上的語法。當然,不同的語言在先天上便有其限制,因此,也有些作者便揉入其他的語法結構自行設計類似的語法,或是語言。
  前述難以全面掌握,有些流程可能會漏掉而未加以描述,造成整體的執行邏輯不完整的問題並無法因加入程式語言的架構而解決。

三、程式語言的程式碼

隨著電腦運算能力以及程式語言教育的普及,許多作者開始直接以選定的語言來呈現各種資料結構和演算法的介紹。或許這種作法的最大好處是縮短設計、實作、展示的週期,也讓學習者直接有程式碼可抄,但它的問題並不少,這本書的序言中已談了不少,在此不再贅述了。

相關章節:

書名:《秒懂資料結構》1.3節 本書表達方法說明
作者:施保旭
出版:五南圖書出版有限公司
ISBN:978-957-11-8458-6
購買:博客來專頁