日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

插值查找(按比例查找)

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插值查找(按比例查找) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插值查找的一個最簡單案例就是查字典,查abandon的時候,我們都是從最前面開始找的,不可能從字母m開始,然后再用二分查找吧?
插值查找就是根據要查找的關鍵字 key 與查找表中最大最小記錄的關鍵字比較后的查找方法,其核心在于插值的計算公式,如圖:
粗俗理解:目標數組大概在數組的幾分之幾的位置(畫個相似三角形就能理解,數據排列成的類線性直線作為斜邊)
逼格高點:自適應梯度下降

值得注意的是:插值查找也有其不適合的場景,就是數值分布不均勻的時候,即數值增長非線性時使用插值查找的方式效率不一定比二分查找高。
代碼:

public static int insertValueSearch(int[] arr, int left, int right, int findVal) {//注意:findVal < arr[0] 和 findVal > arr[arr.length - 1] 必須需要//否則得到的 mid 可能越界if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {return -1;}// 求出mid, 自適應int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);int midVal = arr[mid];if (findVal > midVal) { // 說明應該向右邊遞歸return insertValueSearch(arr, mid + 1, right, findVal);} else if (findVal < midVal) { // 說明向左遞歸查找return insertValueSearch(arr, left, mid - 1, findVal);} else {return mid;}}

總結

以上是生活随笔為你收集整理的插值查找(按比例查找)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。