時間複雜度是學習算法的基石,今天咱們來聊聊爲何要引入時間複雜度,什麼是時間複雜度以及如何去算一個算法的時間複雜度算法
某日,慧能叫來了一塵打算給他補習補習一下基礎知識,只見克寫了一段很是簡單的代碼markdown
一塵看老師有點生氣,開始虛心請教了數據結構
爲了方便討論,這裏咱們把每一條語句的執行時間都看作是同樣的,記爲一個時間單元函數
① 藍色框的兩條語句,花費兩個時間單元oop
②黑色框的一條語句,花費n+1個時間單元學習
③紅色框的兩條語句,花費2*n個時間單元spa
這不是數學嗎,一塵內心想到設計
其中的n被咱們稱爲問題的規模,其實就是你處理問題的大小3d
慧能順手畫了這個函數的圖code
本文主要討論問題規模和運行時間的關係,假定不一樣輸入和運行時間基本無關
好比說:T(n)=3n+3, 當n很是大的時候常數3和n的係數3對函數結果的影響就很小了
好比:
T(n)=n+1 忽略常數項 T(n)~n
T(n)=n+n^2 忽略低階項 T(n)~n^2
T(n)=3n 忽略最高階的係數 T(n)~n
還好不用掌握那頭疼的數學,一塵心中想到
一塵把話題又拉了回來
更準確地說O表明了運行時間函數的一個漸進上界,即T(n)在數量級上小於等於f(n)
1、得出運行時間的函數 2、對函數進行簡化
①用常數1來取代運行時間中全部加法常數
②修改後的函數中,只保留最高階項 ③若是最高階項存在且不是1,則忽略這個項的係數
O(1)也被稱爲常數階
一塵隨手寫了一段嵌套循環的代碼
接着,慧能又寫了一段時間複雜度爲對數的代碼
一貫數學不太好的一塵此時有點懵
另外,關於數據結構與算法的學習,能夠看這本 PDF,把各類算法模版都總結好了,跟着學就行: