複雜度O(f(n))中用的數學知識
從小到大排序
計算次數表示方式 | 計算公式示例 |
---|---|
1 | 1 |
logn | log24 = 2 ; log28 = 3 |
n | n |
nlogn | 8log28 = 8*3 = 24 |
n2 | n2 |
算法中爲什麼會用到 log
示例 | 計算演變 | 結果 |
---|---|---|
log28 | log223 | 3 |
log216 | log224 | 4 |
log39 | log332 | 2 |
log327 | log333 | 3 |
在算法中,有二分法、三分法 最終被劃分多少次完成任務 , 用log的計算結果可以很清晰的表示出來拆分用的最大次數
算法中 logn 的底數到底是多少
算法中log級別的時間複雜度都是由於使用了分治思想,這個底數直接由分治的複雜度決定。
如果採用二分法,那麼就會以2爲底數,三分法就會以3爲底數,其他亦然。
不過無論底數是什麼,log級別的漸進意義是一樣的。
也就是說該算法的時間複雜度的增長與處理數據多少的增長的關係是一樣的。
我們先考慮O(logx(n))和O(logy(n)),x!=y,我們是在考慮n趨於無窮的情況。
求當n趨於無窮大時logx(n)/logy(n)的極限可以發現,極限等於lny/lnx,也就是一個常數,
也就是說,在n趨於無窮大的時候,這兩個東西僅差一個常數。
所以從研究算法的角度log的底數不重要。