演算法的「時間複雜度」和「空間複雜度」合稱為演算法的複雜度。
時間複雜度
時間複雜度的定義可以參考以下我列下的幾篇部落格。
計算機科學家用於表示用於乙個演算法的效率或計算複雜度的一種表示法,叫作大o表示法(big-o notation)。「o」表示「on the order of(在……階)」,這是對演算法工作量的複雜度的級別的一種表示。例如,乙個線性時間演算法的階是o(n)。大o表示法將我們對複雜度的階的討論形式化。
按數量級遞增排列,常見的時間複雜度有:常數階o(
1)o (1
),對數階o(
log2
n)o (l
og2n
),線性階o(
n)o (n
),線性對數階o(
nlog
2n) o(n
log2
n),平方階o(
n2) o(n
2),立方階o(
n3) o(n
3),…,k次方階o(
nk) o(n
k),指數階o(
2n) o(2
n)。隨著問題規模n的不斷增大,演算法的執行效率越低。
下表列出一些複雜度階的示例:
n對數階(lo
g2n log
2n)線性階(n
) (n)
平方階(n2
) (n2
)指數階(2n
) (2n
)1007
10010 000
超標1000
101000
1 000 000
超標1 000 000
201000 000
1 000 000 000 000
嚴重超標
下圖列出了常用的時間複雜度的圖例
空間複雜度
乙個程式的空間複雜度是指執行完乙個程式所需記憶體的大小。利用程式的空間複雜度,可以對程式的執行所需要的記憶體多少有個預先估計。乙個程式執行時除了需要儲存空間和儲存本身所使用的指令、常數、變數和輸入資料外,還需要一些對資料進行操作的工作單元和儲存一些為現實計算所需資訊的輔助空間。程式執行時所需儲存空間包括以下兩部分。
(1)固定部分。這部分空間的大小與輸入/輸出的資料的個數多少、數值無關。主要包括指令空間(即**空間)、資料空間(常量、簡單變數)等所佔的空間。這部分屬於靜態空間。
(2)可變空間,這部分空間的主要包括動態分配的空間,以及遞迴棧所需的空間等。這部分的空間大小與演算法有關。
乙個演算法所需的儲存空間用f(n)表示。s(n)=o(f(n)) 其中n為問題的規模,s(n)表示空間複雜度。
參考:
時間複雜度與空間複雜度
空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...
時間複雜度與空間複雜度
本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...
時間複雜度與空間複雜度
本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...