1. 程式人生 > >演算法分析:時間複雜度+空間複雜度 O(n)

演算法分析:時間複雜度+空間複雜度 O(n)

時間複雜度演算法分析同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率.演算法分析的目的在於選擇合適演算法和改進演算法.一個演算法的評價主要從時間複雜度和空間複雜度來考慮.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))我們一般所討論的是除正常佔用記憶體開銷外的輔助儲存單元規模.