演算法複雜度
阿新 • • 發佈:2021-08-07
簡介
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間複雜度和空間複雜度來考慮。
時間複雜度
時間頻度
一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。演算法的時間複雜度是指執行演算法所需要的計算工作量。
時間複雜度
一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用T(n)表示,若有某個輔助函式f(n),存在一個正常數c使得fn*c>=T(n)恆成立。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
當隨著n越來越大時,常數項、低次項可以被忽略,例如T(n) = n²+2n+3 ,O(f(n) = n², 如果n的次方是平方,係數也可以忽略,例如5n² = n²
常見的時間複雜度
- 常數階O(1),對數階O(log2n)(以2為底n的對數,下同),線性階O(n)
- 線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3)
- k次方階O(n^k),指數階O(2^n)
由小到大依次為:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(nk) <Ο(2n)
空間複雜度
與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作:S(n)=O(f(n)) 演算法執行期間所需要的儲存空間包括3個部分:- 演算法程式所佔的空間;
- 輸入的初始資料所佔的儲存空間;
- 演算法執行過程中所需要的額外空間。
在做演算法分析時,主要討論的是時間複雜度。從使用者使用體驗上看,更看重的程式執行的速度。一些快取產品(redis, memcache)和演算法(基數排序)本質就是用空間換時間.