插值查找

Posted heibingtai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插值查找相关的知识,希望对你有一定的参考价值。

 

问题描述:

通过插值查找,查找一个数在给定数组中是否存在,若存在找到位置索引,不存在返回-1(给定数组中的数值都不相等)

 

算法实现:

privat int interpolationSearch(int[] arr, int lo, int hi, int key) {


if(lo > hi || arr[lo] > key || arr[hi] < key) {
return -1;
}

int mid = lo + (hi - lo) * ((key - arr[lo]) / (arr[key] - arr[lo]));
int midValue = arr[mid];

if(key > midValue) {
return interpolationSearch(arr, mid + 1, hi, key);
} else if(key < midValue) {
return interpolationSearch(arr, lo, mid - 1, key);
} else {
return mid;
}

}

 

算法解析:

1.插值查找是对二分查找的优化,主要针对数据量较大&关键字分布比较均匀的查找表;

2.重点关注插值的计算公式的关键部分(key - arr[lo]) / (arr[hi] - arr[lo]);

 

以上是关于插值查找的主要内容,如果未能解决你的问题,请参考以下文章

算法插值查找算法

leetcode查找算法(顺序查找,二分法,斐波那契查找,插值查找,分块查找)

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

如何在片段着色器中找到 4 个顶点之间的插值位置?

Day569.插值查找 -数据结构和算法Java