理论基础 —— 查找 —— 插值查找
【概述】
以查字典为例,在英文字典中查 "apple" 时,下意识的会翻开前面的书页,当查 "zoo" 时,下意识的翻开一定是后面的书页,显然,此时还绝对不是从中间开始查起,而且有一定目的地从前或从后查找。
同样的,以取值范围在 1~10000 间的 100 个元素从小到大均匀分布的数组中查找 5,那么自然会考虑从数组下标较小的开始查找。
可以看出,二分查找这种查找方式,并不是自适应的,因此,基于二分查找,就有了插值查找,其将查找点的选择改进为自适应选择,从而提高查找效率。
简单来说,插值查找就是根据要查找的关键字 key 与查找表中最大最小记录的关键字比较后的查找方法,其核心在于插值的计算公式。
【算法原理】
在二分查找中,查找点的计算为:,经过变换后,有:
而插值查找,将 中的
改进为了
即将: 变换为了
【使用情况】
从时间复杂度来说,其最坏时间复杂度也是 O(longn),但对于表长较大,而关键字分布又比较均匀的查找表来说,其平均性能要比二分查找好的多。
反之,若查找表中关键字分布非常不均匀,那么插值查找未必是很合适的选择。
【源程序】
int insertionSearch(int a[],int key, int low, int high){int mid=low+(key-a[low])/(a[high]-a[low])*(high-low);if(a[mid]==value)return mid;else if(a[mid]>value)return insertionSearch(a,key,low,mid-1);else if(a[mid]<value)return insertionSearch(a,key,mid+1,high);
}
理论基础 —— 查找 —— 插值查找相关推荐
- Java数据结构与算法——线性查找 二分查找 插值查找
1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...
- Java数据结构之二分查找/插值查找/斐波那契查找
目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...
- C++实现插值查找(附完整源码)
实现插值查找 插值查找 插值查找C++算法完整源代码如下 插值查找 有序表的一种查找方式.插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法.插值查找基于二分查找,将查找点的选择改进 ...
- (二)Java算法:插值查找
目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点 插值查找,有序表的一种查找方式.插值查找是根 ...
- c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...
数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 二十二、插值查找算法
一.插值算法的介绍 1)插值算法原理介绍 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找. 2)将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, ...
- 数据结构: 插值查找算法
import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...
- Java语言实现插值查找
插值查找 前言 在上篇文章中已经将讲解过二分查找算法,而插值查找与二分查找类似,只不过是在二分查找的基础上进行优化,讲mid的值进行了一定调整优化,将mid的值修改为,该算法时间复杂度为O(log n ...
最新文章
- 视学算法第六轮送书活动,16本高质量书免费拿走!
- RPA技术干货 | RPA防锁屏运行技巧
- SDNU 1280.就问你慌不慌(高精度)
- ef 数据迁移mysql_07116.3.0如何将CM的外部PostgreSQL数据库迁移至MySQL服务
- sql2005数据库大全
- QT 中textEdit 和 textBrowser 无法使用斜体及加粗等 解决办法
- windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!
- 最小公倍数和最大公约数的简洁写法
- qtcreator 代码格式化工具使用
- 手把手教你学dsp_大咖问答第13期:如何掌握DSP设计?顾卫钢博士在线为你解答...
- 蓝桥杯官网 试题 PREV-253 历届真题 质数行者【第十一届】【决赛】【研究生组】【C++】【Java】两种解法
- Ubuntu下安装UDK
- 记录一次 AGP 调研过程中的思考,我从一个事故搞出了一个故事!
- uniapp地图轨迹回放
- 电脑右下角图标不显示
- LeetCode - 500 - 键盘行(keyboard-row)
- 【error】_smartbi数据集超出最大行数: DataRows > 1000
- 学习笔记(2)——TransE算法(Translating Embedding)
- 个人支付宝/微信/云闪付/商户聚合码/银行卡等到账通知常用技术方案总结
- 编译的时候所使用的动态库中出现错误:未定义的引用