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


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

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

  首先,我們需要明白數據結構與算法的大致概念。通俗講,數據結構就是數據的一種存儲結構,而算法就是操作這些數據的方法。數據結構為算法服務,算法作用在數據結構之上。那么,論及數據結構與算法,就離不開對時間、空間的復雜度分析了。

  其次,我們為什么要進行復雜度分析呢?簡單講,那肯定是用戶體驗和對數據本身處理的優化咯。畢竟,如果數據庫里面如果有幾百萬條數據,挨個搜索查找,這樣的等待時間是會讓用戶崩潰的。所以,復雜度分析當然需要重點分析。

  最后,復雜度分析包含哪幾個點呢?

  空間、時間復雜度統一使用大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)了。

  總體來說,時間復雜度分析較為繁瑣,需要着重掌握一下,空間復雜度就顯得較為簡單啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM