在計(jì)算機(jī)解決問(wèn)題的過(guò)程中,數(shù)據(jù)結(jié)構(gòu)和算法是程序的兩大要素,二者相輔相成,缺一不可。算法與數(shù)據(jù)結(jié)構(gòu)的好壞直接相關(guān),一種數(shù)據(jù)結(jié)構(gòu)的優(yōu)劣是由實(shí)現(xiàn)其各種運(yùn)算的算法體現(xiàn)的。對(duì)數(shù)據(jù)結(jié)構(gòu)的分析實(shí)質(zhì)上也表現(xiàn)為對(duì)實(shí)現(xiàn)其多種運(yùn)算的算法分析。算法分析是一個(gè)復(fù)雜的問(wèn)題,它首先涉及到優(yōu)劣準(zhǔn)則的確定。判斷一個(gè)算法的優(yōu)劣主要有以下幾個(gè)標(biāo)準(zhǔn):
(1)正確性。要求算法能夠正確地執(zhí)行規(guī)定的功能。這是最重要也是最基本的準(zhǔn)則;
(2)可使用性。算法應(yīng)當(dāng)是可讀的,即可讀性好。為了達(dá)到這個(gè)要求,算法的邏輯必須是清晰的、簡(jiǎn)單的和結(jié)構(gòu)化的;
(3)健壯性。要求算法具有很好的容錯(cuò)性,即提供例外處理,能夠?qū)Σ缓侠淼臄?shù)據(jù)進(jìn)行檢查,不會(huì)經(jīng)常出現(xiàn)異常中斷或死機(jī)現(xiàn)象;
(4)效率。算法的效率主要指算法執(zhí)行時(shí)計(jì)算機(jī)資源的消耗,包括存儲(chǔ)和運(yùn)行時(shí)問(wèn)的開銷,前者叫做算法的空間代價(jià),后者叫做算法的時(shí)間代價(jià)。
時(shí)間代價(jià)是常用的評(píng)價(jià)指標(biāo),往往用時(shí)間復(fù)雜度來(lái)衡量。當(dāng)一個(gè)算法轉(zhuǎn)換成程序并在計(jì)算機(jī)上執(zhí)行時(shí),其運(yùn)行所需要的時(shí)間總是取決于下列因素:
硬件的速度。CPU速度和存取數(shù)據(jù)的速度越快,則程序的執(zhí)行時(shí)間越短;
所選用的程序設(shè)計(jì)語(yǔ)言。程序設(shè)計(jì)語(yǔ)言的級(jí)別越高,其執(zhí)行效率就越低。比如匯編語(yǔ)言程序的執(zhí)行效率往往要高于高級(jí)算法語(yǔ)言;
編譯程序所生成目標(biāo)代碼的質(zhì)量。對(duì)于代碼優(yōu)化較好的編譯程序,其所生成的程序質(zhì)量較高。比如,代碼效率優(yōu)化過(guò)的C語(yǔ)言程序比未經(jīng)過(guò)優(yōu)化的代碼效率要高;
問(wèn)題的規(guī)模。很顯然,大規(guī)模的問(wèn)題求解過(guò)程比小規(guī)模的問(wèn)題更耗費(fèi)時(shí)間。
顯然,在各種因素都不能確定的情況下,很難比較算法的執(zhí)行時(shí)間。也就是說(shuō),使用執(zhí)行算法的絕對(duì)時(shí)間來(lái)衡量算法的效率是不合適的。為此,可以將上述各種與計(jì)算機(jī)相關(guān)的軟、硬件因素都確定下來(lái),這樣一個(gè)特定算法的運(yùn)行工作量的大小就只依賴于問(wèn)題的規(guī)模,或者說(shuō)它是問(wèn)題規(guī)模的函數(shù)。另一方面,要全面地評(píng)價(jià)一個(gè)算法的優(yōu)劣,不僅要考慮時(shí)間的耗費(fèi),還要考慮算法對(duì)存儲(chǔ)器的耗費(fèi)。特別是對(duì)于大規(guī)模問(wèn)題,對(duì)空間耗費(fèi)的分析是必不可少的。因此,分別有基于時(shí)間和空間的算法分析,即算法的時(shí)間復(fù)雜度分析和空間復(fù)雜度分析。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |