1. 程式人生 > >數學基礎-時間複雜度和空間複雜度

數學基礎-時間複雜度和空間複雜度

時間複雜度:是用來衡量當問題規模擴大後,演算法執行的時間增長程度。而不是程式解決問題需要的時間,解決問題所需要的時間取決於計算機效能和問題規模。解決相同規模的問題時,時間複雜度越大,解決問題所需的時間就越長。

問題的規模:排序問題,需要排序的資料量即為問題的規模;有的搜尋演算法,解空間的規模為問題的規模

不同級別複雜度
O(1):常數級複雜度,程式執行時間恆定,不隨資料規模而變化;單一表達式複雜度
O(n):線性複雜度,執行時間和資料規模成正比;一重迴圈複雜度
O(log(n)):對數複雜度
O(n^2):執行時間是資料規模冪指數,資料擴大2倍,時間變慢4倍。二重迴圈複雜度
O(a^n):指數級複雜度
O(n!):階乘級複雜度
O(1)、O(log(n))、O(n)、O(n^a)等,規模n出現在底數的位置,是多項式級的複雜度; O(a^n)和O(n!)是非多項式級的複雜度。

空間複雜度
同理,空間複雜度是用來衡量當問題規模擴大後,演算法執行佔用空間的增長程度。

時間複雜度和空間複雜度的關係
我們通常選擇多項式級的複雜度的演算法。非多項式級的複雜度的演算法執行時間和佔用空間隨著問題規模的增大會膨脹,超出硬體承受能力。
對於一個演算法來說,空間複雜度和時間複雜度往往是相互影響的。有的時候需要以時間換空間,而有的時候就要以空間換時間。