数据结构_查找

本文详细介绍了各种查找技术,包括静态查找表和动态查找表的概念,顺序查找、折半查找、插值查找和斐波那契查找的原理及应用。此外,还讨论了线性索引查找中的稠密索引、分块索引和倒排索引等不同类型的索引结构。这些查找方法在数据处理和信息检索中起着关键作用。

目录

静态查找表和动态查找表

顺序表查找

顺序查找

有序表查找

折半查找

插值查找

斐波那契查找

线性索引查找

稠密索引

分块索引

倒排索引


查找表 ( Search Table ) :是由同一类型得数据元素(或记录)构成的集合。

关键字 ( Key ) :是数据元素中某个数据项的值,又称为键值。

主关键字 ( Primary Key ):若此关键字可以唯一地标识一个记录,则称此关键字为主关键字 ( Primary Key ) 。主关键字所在的数据项称为主关键码。

次关键字 ( Secondary Key ) :对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字。次关键字所对应的数据项就是次关键码。

查找 ( Searching ):就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录) 。

静态查找表和动态查找表

*查找表按照操作方式来分有两大种:静态查找表和动态查找表

静态查找表 ( Static Search Table ) :只作查找操作的查找表。

  1. 查询某个 特定的 数据元素是否在查找表中。
  2. 检索某个 特定的 数据元素和各种属性。

动态查找表 ( Dynamic Search Table ) :在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。

  1. 查找时插入数据元素。
  2. 查找时删除数据元素。

顺序表查找

顺序查找

顺序查找 ( Sequential Search) :又叫做线性查找。是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不相等时,则表中没有所查的记录,查找不成功。

有序表查找

折半查找

折半查找 ( Binary Search ) :又称为二分查找。它的前提是线性表中的记录必须是关键码有序(常为从小到大),线性表必须采用顺序存储。折半查找的基本思想是:在有序表中取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

插值查找

插值查找 ( Interpolation Search ) :插值查找是根据要查找的关键字 key 与查找表中最大最小记录的关键字比较后的查找方法,其核心在于插值计算公式

*变换过程

 

斐波那契查找

斐波那契查找 ( Fibonacci Search ) :是利用了黄金分割原理来实现的。尽管斐波那契的查找时间复杂度也为 O(logn) ,但就平均性能来说,斐波那契查找要优于折半查找。还有比较关键的一点,折半查找是进行加法与除法运算 ( mid = ( low + high ) / 2 ) ,插值查找进行复杂的四则运算 ( mid = low + ( high - low ) * ( key - a [low] ) / ( a[high] - a[low] ) ) ,而斐波那契查找只是最简单加减法运算 ( mid = low + F[k - 1] - 1 ) ,在海量的数据查找过程中,这种细微的差别可能会影响最终的查找效率。 

斐波那契数列

下标012345678910
F0112358132134

 

线性索引查找

索引:索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息,索引技术是组织大型数据库以及磁盘文件的一种重要技术。索引是为了加快查找速度而设计的一种数据结构。

索引按照结构可以分为线性索引、树形索引和多级索引。

线性索引:所谓 线性索引 就是将索引项集合组织为 线性结构 ,也称为 索引表

三种线性索引:稠密索引、分块索引、倒排索引。

稠密索引

稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项。对于稠密索引这个索引表来说,索引项一定是按照关键码有序的排列。

分块索引

分块有序,是把数据集的记录分成了若干块,并且这些块需要满足两个条件:

  • 块内无序
  • 块间有序

对于分块有序的数据集,将每块对应一个索引项,这种索引方法叫做分块索引,我们定义的分块索引的索引项结构分三个数据项。

  • 最大关键码,它存储每一块中的最大关键字,这样的好处就是可以使得在它之后的下一块中的最小关键字也能比这一块最大关键字要大。
  • 存储了块中的记录个数,以便于循环时使用。
  • 用于指向块首数据元素的指针,便于开始对这一块中记录进行遍历。

倒排索引

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值