設想一下這個情景:有這樣乙個陣列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 ...