插值查詢 插值搜尋

2021-08-30 13:03:47 字數 958 閱讀 6123

這是一種和二分比較相似的查詢的演算法, 不過不同的是, 對於分布比較均勻的較大的陣列, 插值查詢有時能夠一次就搜尋到位..

為什麼能夠這麼快呢`? 看網上沒有什麼關於這種演算法的描述, 我就來描述一下吧.

首先要知道一點, 這種搜尋方式只能夠針對順序表進行,, 再乙個要理解順序表中的乙個特點, 在順序表中查詢是否存在乙個值, 此時我可以對順序表中的任意乙個元素進行比較, 如果我要在a中尋找值為t的元素是否存在, 那麼我用a[i]和t進行比較, (a[i]可以是順序表中任意乙個元素..), 如果a[i]==t的話, i就是t所在的位置, 如果a[i] > t, 那麼說明t一定不在在a[i], a[i+1]....a[n-1], a[n]... 也就是說現在只需要對a[1]..a[i-1]進行搜尋即可..

好好理解一下吧, 如果上面的理解不了, 那麼插值查詢就不好理解..

接下來我用low和high來儲存該搜尋的範圍, 在剛開始low=0, hight=n-1. 設i是在low到high之間的相對位置.. 如: 若 i= 0, low = 0, 那麼就該讓t和a[i + low]比較, 即判斷t是否和a[0]相等..

現在就是要確定i在**了..

假設順序表的分布比較均勻, 那麼有下面的方程:

(t - a[low]) : (i + low) = (a[high] - a[low]) : (high - low)

i = (t - a[low]) * (high - low) / (a[high] - a[low]) + low;

差不多了吧...

我的語言表達能力有限, 若還不大理解, 就看**吧:

/* a是待搜尋的順序表,, size是a的長度, t 是待搜尋的值 */

int search(int a, int size, int t)

if(a[pos] > t)else

}return -1;

}

查詢 插值查詢

插值查詢 插值查詢法的演算法思想 插值查詢法其實就是折半查詢法的加強優化版,它對mid的演算法進行了重新的規定,使此查詢法的效率更高。mid low high low key a low a high a low 插值查詢法的演算法可描述如下 int search keytype key,int n...

查詢 插值查詢

問題描述 通過插值查詢,查詢乙個數在給定陣列中是否存在,若存在找到位置索引,不存在返回 1 給定陣列中的數值都不相等 演算法實現 privat int interpolationsearch int arr,int lo,int hi,int key int mid lo hi lo key arr...

插值查詢演算法

插值查詢演算法是基於二分查詢演算法的,只是在查詢的過程中計算middle的方式有所改變,比如一組可以通過二分查詢演算法計算出的nmid索引的值,是這樣子計算的 nmid nlow nhigh 2,但是插值查詢演算法是根據比率算出的,nmid nlow key narr nlow narr nhigh...