插值查找算法
算法 查找 插值
2023-09-14 09:04:59 时间
介绍
插值查找(Insert Value Search)是二分查找的一种改良,主要是改良了mid的值,mid的值由原来的mid = (left + right) / 2而变成了自适应获取mid的值mid = left + (num - arr[left]) / (arr[right] - arr[left]) * (right - left),上述公式是前辈们推导出来的,其余和二分查找一样。
对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找,速度较快。而关键字分布不均匀的情况下,该方法不一定比二分查找要好。
public static int insertValueSearch(int[] arr, int num) {
return insertValueSearch(arr, 0, arr.length - 1, num);
}
public static int insertValueSearch(int[] arr, int left, int right, int num) {
//如果没有找到
if (left > right || num < arr[0] || num > arr[arr.length - 1]) {
return -1;
}
//获取中间索引
int mid = left + (num - arr[left]) / (arr[right] - arr[left]) * (right - left);
//往左边递归找
if (num < arr[mid]) {
return insertValueSearch(arr, left, mid - 1, num);
}
//往右边递归找
else if (num > arr[mid]) {
return insertValueSearch(arr, mid + 1, right, num);
}
//数据位置找到
else {
return mid;
}
}
相关文章
- 编写js程序实现n的阶乘_javascript矩阵算法
- Adam优化算法「建议收藏」
- 二分查找算法的实现(Python)
- 算法与数据结构之集合
- 算法详解 - 神奇的兔子数列
- 均值哈希算法计算图片相似度
- LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)
- LM算法初识_lm算法效果
- 【JavaScript——牛客网算法No.HJ2】计算一个字符串中含有某个字符的个数[通俗易懂]
- 【营啸】最精妙的算法--排序与查找
- 【算法】二分查找
- Go 数据结构和算法篇(十):二分查找的变形版本
- 检索算法---顺序查找
- 【愚公系列】2023年03月 其他-Web前端基础面试题(数据结构和算法_8道)
- 理解并统一14种归因算法,让神经网络具有可解释性
- 【字符串】字符串查找 ( Rabin-Karp 算法 )
- Go 实现二分查找算法
- C++ find(STL find)查找算法详解
- Go语言实现二分查找算法
- MySQL 中强大的算法提升性能(mysql算法)
- 在Oracle数据库中探索日期算法(oracle中日期算法)
- 使用PHP实现二分查找算法代码分享
- PHP冒泡排序二分查找顺序查找二维数组排序算法函数的详解
- 基于私钥加密公钥解密的RSA算法C#实现方法