1. 程式人生 > >為什麼使用二分查詢的速率要比按其他比例分割的查詢速率要快???

為什麼使用二分查詢的速率要比按其他比例分割的查詢速率要快???

在說任意比例分割查詢之前我們先來談談黃金分割查詢與二分查詢:

在二分查詢中,我們是取中旬等於左向右和的中間值,即用等分的方法進行查詢。

那為什麼一定要等分吶?能不能進行“黃金分割”?也就是中間=左+ 0.618(右 - 左),當然中間要取整數。

我們來分析一下,假設有一段1米長的繩子,其中有Ñ個點,我們找其中的一個點的話,我們按黃金分割比例分割來的話,數學期望是0.618 * 0.618 + 0.382 * 0.382 = 0.528,即每次要查詢的點應該為N * 0.528

而二分查詢的數學期望是0.5,每次查詢的點應該是N * 0.5,很明顯二分查詢的點會比黃金比例分割查詢的點會少

二分查詢的時間複雜度與黃金分割查詢的時間複雜度:

二分查詢的時間複雜度為:O(n)=log_2(n)(因為每次都是除於2)

黃金分割查詢的時間複雜度為:O(n) = log____(1.89)(n)(每次除於1.89)

根據底數相同,指數不同的比較,很容易發現黃金分割時間複雜度的這條函式是在二分查詢上面的,所以時間複雜度的話二分查詢更少一些

按任意比例分割與二分進行查詢

假設分割一段的比例的概率是P,那麼另一段的概率為(1-P),我們假設還是有一米的繩子,在繩子上來找某一點

數學期望為:P * P +(1-P)×(1-P),根據二次函式我們很容易發現要使數學期望最小(換句話說就是使查詢的點更少的話),對應該等於1 / 2,p = 1/2時正好是使用了二分查詢,所以二分查詢其實是最快的