插值查詢演算法的公式和實現

2021-10-23 10:43:48 字數 1121 閱讀 6755

1.插值查詢類似二分查詢,不同的是插值查詢不在是簡單的每次區中間的數進行比較,插值查詢每次從自適應mid處開始查詢,使用乙個公式來進行下標的定位,通過這個公式可以較為精確的在乙個順序的陣列中大概的定位到要查詢元素的位置.

2.插值查詢主要解決的問題就是:比如乙個[1,2,3,4,5,6,7,8]這樣的順序陣列,我如果想找的元素是1,那麼我通過二分查詢需要比較查詢3次,反而比傳統的遍歷,比較的次數還多,插值查詢主要就是解決這種問題

3.插值查詢通過將乙個公式,這個公式是結合要查詢的值,將這個值帶入運算,利用斜率,大體的求出該值在順序陣列中的位置

1.將原本二分查詢中的求mid 索引的公式進行修改, low 表示左邊索引left, high表示右邊索引right.key 就是要找的值;

原本二分查詢的確定中間值的公式:

替換為新的插值查詢的公式:

)left為左邊的索引下標,right為右邊的索引下標,findval代表要找的值.

如:開頭要找的陣列,left = 0 , right = 7 ,findval = 1 ,帶入公式為:

int mid = 0 + (7 - 0) * (1 - 1)/(8 - 0) = 0 ;

可以看到經過一次計算,直接就得出了1的下標,只進行了一次查詢就可以找到

public

class

inertvaluesearch

if(arr[mid]

> findval)

else

if(arr[mid]

< findval)

else

if(arr[mid]

== findval)

else

}}

插值查詢演算法

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

插值查詢演算法

在均勻分布的有序數列中,會比二分查詢次數少很多 思想跟二分查詢一直,都是找到其中乙個值,小了往左找,大了往右找 區別是 也跟二分查詢差不多,就公式不同,不過因為公式複雜了一些,需要一些判斷條件來保證它的正確性 public static int binarysearch int arr,int ke...

插值查詢演算法

插值查詢演算法 有序陣列 插值查詢原理介紹 插值查詢演算法類似於二分查詢,不同的是插值查詢每次從自適應 mid 處開始查詢。將折半查詢中的求 mid 索引的公式 low 表示左邊索引 left,high 表示右邊索引 right.key 就是前面我們講的 findval int mid low hi...