時間復雜度
要理解時間復雜度,需要先理解時間頻度。
一個算法中 語句執行的次數 稱作語句頻度(時間頻度)。記作T(n)。
那么時間復雜度如下定義:
若某個輔助函數f(n),使得當n趨近于無窮大時,T(n)/f(n) 的極限值為不等于零的常數,那么稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),并且,稱O(f(n))為算法的漸進時間復雜度,簡稱時間復雜度。
舉例
example1
int x = 1; //時間復雜度O(1)
for(int i = 0; i<n; i++){
system.out.println(i);
} //時間復雜度O(n)
example2
int n=100, count=0;
for(int i=0; i<=n; i*=2){
for(int j=1; j<=n; j++){
count++;
}
} //復雜度O(nlog2n) -> 最外層log2n與內層n相乘
拓展:N與NP問題
Ο(2^n)<Ο(n!)為指數時間復雜度,稱為NP(Non-Deterministic Polynomial, 非確定多項式)類問題。
Ο(log2n),Ο(n),Ο(nlog2n),Ο(n^2)為P類問題,該算法為有效算法。
空間復雜度
運行完一個程序所需內存的大小。也可以簡單理解為臨時變量占用的存儲空間。
舉例
example
//該程序的空間復雜度為O(1)
int x=1, y=2;
int temp=x;
x=y;
y=temp;