一、 算法時間複雜度
- 符號:O(f(n))
- 含義:某個算法需要執行的指令數的量級
- 定義:
- 學術界:算法執行上界
- 工業界:算法執行的最低上界
- 注意點:通常算法時間複雜度與算法所處環境有關,如插入排序最差情況爲O(n^2),最好情況爲O(1),但一般所說的插入排序的時間複雜度爲O(n^2)是平均情況(絕大多數情況下的複雜度),快速排序同理,最差爲O(n^2),最好情況爲O(nlogn),而平均情況爲O(nlogn),這也就表示爲快速排序的平均情況。
二、空間複雜度:
- 符號:O(f(n))
- 含義:算法運行過程中額外開闢的空間的大小
- 注意點:當有遞歸時,還需要考慮遞歸所佔的空間,因爲需要保存斷點以及臨時變量,通常來說,遞歸本身所需的空間複雜度爲O(遞歸深度)
三、數據規模:
- 條件:運行10^8個指令需要一秒(通常來說),所以如果需要在1秒內執行完畢某個算法,
- 當一個算法是O(n^2),數據規模必須小於10^4,而由於每個數據的執行指令通常大於1,所以一般來說,當數據規模小於10^3時,才能保證一定能在1秒內執行完畢某個算法。
- 當一個算法是O(nlogn),數據規模必須小於10^7,而保險來看,數據規模必須小於10^6。
- 而當一個算法是O(n),數據規模必須小於10^8,而保險來看,數據規模必須小於10^7。