資料結構 插值查詢(演算法)

2021-10-02 07:07:54 字數 1153 閱讀 3108

插值查詢演算法類似於二分查詢,所以陣列同樣要求必須有序,不同的是插值查詢每次從自適應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...