場景一:一根長10寸的麪包,每3天吃掉一寸,那麼吃完整個麪包須要幾天?
答案天然是:3×10=30天
能夠記做:T(n) = 3n算法
場景二:一根16寸的麪包,每5天吃掉剩餘的一半,吃的只剩下1寸,須要多少天?
答案:以2爲底,16的對數,簡寫成log16,因此爲 5×log16 = 20天
能夠記做: T(n) = 5logn函數
場景三:每2天吃掉一個雞腿,那麼吃掉整個雞腿須要多少天?
答案:2天
能夠記做:T(n) = 2get
場景四:一根長10寸的麪包,吃掉第一個一寸須要1天,吃掉第二個1寸須要2天,吃完整個麪包須要多少天?
答案:從1累加到10,共55天
能夠記做:T(n) = 0.5n^2+0.5ntable
這四個場景分別是:線性式、對數式、常量式、多項式qq
好比算法A的相對時間是 T(n)=100n,算法B的相對時間是T(n)=5n^2,到底哪一個運行時間長呢?這要看n的取值tab
官方定義:時間
若存在函數 f(n),使得當 n 趨近於無窮大時,T(n)/f(n) 的極限值爲不等於零的常數,則稱 f(n) 是 T(n) 的同數量級函數
記做 T(n)=O(f(n)) 稱爲O(f(n))爲算法的漸進時間複雜度,簡稱時間複雜度,漸進時間複雜度用大寫 O 表示,因此也被稱爲 大O表示法
如何推導出時間複雜度,有以下幾個原則:co
回頭看上面四個場景block
T(n) = 3n | -> | T(n) = O(n) |
T(n) = 5logn | -> | T(n) = O(logn) |
T(n) = 2 | -> | T(n) = O(1) |
T(n) = 0.5n^2+0.5n | -> | T(n) = O(n^2) |
文章:什麼是時間複雜度?ps