算法時間複雜度的定義:
在進行算法分析時,語句總的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級,也就是算法的時間量度,記作:T(n)=O(f(n)).它表示隨着問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間複雜度,簡稱爲時間複雜度。f(n)爲問題規模n的函數。
這樣用大寫O()來體現算法時間複雜度的記法稱爲“大O記法”。
推到大O階方法:
1、用常數1取代運行時間中的所有加法常數。
2、在修改後的運行次數函數中,只保留最高階項。
3、如果最高階項存在且不是1,則去除與這個項相乘的常數。
得到的結果就是大O階。
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < m; ++j)
{
//時間複雜度爲O(1)的程序步驟序列
}
}
執行次數f(n) = n x m,因此可得時間複雜度爲O( n x m)常見的時間複雜度:
12 —> O(1);2n+3 —> O(n);3n^2+2n+1—> O(n^2);12logn + 2 —> O(logn);12 n + 4nlogn+18—> O(nlogn);12n^3 + 4n^2 + n ——> O(n^3);12^n —> O(12^n)
常用時間複雜度耗費時間大小:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
算法空間複雜度:
算法空間複雜度通過計算算法所需要的存儲空間實現,算法空間複雜度的計算公式:S(n) = O(f(n)),其中,n爲問題的規模,f(n)爲語句關於n所佔存儲空間的函數。