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