複雜度的詳細解釋

因爲工作的原因,重新拾起了數據結構,畢竟它的地位對於一名程序員來說舉足輕重,對於即將畢業的自己,也是決定把所有模糊的定義弄明白,爲以後打好基礎。所以寫下人生中第一篇原創博客,作爲紀念。
複雜度分爲兩種,1)時間複雜度;2)空間複雜度;
一.算法時間複雜度
1.定義:在進行算法分析時,語句總的執行次數T(n)是關於問題規模 n 的函數,進而分析T(n)隨 n 的變化情況並確定T(n)的數量級。算法的時間複雜度,也就是算法       的時間度量,記作:T(n)=O(f(n))。它表示歲問題規模 n 的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的監禁時間複雜度,簡稱爲時間                         複雜度。 其中f(n)的增長率相同,成爲算法的監禁時間複雜度,簡稱時間複雜度。其中f(n)是問題規模 n 的某個函數。 
2.大O記法:

      用大寫的O()來體現算法時間複雜度的記法,我們稱之爲大O記法。
              常數階:O(1);
      線性階:O(n);

      平方階:O(n^2);
                      對數階:O(log m N);


    3.推導大O階方法:

                       1.用常數 1 取代運行時間中的所有加法常數。

                       2.在修改後的運行次數函數中,只保留最高階項。

       3.如果最高階項存在且不是1,則去除與這個項相乘的常數。

  得到的結果就是大O階。

       總的執行次數爲:n+(n-1)+(n-2)+...+1=n(n+1)/2=n^2/2+n/2;
                       使用上述三條進行推導:1:沒有加法的常數,所以不用考慮;
       2:只保留最高階,因此保留n^2/2;
       3:去除這個項相乘的常數,也就是去除1/2,最終這段代碼的時間複雜度爲O(n^2)。
                       常見的時間複雜度: 

      執行次數        階  數   非正式術語 
12 O(1) 常數階
2n+3 O(n) 線性階
3n^2+2n+1 O(n2) 平方階
5log2 n+20 O(logn) 對數階
n+3nlog2+1  O(nlogn) nlogn階
n^2+n+4 O(n^2) 立方階
2^n O(2^n) 指數階

O(1)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2^n)<O(n!)<O(n^n)

                        時間複雜度分爲:1)平均時間複雜度;2)最壞時間複雜度;
                        二.算法的空間複雜度
                        算法的空間複雜度的計算公式記作:S(n)=O(f(n)),其中,n爲問題的規模,f(n)爲語句關於 n 所佔存儲空間的函數。




                        







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