插值搜索——本质和二分无异,是利用数据分布的规律来定查找点,其基本假设是数据分布均匀...
2.2 插值查找
为什么能够这么快呢`? 看网上没有什么关于这种算法的描述, 我就来描述一下吧.
首先要知道一点, 这种搜索方式只能够针对顺序表进行,, 再一个要理解顺序表中的一个特点, 在顺序表中查找是否存在一个值, 此时我可以对顺序表中的任意一个元素进行比较, 如果我要在A中寻找值为t的元素是否存在, 那么我用a[i]和t进行比较, (a[i]可以是顺序表中任意一个元素..), 如果a[i]==t的话, i就是t所在的位置, 如果a[i] > t, 那么说明t一定不在在a[i], a[i+1]....a[n-1], a[n]... 也就是说现在只需要对a[1]..a[i-1]进行搜索即可..
好好理解一下吧, 如果上面的理解不了, 那么插值查找就不好理解..
接下来我用low和high来保存该搜索的范围, 在刚开始low=0, hight=n-1. 设i是在low到high之间的相对位置.. 如: 若 i= 0, low = 0, 那么就该让t和a[i + low]比较, 即判断t是否和a[0]相等..
现在就是要确定i在哪里了..
假设顺序表的分布比较均匀, 那么有下面的方程:
(t - a[low]) : (i + low) = (a[high] - a[low]) : (high - low)
i = (t - a[low]) * (high - low) / (a[high] - a[low]) + low;
差不多了吧...
我的语言表达能力有限, 若还不大理解, 就看代码吧:
- /* a是待搜索的顺序表,, size是a的长度, t 是待搜索的值 */
- int search(int a[], int size, int t)
- {
- int low = 0, high = size - 1;
- int pos;
- while(low <= high){
- pos = (t - a[low])/(a[high] - a[low])*(high - low) + low;
- if(a[pos] == t){
- return pos;
- }
- if(a[pos] > t){
- high = pos - 1;
- }else{
- low = pos + 1;
- }
- }
- return -1;
- }
2.3 斐波那契查找
- /*斐波那契 查找*/
- int Fbonacci_Search(int *a, int n, int key)
- {
- int low,high,mid,i,k;
- int F[] = {0,1,1,2,3,5,8,13,21,34}; //经典的斐波那契数列已经早就定义好,也可以递归自己求解。
- low = 1;
- high = n;
- k = 0;
- while(n > F[k] - 1) //计算 n 位于斐波那契数列的位置
- k++;
- for(i=n; i<F[k] - 1; i++) //将不满的数值补全
- a[i] = a[n];
- while(low <= high)
- {
- mid = low + F[k-1] - 1; //利用斐波那契数列来找寻下一个要比较的关键字的位置
- if(key < a[mid])
- {
- high = mid - 1;
- k--;
- }
- else
- {
- if(key > a[mid])
- {
- low = mid + 1;
- k = k -2;
- }
- else
- {
- if(mid <= n)
- return mid;
- else
- return n;
- }
- }
- }
- }
总结:
转自:http://zqynux.iteye.com/blog/627133
http://blog.csdn.net/wangyunyun00/article/details/23464359
转载于:https://www.cnblogs.com/bonelee/p/6591384.html
插值搜索——本质和二分无异,是利用数据分布的规律来定查找点,其基本假设是数据分布均匀...相关推荐
- c++Interpolation search插值搜索的实现算法之二(附完整源码)
C++Interpolation search插值搜索的实现算法 C++Interpolation search插值搜索的实现算法完整源码(定义,实现,main函数测试) C++Interpolati ...
- c++Interpolation search插值搜索的实现算法之一(附完整源码)
C++Interpolation search插值搜索的实现算法 C++Interpolation search插值搜索的实现算法完整源码(定义,实现,main函数测试) C++Interpolati ...
- 线性插值插值_揭秘插值搜索
线性插值插值 搜索算法指南 (Searching Algorithm Guide) Prior to this article, I have written about Binary Search. ...
- SQL group by底层原理——本质是排序,可以利用索引事先排好序
转自:http://blog.csdn.net/caomiao2006/article/details/52140993 由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比 ...
- sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID...
转自:http://github.tiankonguse.com/blog/2014/12/03/sphinx-token-inverted-sort.html 外部排序 现在我们的背景是有16个已经 ...
- [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)
题目描述 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...
- 回归本质,虚拟资源如何利用电商平台,0成本挂机也能月入过万
讲了很多期的网课项目,最多讲的是如何利用流量招代理,如何招站长,真正去运营卖课程卖资料我总是一笔带过,虽然说项目最终都是招商最赚钱,我也鼓励大家做招商,但是咱们不能把项目最原始的赚钱方式给丢掉, 那今 ...
- php神马搜索主动推送curl,如何利用curl主动推送url到各大搜索引擎(适用百度、搜狗、360搜索、神马)...
相信seo技术人员都经常用到站长平台里面的数据推送,curl主动推送方式是一种很简单直接的推送方式,今天就来说一下这个改如何使用. curl是什么?就不多做解释了,百度会解释的更清楚,主要来说一下如何 ...
- 60. Leetcode 面试题 10.03. 搜索旋转数组 (二分查找-局部有序)
搜索旋转数组.给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详.请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的.若有多个相同元素,返回索引值最小的一个.示例1 ...
最新文章
- 测试在强电磁场下基于HALL的电流传感器 ACS712-5A是否会有到影响?
- java对象如何保存日期_如何在Java中的日期对象中存储和检索毫秒?
- 1.1 HTML5简介
- [USACO13NOV]Crowded Cows【暴力枚举】
- MFC学习--文本框
- android 添加文件打开方式
- 第三方支付,微信支付及支付宝的一些入门了解
- 运用二维数组打印杨辉三角(找规律题)
- Gyro陀螺仪 > MPU 6000 vs ICM 20689
- python爬取有道翻译的代码_python爬虫之有道翻译
- linux权限750什么意思,chmod 777是什么意思?为您解释chmod 777及切勿使用chmod 777的原因...
- 洛谷_3975	[TJOI2015]弦论(后缀自动机)
- 电商新系统如何应对峰值
- chrome浏览器 快捷键设置
- 计算机辅助cad职称报考,计算机辅助设计绘图员(AUTO CAD)中级证
- 【蓝桥杯单片机(7)】数码管定时器显示任意字符串
- 漂亮MM超级搞笑问答
- 『NLP经典项目集』06: 使用预训练模型ERNIE-GEN自动写诗
- .启动ARCGIS提示“Automation错误”
- 逻辑卷增加,扩容,缩小,删除操作步骤
热门文章
- libevent多线程使用bufferevent的那些事
- 查看target/classes/.../dao/文件夹下,发现只有mapper的class文件,而没有xml文件 的解决方法。
- mysql max和order by_mysql – 为什么MAX()比ORDER BY慢100倍… LIMIT 1?
- java中random的头文件_JAVA中的Random()函數
- android发短信乱码,android 音乐信息乱码处理
- 上海大学计算机技术 a股,这所上海大学短时间就成为211,实力强劲却不为人知,适合捡漏...
- 使用elasticsearch-php需要注意的问题
- 【Kali渗透全方位实战】子域名的概念与探测(DNSenum工具和Sublist3r脚本的使用)
- python【蓝桥杯vip练习题库】ALGO-202二进制数数
- 【Deep Learning笔记】循环神经网络