文/張曉蓉
計算機(jī)工作有其本質(zhì)特征,主要表現(xiàn)為將人們預(yù)先對其設(shè)計的計算機(jī)算法執(zhí)行出來。而對于計算機(jī)程序來說,計算機(jī)算法是其先導(dǎo)和基礎(chǔ),其與數(shù)據(jù)結(jié)構(gòu)形成了計算機(jī)的程序。計算機(jī)算法是一種具體的運(yùn)算序列,主要用來解決實際問題,可以將解決問題有著樣的具體過程,詳細(xì)運(yùn)算描述出來。計算機(jī)算法包括了非數(shù)值運(yùn)算算法和數(shù)值運(yùn)算算法。實際解決問題中,會依據(jù)具體情況選擇出一種最適合的算法,進(jìn)而將實際問題得到準(zhǔn)確的答案。
計算機(jī)算法特點表現(xiàn)為確定性、有窮性、有一個或多個輸出、有零個或者多個輸入、有效性。計算機(jī)算法在大的分類上有兩種,一種是數(shù)值運(yùn)算算法,另一種是非數(shù)值運(yùn)算算法,其中數(shù)值運(yùn)算下面包括了遞歸法、迭代法、遞推法;非數(shù)值算法下面包括了窮舉法、回溯法、分治法、貪心法。
該種問題通常包含了兩個方面,其中之一就是算法空間上的復(fù)雜性,其中之二就是算法時間上的復(fù)雜性??臻g復(fù)雜具體來說執(zhí)行計算機(jī)的算法所使用空間的大小。時間復(fù)雜就是說執(zhí)行算法時會花費(fèi)時間作為代價,執(zhí)行算法的過程中,需要一定工作量。從這點去看,計算機(jī)算法有著怎樣的工作效率,主要的影響因素包括了算法需要使用的空間以及工作量多少,因此,在設(shè)計具體的計算機(jī)算法時,應(yīng)該盡最大的努力降低算法的空間復(fù)雜性和時間復(fù)雜性。
計算機(jī)能不能控制一些錯誤的傳播或積累,這是計算機(jī)算法的穩(wěn)定可靠性問題。計算機(jī)在實際計算工作中,處理的那些數(shù)值有一個特征,就是比較近似,因為估算或者觀測存在誤差,初始值并不一定非常精確;另外,當(dāng)計算機(jī)執(zhí)行計算時,數(shù)字的有效數(shù)位對其產(chǎn)生一些限制作用。因此,選擇何種計算機(jī)算法,對該算法實際計算中,存在哪些具體行為,是不是能夠?qū)⑦\(yùn)算的每一個步驟出現(xiàn)的誤差,做出有效控制,這樣的計算機(jī)計算結(jié)果才是具有實際的。
針對一個具體的問題,假設(shè)可以將在規(guī)定下計算機(jī)算法有著怎樣的運(yùn)算類型確定出來,就能夠運(yùn)用計算機(jī)算法構(gòu)成此問題下面的計算機(jī)算法類。在有效的分析了計算機(jī)算法后,就能夠?qū)⑨槍υ搯栴}的算法是不是存在最優(yōu)算法進(jìn)行辨別和判斷,主要的依據(jù)就是分析計算機(jī)算法的平均性,或者分析該計算機(jī)最壞的情況,假設(shè)這樣一個情形,對一個問題下的算法類沒能設(shè)計出一個比當(dāng)前算法更加簡單和快速的算法,這就對于一些大型和中型的問題來說,想要找出一個運(yùn)算準(zhǔn)確的計算機(jī)算法,還是存在一定難度的。
計算機(jī)算法在設(shè)計與分析的過程中,還需要思考計算機(jī)算法的自適應(yīng)問題、簡明性問題、精巧性問題、是否能實現(xiàn)約束的問題,對于這些內(nèi)容應(yīng)該要做到充分地分析和思考,進(jìn)而在設(shè)計計算機(jī)算法時才能有更強(qiáng)的針對性,設(shè)計出更加優(yōu)化合理的計算機(jī)算法。
在一些研究中,通過實際例子的分析,得出了相應(yīng)的計算機(jī)算法類。其中一個實際設(shè)計實例就是n項線性表順序搜索計算算法,另一個是具有n項線性表對分查找計算機(jī)算,后面的算法也被稱之為二分法。分析兩個實際的例子,順序搜索用在無序表查找中更加合適,在查找類的算法上,更加簡便,有一個平均的查找長度,表示為(n+1)/2,但是如果換成了第二中方法,查找的長度被大大縮短,表示為[log2n]+1。從這點去看,實際應(yīng)用的情況中,想要各類使用具體狀態(tài)提升效率,需要利用一些方法,將無序線性表轉(zhuǎn)變成為有序的線性表。并且,對于那種表面看非常簡單的事例,還是需要對其的空間復(fù)雜性和時間復(fù)雜性進(jìn)行估算,通常估算內(nèi)容有最壞情況、平均性狀,這也不是一個簡單的工作。而對于一些各類的常用算法,還好現(xiàn)存的手冊和書刊資料都已經(jīng)成型,也就可以將其作為參考的資料。用戶具體應(yīng)用所需常用算法的時候,就能比較簡便地運(yùn)用當(dāng)前已有的一些復(fù)雜的估算公式,這樣可以對此算法能不能使用,或者能不能滿足使用需求,進(jìn)行相應(yīng)的估算。
實踐工作中,對復(fù)雜性進(jìn)行估算,可以線做出一些粗略程度較高的數(shù)量估計,像對于排序n項數(shù)據(jù)中使用的冒泡排序算法,其復(fù)雜性的表現(xiàn)是正比例n2的數(shù)量級,表示為o(n2)。除了上述方法,還有一種相互比較的方法,能夠?qū)⑺惴◤?fù)雜性大致定量描述出來,例如,一種算法的具體復(fù)雜性描述為,n數(shù)目增加,其就會增加,假設(shè)該算法增長速度低于一個n次多項式算法的增長,就可以將其歸類為多項式類的復(fù)雜性范圍內(nèi);假設(shè)說該算法的復(fù)雜性,表現(xiàn)為指數(shù)級別的方式增長時,就可以說此算法復(fù)雜性指數(shù)類復(fù)雜性,其他復(fù)雜性的區(qū)別以此類推。但是說求解問題時,沒有多項式類的算法,在層次方面體現(xiàn)為NP問題。但是實際中還應(yīng)該考慮計算機(jī)算法在空間上的復(fù)雜性,兩個方向都要有一定的評價標(biāo)準(zhǔn)。
綜上所述,計算機(jī)算法存在復(fù)雜性問題、可靠性問題等等,在設(shè)計計算機(jī)算法時應(yīng)該充分考慮到各個問題,進(jìn)而選擇出一個最有的計算機(jī)算法,在解決問題時,才能更加快速和準(zhǔn)確,提升計算機(jī)工作效率,為用戶提供更大的便利。