最近有好幾學生問我,無論是計算機演算法概論、還是資料結構書中,
關於演算法的時間複雜度很多都用包含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)一樣。
沒有非常嚴格的證明,不過我覺得這樣說比較好理解,如果有興趣證明,完全可以參照高數上對極限趨於無窮的證明。
時間複雜度中的log(n)底數到底是多少?
原文 其實這裡的底數對於研究程式執行效率不重要,寫 時要考慮的是資料規模n對程式執行效率的影響,常數部分則忽略,同樣的,如果不同時間複雜度的倍數關係為常數,那也可以近似認為兩者為同一量級的時間複雜度。讀者只需要掌握 依稀記得 中學數學知識就夠了。假設有底數為2和3的兩個對數函式,如上圖。當x取n 資...
演算法時間複雜度中O logN 的底數是多少
經常在演算法書籍中看到logn的身影,那麼這個對數的底數是多少呢?weiss 在他的著作 資料結構與演算法分析 中曾指出 在電腦科學中,除非有特殊的說明,否則所有的對數都是以2為底的。不過無論底數是什麼,log級別的漸進意義是一樣的。也就是說該演算法的時間複雜度的增長與處理資料多少的增長的關係是一樣...
演算法時間複雜度空間複雜度
演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...