同一問題可用不同算法解决,而一個算法的質量優劣將影響到算法乃至程序的效率。算法分析的目的在於選擇合適算法和改進算法。一個算法的評價主要從時間復雜度和空間復雜度來考慮。
1、時間復雜度
(1)時間頻度
一個算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個算法都上機測試,衹需知道哪個算法花費的時間多,哪個算法花費的時間少就可以了。並且一個算法花費的時間與算法中語句的執行次數成正比例,哪個算法中語句執行次數多,它花費時間就多。一個算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。
(2)時間復雜度
在剛纔提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麽規律。為此,我們引入時間復雜度概念。
一般情況下,算法中基本操作重複執行的次數是問題規模n的某個函數,用t(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函數。記作t(n)=o(f(n)),稱o(f(n)) 為算法的漸進時間復雜度,簡稱時間復雜度。
在各種不同算法中,若算法中語句執行次數為一個常數,則時間復雜度為o(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間復雜度相同,都為o(n2)。
按數量級遞增排列,常見的時間復雜度有:
常數階o(1),對數階o(log2n),綫性階o(n),
綫性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,
k次方階o(nk),指數階o(2n)。隨着問題規模n的不斷增大,上述時間復雜度不斷增大,算法的執行效率越低。
2、空間復雜度
與時間復雜度類似,空間復雜度是指算法在計算機內執行時所需存儲空間的度量。記作:
s(n)=o(f(n))
我們一般所討論的是除正常占用內存開銷外的輔助存儲單元規模。討論方法與時間復雜度類似,不再贅述。 |
|
|