算法複雜度中的O(logN)底數是多少

前言

     不管是計算機算法概論、仍是數據結構書中,關於算法的時間複雜度不少都用包含O(logN)這樣的描述,可是卻沒有明確說logN的底數到底是多少。算法中log級別的時間複雜度都是因爲使用了分治思想,這個底數直接由分治的複雜度決定。若是採用二分法,那麼就會以2爲底數,三分法就會以3爲底數,其餘亦然。算法

     不過不管底數是什麼,log級別的漸進意義是同樣的。也就是說該算法的時間複雜度的增加與處理數據多少的增加的關係是同樣的。數據結構

     咱們先考慮O(logx(n))和O(logy(n)),x!=y,咱們是在考慮n趨於無窮的狀況。求當n趨於無窮大時logx(n)/logy(n)的極限能夠發現,極限等於lny/lnx,也就是一個常數,也就是說,在n趨於無窮大的時候,這兩個東西僅差一個常數。因此從研究算法的角度log的底數不重要。最後,結合上面,我也說一下關於大O的定義(算法導論28頁的定義),注意把這個定義和高等數學中的極限部分作比較,顯然能夠發現,這裏的定義正是體現了一個極限的思想,假設咱們將n0取一個很是大的數字,顯然,當n大於n0的時候,咱們能夠發現任意底數的一個對數函數其實都相差一個常數倍而已。因此書上說寫的O(logn)已經能夠表達全部底數的對數了,就像O(n^2)同樣。沒有很是嚴格的證實,不過我以爲這樣說比較好理解,若是有興趣證實,徹底能夠參照高數上對極限趨於無窮的證實。函數

from : 《劍指offer》spa

 

 

若算法的 T(n) = O(log n),則稱其具備對數時間。因爲計算機使用二進制的記數系統,對數經常以10爲底(即log10 n,有時寫做 lg n)。然而,由對數的換底公式,loga n和 logb n只有一個常數因子不一樣,這個因子在大O記法中被丟棄。所以記做O(log n),而不論對數的底是多少,是對數時間算法的標準記法。
 
from: 知乎
相關文章
相關標籤/搜索