時間復雜度 O(log n) 意味着什么?


 

 

 

預先知道算法的復雜度是一回事,了解其后的原理是另一件事情。

不管你是計算機科班出身還是想有效解決最優化問題,如果想要用自己的知識解決實際問題,你都必須理解時間復雜度。

先從簡單直觀的 O(1) 和 O(n) 復雜度說起。O(1) 表示一次操作即可直接取得目標元素(比如字典或哈希表),O(n) 意味着先要檢查 n 個元素來搜索目標,但是 O(log n) 是什么意思呢?

你第一次聽說 O(log n) 時間復雜度可能是在學二分搜索算法的時候。二分搜索一定有某種行為使其時間復雜度為 log n。我們來看看是二分搜索是如何實現的。

因為在最好情況下二分搜索的時間復雜度是 O(1),最壞情況(平均情況)下 O(log n),我們直接來看最壞情況下的例子。已知有 16 個元素的有序數組。

舉個最壞情況的例子,比如我們要找的是數字 13。

十六個元素的有序數組

選中間的元素作為中心點(長度的一半)

13 小於中心點,所以不用考慮數組的后一半

重復這個過程,每次都尋找子數組的中間元素

每次和中間元素比較都會使搜索范圍減半。

所以為了從 16 個元素中找到目標元素,我們需要把數組平均分割 4 次,也就是說,

簡化后的公式

類似的,如果有 n 個元素,

歸納一下

分子和分母代入指數

等式兩邊同時乘以 2^k

最終結果

現在來看看「對數」的定義:

為使某數(底數)等於一給定數而必須取的乘冪的冪指數。

也就是說可以寫成這種形式

 

對數形式

所以 log n 的確是有意義的,不是嗎?沒有其他什么可以表示這種行為。

就這樣吧,我希望我講得這些你都搞懂了。在從事計算機科學相關的工作時,了解這類知識總是有用的(而且很有趣)。說不定就因為你知道算法的原理,你成了小組里能找出問題的最優解的人呢,誰知道呢。祝好運!

 

 

https://github.com/xitu/gold-miner/blob/master/TODO/what-does-the-time-complexity-o-log-n-actually-mean.md


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM