1. 程式人生 > >關於時間復雜度與空間復雜度總結

關於時間復雜度與空間復雜度總結

條件語句 存儲空間 開始 每次 基本 對數 時間 strong 關於

簡單來說,時間復雜度指的是語句執行次數,空間復雜度指的是算法所占的存儲空間。

一般情況下,隨著n的增大,T(n)增長最慢的算法為最優算法。

1.對於簡單的輸入輸出語句或賦值語句(無循環語句),近似認為需要 O(1)。一般來說,只要算法中不存在循環語句,其時間復雜度就是 O(1)。

2.對於順序結構,需要依次執行一系列語句所用時間可采用 "求和法則"。

3.對於判斷條件語句來說,一般是求它的最差時間復雜度。

4.對於循環語句來說,只考慮循環體中語句的執行次數。當有若幹個循環語句,則復雜度由最深層的循環內的基本語句的頻度f(n)決定的。

5.對數時間復雜度:當每次操作都能將所需要檢測的元素減少一半時(即每次操作,未檢測元素減少一半),這樣的時間復雜度為 O(logn)。

6.如果一個算法的執行次數是 T(n),那麽只保留最高次項,同時忽略最高項的系數後得到函數 f(n),此時算法的時間復雜度就是 O(f(n))。為了方便描述,下文稱此為 大O推導法。推導方法:1代替常數;只保留最高階;最高階不是1時去掉最高階的系數。

7.時間復雜度分析的基本策略是:從內向外分析,從最深層開始分析。如果遇到 函數調用,要深入函數進行分析。

8.O(1) 常數階 < O(logn) 對數階 < O(n) 線性階 < O(nlogn) < O(n^2) 平方階 < O(n^3) < { O(2^n) < O(n!) < O(n^n) }
最後三項用大括號把他們括起來是想要告訴大家,如果日後大家設計的算法推導出的“大O階”是大括號中的這幾位,那麽趁早放棄這個算法,在去研究新的算法出來吧。因為大括號中的這幾位即便是在 n 的規模比較小的情況下仍然要耗費大量的時間,算法的時間復雜度大的離譜,基本上就是“不可用狀態”。

9.空間復雜度為1時,表示這個變量與問題規模n大小無關。

關於時間復雜度與空間復雜度總結