關於二分查詢峰值的一點思考

2021-10-04 16:56:05 字數 891 閱讀 7141

leetcode162尋找峰值。利用二分法**很簡潔

class

solution

else

}return h;}}

;

這裡想說明一下,最後return這裡,返回h和l是一樣的,也就是最後下標會指向同乙個元素。為什麼會這樣,可以分析一下。

首先看mid是除以二取floor 設區間下標為low,上標為low+n那麼 mid

=(2∗

low+

n)/2

floo

rmid=(2*low+n)/2_

mid=(2

∗low

+n)/

2flo

or​。這個n是整數,如果大於1,那麼顯然有low

d

gh

lowlo

wdgh

;如果等於1,那麼由於取floor忽略小數部分,有low

<=m

id

gh

low<=midlo

w<=m

idgh

所以最後得到low

<=m

id

gh

low<=midlo

w<=m

idgh

這裡對應的兩種情況,

第一種情況high=mid這樣取值之後,由於上面的不等式,high』>=low

第二種情況low=mid+1,由於這裡low mid high都是整數,有low』<=high

我們的結論就是,無論是哪一種情況,每次改變上界或下界後,都不可能出現改變後的上界小於下界,或改變後的下界大於上界的情況,那麼,最後兩個邊界一定只能相等。

二分查詢的一點改進優化

傳統的二分查詢是直接讓陣列的最大座標與最小座標之和除以二求得的mid 但是有一種情況值得考慮 例如大家要用字典查詢單詞amuse 那麼大家會翻字典中間嗎?會每次都翻中間去尋找嗎?肯定是直接翻前面的頁去尋找這個單詞。加入有1 到1000000個數近似均勻分布,那麼大家找100時再從中間那樣遞迴是不是會...

關於二分搜尋中間點的一點感想

今天覆習到二分搜尋。在鄧俊輝老師的資料結構中,有序向量二分搜尋的函式頭形式如下 templatestatic rank binsearch t a,t const e,rank lo,rank hi 其中要搜尋的範圍是乙個左閉右開區間。lo,hi 其中的乙個問題常常困惑我,究竟這個中間的數取什麼位置...

有關二分法的一點思考

前幾天看到乙個學習演算法的資源。其中講到二分法,提到了用二分搜尋技術查詢已經排好序的n個元素中的某個元素。本身是很簡單的。但是後面有乙個思考題,提到如何使用二分法求a的n次方。但沒有給出答案。我想了一會兒,不會。但是又想了一會兒,突然有思路了。二分法其實是一種分治的思想,分而治之。找到他們最小部分的...