插值查詢的乙個最簡單案例就是查字典,查abandon的時候,我們都是從最前面開始找的,不可能從字母m開始,然後再用二分查詢吧?
插值查詢就是根據要查詢的關鍵字 key 與查詢表中最大最小記錄的關鍵字比較後的查詢方法,其核心在於插值的計算公式,如圖:
粗俗理解:目標陣列大概在陣列的幾分之幾的位置(畫個相似三角形就能理解,資料排列成的類線性直線作為斜邊)
逼格高點:自適應梯度下降
值得注意的是:插值查詢也有其不適合的場景,就是數值分布不均勻的時候,即數值增長非線性時使用插值查詢的方式效率不一定比二分查詢高。
**:
public
static
intinsertvaluesearch
(int
arr,
int left,
int right,
int findval)
// 求出mid, 自適應
int mid = left +
(right - left)
*(findval - arr[left])/
(arr[right]
- arr[left]);
int midval = arr[mid];if
(findval > midval)
else
if(findval < midval)
else
}
插值查詢(按比例查詢) 資料結構和演算法70
讓程式設計改變世界 change the world by program 順序查詢演算法的時間複雜度是o n 不算太好,也不能再差了。那有沒有更好的查詢演算法呢?那是必須的!我們接下來繼續介紹效率更高的方法,也是屬於靜態查詢的範疇。話說有一天,小甲魚突發奇想,要回顧下我國的古代四大奇書,大家應該沒...
查詢 插值查詢
插值查詢 插值查詢法的演算法思想 插值查詢法其實就是折半查詢法的加強優化版,它對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...