插值查詢(按比例查詢)

2021-10-04 10:38:14 字數 814 閱讀 7600

插值查詢的乙個最簡單案例就是查字典,查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...