算法筆記(一)——簡述時間、空間複雜度分析

       前段時間經過小詹隨筆分享的連接在極客時間購買了王爭老師的《數據結構與算法之美》的課程,小詹學長果然是一個很靠譜的學長,凡是經過他的連接購買的課程,以後建有微信羣,相互監督學習並分享學習筆記打卡。所以,在此,爲表示對小詹學長的感謝,也簡單介紹一下「小詹學Python」公衆號,小詹學長是一名雙一流高校在讀研究生,專研c++,python,主要研究圖像處理、計算機視覺和機器學習相關知識,按期帶你打卡刷leetcode,鍛鍊編程能力。有興趣的能夠關注他哦~~python

     下面就開始本次的正題啦~~c++

  首先,咱們須要明白數據結構與算法的大體概念。通俗講,數據結構就是數據的一種存儲結構,而算法就是操做這些數據的方法。數據結構爲算法服務,算法做用在數據結構之上。那麼,論及數據結構與算法,就離不開對時間、空間的複雜度分析了。算法

  其次,咱們爲何要進行復雜度分析呢?簡單講,那確定是用戶體驗和對數據自己處理的優化咯。畢竟,若是數據庫裏面若是有幾百萬條數據,挨個搜索查找,這樣的等待時間是會讓用戶崩潰的。因此,複雜度分析固然須要重點分析。數據庫

  最後,複雜度分析包含哪幾個點呢?編程

  空間、時間複雜度統一使用大O階表示法,全部代碼的執行時間T(n)均與數據規模成正比:T(n)=O(f(n))。微信

  (一)時間複雜度:數據結構

  時間複雜度即爲運行一個程序的時間,大體可分爲:多項式量級、非多項式(NP)量級。機器學習

  1.多項式量級——隨着數據規模的增加,算法的執行時間和空間佔用統一呈多項式規律增加:函數

  常數階O(1)、對數階O(logn)、線性階O(n)、線性對數階O(n*logn)、冪次階(平方階O(n.^2)、立方階O(n.^3)、四次方O(n.^4)...)學習

  2.非多項式量級——隨着數據量n的增加,時間複雜度急劇增加,執行時間無限增長:

  指數階O(2.^n)、階乘階O(n!)

  圖形比較就爲以下:

  

  •   下面再說說時間複雜度的計算法則:

  1.單段代碼看高頻:好比循環。

  2.多段代碼取最大:好比單循環+雙循環,那麼就取複雜度最大的雙循環做爲該程序的複雜度。

  3.嵌套代碼用乘法:一個函數中嵌套另外一個函數,那麼他們之間的複雜度=O(f(n1))*O(f(n2)),例如遞歸等。

  4.多個規模用加法:好比兩個參數利用了兩個循環函數,那麼他們程序的複雜度O(n)=O(n1)+O(n2)。

  (二)空間複雜度:

  空間複雜度即佔用某個存儲空間的大小,例如:

void print(int n) {
    int i = 0;
    int[] a = new int[n];
    for(i;i<n;++i){
         a[i] = i*i;    
    }
}
    

 

  上面的空間複雜度就爲O(n)了。

  整體來講,時間複雜度分析較爲繁瑣,須要着重掌握一下,空間複雜度就顯得較爲簡單啦。

相關文章
相關標籤/搜索