第八章:查找
查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素
查找概论
查找表:同一元素数据构成的集合
关键字:数据元素中某个数据项的值
分类
- 静态查找表
- 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从数据表中删除已经存在的某个数据元素
为了提高查找效率,需要专门为查找操作设置数据结构,这种面向查找操作的数据结构称为查找结构。
查找方式:静态查找表
顺序表查找
顺序遍历数据,逐个比较
有序表查找
1.二分查找(折半查找):适用于顺序静态查找表,时间复杂度为O(logn)
2.查值查找:对二分查找的改进,时间复杂度为O(logn)
3.斐波那契查找:时间复杂度为O(logn),最坏情况劣于折半查找
本质区别是分隔点的选择不同。
线性索引查找
线性索引是将索引项集合组织为线性结构,也称为索引表
1.稠密索引:在线性索引中,将数据集中在每个记录对应一个索引项,索引表是有序的,所以可以用有序查找方式
2.分块索引:
- 把数据集的记录分成了若干块,并且这些块需要满足:块内无序(有序最好),块间有序(因此可以有序表查找方式)。
- 对于分块有序的数据集,把每块对应一个索引项,索引项数据包含三个数据项
- 最大关键码,存储每一块中的最大关键字
- 每块的数据个数
- 块首数据元素的指针
3.倒排索引:通过属性查找值
索引表结构
- 次关键码
- 记录号表
查找方式:动态查找表
*二叉排序树
*平衡二叉树(AVL树)
*多路查找树(B树,B+树)
哈希表(散列表)
散列技术是在记录的存储位置和它的关键字key之间建立一个确定的对应关系F,使得每个关键字key对应一个存储位置f(key)
其中F称为哈希函数,这个查找表称为哈希表(散列表),主要用来查找,也可以存储
哈希函数构造方法:
要求:
- 计算简单
- 散列地址分布均匀