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