插值演算法(二分查詢兄弟演算法)

2021-10-09 00:27:29 字數 556 閱讀 5648

設想一下這個情景:有這樣乙個陣列arr=,如果要查詢邊界值1的話,利用二分查詢的效率,似乎不是那麼的高,原因在於,二分查詢每次定位都是在陣列中間,不夠靈活,如果有一種演算法,可以根據要查詢的值,自適應定位,那麼效率顯然就快很多,因而就有了插值演算法,它的公式為:

location = left + k × l

其中,left代表陣列最左邊的下標,l是right - left,即陣列最右下標與最左下標的差值,k是比例係數:

k = (key - arr[left])/(arr[right]- arr[left])

除了定位演算法不同,其他部分都是相同的,話不多說,上**:

//預設公升序

public

static

intinsertvaluesearch

(int

array,

int left ,

int right,

int key)

else

if(key > locationvalue)

else

}

查詢演算法之二分查詢 插值查詢

對半查詢和斐波那契查詢對於元素關鍵字的整體分布沒有要求,可以均勻分布,也可以不均勻分布。對於關鍵字分布不均勻且沒有規律的情況,確實很難找到更好的方法提高演算法的查詢效率 但是如果查詢序列的關鍵字分布均與,那麼是可以利用這種均勻性來提高演算法效率的,例如使用插值查詢。在關鍵字值分布均勻的情況下,使用插...

二分查詢及插值查詢

二分查詢和插值查詢都是基於減而治之的原理 1 細節 二分查詢的範圍的下標 lo和hi代表 lo,hi 因此,選擇mid的時候,兩部分是 lo,mid 和 mid 1,hi 插值查詢的含義類似於在字典中確定乙個字母的範圍,比如選擇b的話,會在較前的頁碼處查詢,這裡,字母相當於陣列的下標,而頁碼相當於要...

二分查詢與插值查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。1 確定排序好的陣列的中間位置mid left right 2 left 0,right n 1 將陣列分為兩部分。2 用要t mid ...