聯想一下自己在字典中查詢單詞的經歷,我們肯定不會使用折半查詢,因為對於分布有規律的單詞而言,我們有更好的方式。我們會使用大腦的自適應計算出單詞的大概位置,一步步縮減範圍。類似的對於分布有規律的資料元素來說,我們可以改進一下折半查詢的軸點,不使用中點,而是使其可以根據lo 和 hi的位置上元素的大小進行適當的調整。這就是插值查詢的**。
int insertsearch(list l, keyvalue k, int n)
if (lo == hi)
return -1;
}
總結:
1. 時間複雜度為o(log(logn)), 對於關鍵字分布較均勻的查詢表來說比較適合,可以減少查詢對比次數。
2. 資料元素分布均勻的話可以大大提高查詢的速度,但是資料元素分布不均勻的話,mid的計算其實是有欺騙性的,這種方式不適合。
資料結構 插值查詢(演算法)
插值查詢演算法類似於二分查詢,所以陣列同樣要求必須有序,不同的是插值查詢每次從自適應mid處開始查詢。有序陣列中值與索引之間類似於線性關係,故通過公式求自適應索引。二分查詢中秋mid索引的公式,左邊索引 left,右邊索引 right,待查詢值 findvalue eg 陣列 arr 50 個數 假...
資料結構與演算法 十二 二分查詢和插值查詢
有乙個遊戲最能體現二分查詢的思路 我在紙上已經寫好了100以內的正整數數字,然後請你猜,問最多幾次可以猜出來?這個遊戲的解法就是每次猜數後折取一半,我們把這種每次取中間記錄查詢的方法叫做折半查詢,或二分查詢。二分查詢 binary earch 也稱為折半查詢。它的前提是線性表中的記錄必須是關鍵碼有序...
插值查詢(按比例查詢) 資料結構和演算法70
讓程式設計改變世界 change the world by program 順序查詢演算法的時間複雜度是o n 不算太好,也不能再差了。那有沒有更好的查詢演算法呢?那是必須的!我們接下來繼續介紹效率更高的方法,也是屬於靜態查詢的範疇。話說有一天,小甲魚突發奇想,要回顧下我國的古代四大奇書,大家應該沒...