盧飛
摘 要:算法是一種解決程序編寫方案的準(zhǔn)確并且完整的描述,即為解決一系列問題的清晰指令。算法的運(yùn)算種類極為繁多,其中最為基本的有賦值運(yùn)算、算術(shù)運(yùn)算、邏輯運(yùn)算和關(guān)系運(yùn)算等,另外稍為復(fù)雜的還有算術(shù)表達(dá)式和邏輯表達(dá)式等。算法是計(jì)算機(jī)程序編寫的靈魂,是發(fā)揮程序嚴(yán)謹(jǐn)作用極為有效的工具。如果想編寫出好的程序,熟練地掌握算法乃是極為重要的。
關(guān)鍵詞:算法;數(shù)據(jù)模型;抽象數(shù)據(jù)
中圖分類號(hào):TP312
文獻(xiàn)標(biāo)識(shí)碼:B
1.算法的特性
(1)確定性。組成算法的每條指令是清晰的、無歧義的,對(duì)特定的輸入有特定的輸出。
(2)有窮性。算法中的每條指令的執(zhí)行次數(shù)有限,執(zhí)行每條指令的時(shí)間也有限。程序只表現(xiàn)成一段實(shí)現(xiàn)算法的代碼。
(3)可行性。算法需要考慮程序編程的可能性。
(4)輸入。有零或多個(gè)外部量作為算法的輸入,并且依靠程序的平臺(tái)來提供。
(5)輸出。算法會(huì)產(chǎn)生至少一個(gè)量作為輸出,所輸出的內(nèi)容也需依靠代碼來獲得支持。
2.數(shù)據(jù)模型在算法中的重要作用
對(duì)于一個(gè)明確的編程問題,在設(shè)計(jì)它的算法之前,應(yīng)先選用該問題的數(shù)據(jù)模型,然后則需要清晰了解該數(shù)據(jù)模型在已知條件下的初始狀態(tài)和所要達(dá)到的結(jié)果狀態(tài),以及這兩個(gè)狀態(tài)之間所隱含的相互關(guān)系。然后再探索從此種數(shù)據(jù)模型的已知初始狀態(tài)達(dá)到要求的結(jié)果狀態(tài)所需運(yùn)算的幾種運(yùn)算步驟,而這些運(yùn)算的步驟實(shí)際上就是求解該程序編寫問題的算法。
按照自頂向下逐步求精的原則,在探索運(yùn)算的步驟時(shí),首先應(yīng)該先考慮算法頂層的運(yùn)算步驟,然后再逐次向下考慮,直至進(jìn)行到最低層的運(yùn)算步驟。其中,所謂頂層的運(yùn)算步驟,就是組成算法的主干部分,在設(shè)計(jì)時(shí)可以先不去考慮它所會(huì)用到的一些具體數(shù)據(jù)。所涉及的數(shù)據(jù)是數(shù)據(jù)模型之中的變量。其所涉及的運(yùn)算需以數(shù)據(jù)模型中的數(shù)據(jù)變量作為運(yùn)算的對(duì)象,或作為運(yùn)算的結(jié)果,或兩者兼為之。而所謂低層運(yùn)算步驟,是指在頂層抽象運(yùn)算之上的具體實(shí)現(xiàn)。它們不僅依賴于數(shù)據(jù)模型的結(jié)構(gòu),更依賴于數(shù)據(jù)模型結(jié)構(gòu)的具體表示方法。另外,由于頂層設(shè)計(jì)和低層實(shí)現(xiàn)具有局部化的特點(diǎn),因此在編寫程序過程中所出現(xiàn)的差錯(cuò)也應(yīng)該是局部的,因而在算法維護(hù)方面具有很強(qiáng)的可操作性。
3.算法中的重要概念——抽象數(shù)據(jù)類型
抽象數(shù)據(jù)類型是算法的一個(gè)數(shù)據(jù)模型且連同定義在該模型上作為算法構(gòu)件的一組運(yùn)算。此概念將數(shù)據(jù)模型與該模型上的運(yùn)算緊密地聯(lián)系了起來。數(shù)據(jù)模型上的運(yùn)算依賴于數(shù)據(jù)模型的具體實(shí)現(xiàn),而數(shù)據(jù)模型上的運(yùn)算又以數(shù)據(jù)模型中的變量為運(yùn)算的對(duì)象,或者說也可以當(dāng)做一種運(yùn)算的結(jié)果。另外,對(duì)于不同的運(yùn)算組,為了使該運(yùn)算組中所有運(yùn)算效率都盡可能地提高,其相應(yīng)數(shù)據(jù)模型的具體表示會(huì)有所不同。在此種關(guān)系之下,數(shù)據(jù)模型的具體表示反過來又會(huì)依賴于數(shù)據(jù)模型上所進(jìn)行定義的運(yùn)算。特別是當(dāng)不同的運(yùn)算效率相互制約時(shí),則必須事先將所有運(yùn)算按其相應(yīng)的實(shí)用頻率排列,從而保證使用頻率較高的運(yùn)算。
4.算法在編寫程序過程中需要注意的事項(xiàng)
(1)算法設(shè)計(jì)與數(shù)字結(jié)構(gòu)設(shè)計(jì)分離,允許數(shù)據(jù)結(jié)構(gòu)自由選擇,進(jìn)行最優(yōu)比較。
(2)數(shù)據(jù)模型與該模型上的運(yùn)算統(tǒng)一在抽象數(shù)據(jù)類型之中,反映了它們之間相互制約、相互依存的關(guān)系。
(3)算法可以呈現(xiàn)為自然模塊化,而抽象的數(shù)據(jù)類型也可以進(jìn)行任意移動(dòng)和重復(fù)使用。
(4)算法的結(jié)構(gòu)力求清晰,為自頂向下的結(jié)構(gòu)方式,層次分明,具有較強(qiáng)的邏輯性。
(5)算法具有一定的復(fù)雜性。算法復(fù)雜性的高低往往體現(xiàn)在運(yùn)行此種算法所需要的編寫程序的復(fù)雜程度上。復(fù)雜程度越高,該算法的復(fù)雜性也就會(huì)相應(yīng)地增大。因此,設(shè)計(jì)出復(fù)雜性低的算法是進(jìn)行算法分析的重要目標(biāo)。另外,當(dāng)遇到所給定的問題已經(jīng)有多種算法時(shí),應(yīng)選取其中復(fù)雜性最低的算法為最佳算法。
編寫程序過程中最為重要的思想是算法。想要運(yùn)用計(jì)算機(jī)解決一個(gè)具體問題,必須合理地運(yùn)用數(shù)學(xué)知識(shí),而算法作為此種數(shù)學(xué)思想的集合歸總,則占據(jù)了十分重要的地位。算法在計(jì)算機(jī)程序編寫技術(shù)中早已發(fā)揮出相當(dāng)廣泛的作用,其基本概念、基本指導(dǎo)思想、基本方法,也促使計(jì)算機(jī)程序編寫走入日益完善和成熟的軌道之中。
參考文獻(xiàn):
[1]王曉東.算法設(shè)計(jì)與分析(第2版)[M].北京:清華大學(xué)出版社,2008.
[2]李晶皎.嵌入式語音技術(shù)及凌陽16位單片機(jī)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2003.