插值查詢演算法類似於二分查詢,所以陣列同樣要求必須有序,不同的是插值查詢每次從自適應mid處開始查詢。
有序陣列中值與索引之間類似於線性關係,故通過公式求自適應索引。二分查詢中秋mid索引的公式,左邊索引 left,右邊索引 right,待查詢值 findvalue
eg:陣列 arr = 50 個數:
假如我們查詢:3
array[1] = 3
假如我們查詢:91
array[45] = 91
public class insertsearchutil ;
// int value = 10;
int value = 8;
int index = insertsearchvalue(array, 0, array.length-1, value);
system.out.printf(" %d 的位置是:%d\n", value, index);
}/**
* 插值查詢法獲取查詢元素
** @param array 陣列(必須有序)
* @param left 起始位置
* @param right 結束位置
* @param findvalue 待查詢的值
*/public static int insertsearchvalue(int array, int left, int right, int findvalue)
/*獲取中間值公式*/
int mid = left + (right - left) * (findvalue - array[left]) / (array[right] - array[left]);
int midvalue = array[mid];
if (findvalue < midvalue) else if (findvalue > midvalue) else }}
對於資料量打,關鍵字分部比較均勻的查詢來說,採用插值查詢,速度較快關鍵字分部不均勻的情況下,該方法不一定比二分查詢要好
查詢第乙個指定值、最後乙個指定值或全部指定值的思路與二分查詢的思路一致。詳見資料結構——二分查詢(演算法)
資料結構與演算法(11)插值查詢
聯想一下自己在字典中查詢單詞的經歷,我們肯定不會使用折半查詢,因為對於分布有規律的單詞而言,我們有更好的方式。我們會使用大腦的自適應計算出單詞的大概位置,一步步縮減範圍。類似的對於分布有規律的資料元素來說,我們可以改進一下折半查詢的軸點,不使用中點,而是使其可以根據lo 和 hi的位置上元素的大小進...
插值查詢(按比例查詢) 資料結構和演算法70
讓程式設計改變世界 change the world by program 順序查詢演算法的時間複雜度是o n 不算太好,也不能再差了。那有沒有更好的查詢演算法呢?那是必須的!我們接下來繼續介紹效率更高的方法,也是屬於靜態查詢的範疇。話說有一天,小甲魚突發奇想,要回顧下我國的古代四大奇書,大家應該沒...
插值查詢演算法
插值查詢演算法是基於二分查詢演算法的,只是在查詢的過程中計算middle的方式有所改變,比如一組可以通過二分查詢演算法計算出的nmid索引的值,是這樣子計算的 nmid nlow nhigh 2,但是插值查詢演算法是根據比率算出的,nmid nlow key narr nlow narr nhigh...