查詢演算法之二分查詢 插值查詢

2021-10-23 02:18:23 字數 1336 閱讀 6998

對半查詢和斐波那契查詢對於元素關鍵字的整體分布沒有要求,可以均勻分布,也可以不均勻分布。對於關鍵字分布不均勻且沒有規律的情況,確實很難找到更好的方法提高演算法的查詢效率;但是如果查詢序列的關鍵字分布均與,那麼是可以利用這種均勻性來提高演算法效率的,例如使用插值查詢。

在關鍵字值分布均勻的情況下,使用插值查詢可以提高效率,那插值查詢的原理是怎樣的?下面舉乙個例子:

關鍵字246

8101214

1618

20元素值

1112

1513

1416

1820

2524

這組序列的關鍵字在2~20之間均勻分布,這時如果要查詢關鍵字為18的元素值,是不是可以直接計算出關鍵字為18的元素的儲存位置呢?

用陣列來儲存這組序列:

陣列下標01

2345

6789

關鍵字246

8101214

1618

20元素值

1112

1513

1416

1820

2524

用 (18-2)/(20-2) 可以計算出關鍵字18在整個關鍵字序列中的相對位置,是在關鍵字序列的 8

9\frac89

98​位置,然後用這個相對位置乘上整個序列長度,即(18-2)/(20-2)*(9-0),就可以轉換為該關鍵字在子表中的相對位置,當然這個式子嚴格意義上並不完整,完整的應該是 (18-2)/(20-2)*(9-0)+0。

所以在插值查詢演算法中的i

ii的計算公式為:

i =l

ow+k

ey−k

lowk

high

−klo

w∗(h

igh−

low)

i = low+\frac}-k_}\ast(high-low)

i=low+

khig

h​−k

low​

key−

klow

​​∗(

high

−low

)這是個極端例子,關鍵字是完全均勻分布的,所以只需計算一次i

ii值就可以查詢到對應元素;但是這種情況極為少見,更多的是相對均勻的情況,一次計算並不能解決,這時仍然要採用二分查詢的策略,將查詢範圍一步步劃分為更小的子表。

從這個例子來看,在關鍵字值分布均勻的情況下,插值查詢的平均效能優於對半查詢;但是如果關鍵字值分布非常不均勻的情況下,插值查詢的平均效能會差很多。

本篇完 ?

二分查詢及插值查詢

二分查詢和插值查詢都是基於減而治之的原理 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 ...

查詢演算法之 二分查詢

這個例項給出了二叉搜尋演算法在9個元素的陣列arr中查詢某個目標值的過程01 2345 678 7 35812 1623 3355 例子1 查詢目標值2301 2345 678 7 35812 1623 3355 步驟1 索引範圍 0,9 索引first 0,last 9,mid 0 9 2 4 t...