1.2.6 算法的描述
我們一旦設計了一個算法,就需要用一定的方式對它進行詳細描述。1.1節給出了一個例子,我們已經用文字(雖然較隨意,但也是按照一步一步的形式)和偽代碼描述了歐幾里得算法。這是當今描述算法的兩種最常用的做法。
使用自然語言描述算法顯然很有吸引力。然而,自然語言固有的不嚴密性使得我們很難做到簡單清晰地描述算法。不過,這也是我們在學習算法的過程中需要努力掌握的一個重要技巧。
偽代碼(pseudocode)是自然語言和類編程語言組成的混合結構。偽代碼往往比自然語言更精確,而且用偽代碼描述的算法往往會更簡潔。令人驚訝的是,計算機科學家從來沒有就偽代碼的形式達成過共識,而是讓教材的作者去設計他們自己的“方言”。值得慶幸的是,這些方言彼此還十分相似,任何熟悉一門現代編程語言的人都完全能夠理解。
本書選擇的方言力求不給讀者帶來任何困難。出于對簡單性的偏好,我們忽略了對變量的定義,并使用縮進來表示for,if和while語句的作用域。正如大家在前一節里看到的,我們將使用箭頭“←”表示賦值操作,用雙斜線“//”表示注釋。
在計算機應用早期,描述算法的主要工具是流程圖(flowchart)。流程圖使用一系列相連的幾何圖形來描述算法,幾何圖形內部包含對算法步驟的描述。實踐證明,除了一些非常簡單的算法以外,這種表示方法使用起來非常不便。如今,我們只能在早期的算法教材里找到它的蹤影。
當代計算機技術還不能將自然語言或偽代碼形式的算法描述直接“注入”計算機。我們需要把算法變成用特定編程語言編寫的程序。盡管這種程序應當屬于算法的具體實現,但我們也能將其看作算法的另一種表述方式。