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