1. 程式人生 > >時間複雜度中O(log n) Log的底數是多少

時間複雜度中O(log n) Log的底數是多少

其實這裡的底數對於研究程式執行效率不重要,寫程式碼時要考慮的是資料規模n對程式執行效率的影響,常數部分則忽略,同樣的,如果不同時間複雜度的倍數關係為常數,那也可以近似認為兩者為同一量級的時間複雜度。

現在來看看為什麼底數具體為多少不重要?
讀者只需要掌握(依稀記得)中學數學知識就夠了。

假設有底數為2和3的兩個對數函式,如上圖。當X取N(資料規模)時,求所對應的時間複雜度得比值,即對數函式對應的y值,用來衡量對數底數對時間複雜度的影響。

比值為log2 N / log3 N,運用換底公式後得:(lnN/ln2) / (lnN/ln3) = ln3 / ln2,ln為自然對數,顯然這三個常數,與變數N無關。

用文字表述:演算法時間複雜度為log(n)時,不同底數對應的時間複雜度的倍數關係為常數,不會隨著底數的不同而不同,因此可以將不同底數的對數函式所代表的時間複雜度,當作是同一類複雜度處理,即抽象成一類問題。

當然這裡的底數2和3可以用a和b替代,a,b大於等於2,屬於整數。a,b取值是如何確定的呢?

有點程式設計經驗的都知道,分而治之的概念。排序演算法中有一個叫做“歸併排序”或者“合併排序”的演算法,它用到的就是分而治之的思想,而它的時間複雜度就是N*logN,此演算法採用的是二分法,所以可以認為對應的對數函式底數為2,也有可能是三分法,底數為3,以此類推。

但是不可能是分數或者負數。

說明:為了便於說明,本文時間複雜度一概省略 O 符號。
--------------------- 
作者:城市中的遊牧民族 
來源:CSDN 
原文:https://blog.csdn.net/bengxu/article/details/80320546 
版權宣告:本文為博主原創文章,轉載請附上博文連結!