算法複雜度--時間複雜度,空間複雜度

算法時間複雜度的定義:

在進行算法分析時,語句總的執行次數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所佔存儲空間的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章