算法複雜度中的O(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)一樣。
沒有非常嚴格的證明,不過我覺得這樣說比較好理解,如果有興趣證明,完全可以參照高數上對極限趨於無窮的證明。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章