傳統的二分查詢是直接讓陣列的最大座標與最小座標之和除以二求得的mid
但是有一種情況值得考慮: 例如大家要用字典查詢單詞amuse 那麼大家會翻字典中間嗎?會每次都翻中間去尋找嗎?肯定是直接翻前面的頁去尋找這個單詞。 加入有1 到1000000個數近似均勻分布,那麼大家找100時再從中間那樣遞迴是不是會慢很多?那麼我們就需要改變mid的計算方法去優化尋找key(關鍵值)的步驟。
只需做乙個優化如下:
mid = front + (key-a[front])/(a[end]-a[front])*(end-front);//(end為最大座標,front為最小座標)
這樣如果陣列中元素分布近似均勻,那麼就可以比課堂上哪一種快很多,但是不均勻時也並不快,所以使用時就要合理取捨了。
關於二分查詢峰值的一點思考
leetcode162尋找峰值。利用二分法 很簡潔 class solution else return h 這裡想說明一下,最後return這裡,返回h和l是一樣的,也就是最後下標會指向同乙個元素。為什麼會這樣,可以分析一下。首先看mid是除以二取floor 設區間下標為low,上標為low n那...
二分查詢法及改進
二分查詢演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 在本篇文章中為了說明問題的方便,假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到...
二分查詢以及改進演算法
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...