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

2021-07-13 18:20:56 字數 691 閱讀 4897

今天覆習到二分搜尋。

在鄧俊輝老師的資料結構中,有序向量二分搜尋的函式頭形式如下

templatestatic rank binsearch(t* a, t const& e, rank lo, rank hi)
其中要搜尋的範圍是乙個左閉右開區間。[lo,hi)

其中的乙個問題常常困惑我,究竟這個中間的數取什麼位置呢?

如圖所示,圖中lo=0, hi = 7,n=7, 那麼中間點應該是下取整【n/2】= 3。

但是這個恰巧的結果是因為陣列下標從0開始的結果。

當然,可以作為結論記住,乙個從0開始的陣列,二分搜尋的中間位置就是下取整【hi/2】

那麼更一般的情況呢?

考慮奇數個數情況

24 578

lolo+1 lo+2lo+3 lo+4lo+5(hi)

中間數的位置為[(lo + 5)+lo]/2的下取整,此處等於lo+2。

所以中間位置是lo+2

偶數個數情況

24 57

lolo+1 lo+2lo+3 lo+4

中間數的位置為[(lo + 4) +lo]/2的下取整,此處等於lo+2.

所以中間位置是lo+2,取在了右半部分。

所以這本教材中應該二分搜尋中間位置取得是

下取整(lo+hi)/2

在筆試題中直介面算即可。

關於遞迴的一點感想

遞迴,方法重複呼叫其自身。對於遞迴,估計是一開始就沒有理解透,經常感覺對遞迴掌握的不夠透,理解的不夠深入。最近做的乙個 要求遍歷產品所對應的每一級目錄,並取得最大的目錄 一級目錄 及最小目錄 沒有子目錄了 當時就自己寫了乙個遞迴方法,居然還成功了,呵呵。其實我個人覺得遞迴就是給定乙個結束迴圈的條件,...

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

leetcode162尋找峰值。利用二分法 很簡潔 class solution else return h 這裡想說明一下,最後return這裡,返回h和l是一樣的,也就是最後下標會指向同乙個元素。為什麼會這樣,可以分析一下。首先看mid是除以二取floor 設區間下標為low,上標為low n那...

關於設計模式的一點感想

過去對於軟體當中復用的思想有概念,但卻沒有太深刻的體會,有時候在 裡面多處呼叫了同乙個函式,就認為這個就是軟體的復用了。甚至和別人一聊起 物件導向 來,也會說到 抽象 繼承 封裝 多型 設計模式 資料結構與演算法 等等名詞,但卻真的沒有一種內心的深刻體驗,也很少想什麼時候應該用 抽象 或 介面 多型...