查找(一)
来源:互联网 发布:怎么修改tomcat的端口 编辑:程序博客网 时间:2024/05/18 02:58
1、查找的简介
查找分为:静态查找和动态查找
静态查找:只做查找操作
动态查找:在查找的过程中同事2插入查找表中不存在的数据元素,或者删除存在的元素
查找的算法:
- 顺序查找(加入哨兵优化)
- 折半查找,插值查找,斐波那契查找(针对有序表的查找)
- 线性索引查找;稠密索引、分块索引、倒排序索引
2、查找算法的具体思路
1)顺序查找
顺序查找就是最简单的查找办法,通过for循环,遍历整个表,直到找到对应的查找的关键字key退出,或者遍历完没有找到退出。
// 数组a是查找的表,n为表中元素个数,注意从1开始存储,查找元素keyint search(int *a,int n,int key){ for(int i=1;i<=n;i++) { if(a[i]==key) return i; } return 0; // 没有找到返回0}
加入哨兵优化
普通顺序存储使用了for循环,里边每次需要进行i<=n
的判断,可以设置一个哨兵,减少这次判断
int search(int *a,int n,int key){ a[0] = key; // 设置的哨兵 int i = n; while(a[i]!=key) { i++; } return i; }
3)有序表的查找
折半查找
又称为二分查找,前提是线性表必须有序,采用顺序存储。每次查找时需要比较关键字和表中间元素的大小,根据比较结果决定继续在左半空间或右半空间继续进行查找。
复杂度为: O(log(n))
插值查找
和折半查找大体思路一样,区别在于折半查找每次比较的是中间元素,而插值查找每次比较的是
mid = low +(high-low) * (key-a[low]) / ( a[high] - a[low] )
复杂度和折半查找一样,适合于均匀分布的数据
斐波那契查找
和上边两种区别也只是选择比较的点不一样,它是利用了黄金分割原理实现。
总的来说这三种查到只是选择的分割点不一样,各有优劣
3)线性索引查找
稠密索引
将数据每个记录对应一个索引项(索引项按顺序排列,这样就可以使用折半等查找来找到)
分块索引
分块索引是把数据集记录分成若干块,并且这些块,块内无序,块间有序,针对块可使用折半等快速定位到key对应的块,在块中再使用顺序查找。
倒排序索引
根据属性值来查找记录
阅读全文
0 0
- 查找(一)二分查找
- [数据结构]查找(一)
- 查找数字(一)
- 查找(一)
- 查找(一)—— 二分法查找
- 树查找(一)二叉查找树
- 查找(一)静态表查找
- java查找算法(一)--顺序查找
- 查找算法(一)顺序查找
- 排序与查找(一): 二分查找
- 查找算法(一):顺序查找
- 查找算法练习一(线性查找+折半查找)
- 二叉查找树(一)
- 查找算法总结(一)
- 查找算法总结(一)
- 二叉查找树(一)
- linux命令(一):查找
- 查找算法总结(一)
- 函数内部属性
- BootStrap实现商城首页
- IOS 星星评分控件-Swift3.0
- Linux下hydra的使用
- Ubuntu 安装和修改Apache2端口
- 查找(一)
- 文章标题
- 文章标题
- python中的文件数据保存
- 文章标题
- SSD6 Exercise0: 函数指针数组的使用实例
- python中的文件读取注意事项
- SpringMVC之类型转换Converter
- 理解差分约束(转)