【大话数据结构C语言】54 线性索引查找

举报
CodeAllen 发表于 2021/10/30 00:20:27 2021/10/30
【摘要】 欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777       前边几种比较高效的查找方法都是基于有序的基础之上的,事实上,很多数据都是增长的非常快 &nbsp...

欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源
程序员技术交流①群:736386324 ,程序员技术交流②群:371394777    

 

前边几种比较高效的查找方法都是基于有序的基础之上的,事实上,很多数据都是增长的非常快
 
要保证记录全部是按照当中的某个关键字有序,其时间代价是非常高昂的, 这种数据一般都是采用先后顺序存储的
 
 
对于这样的查找表,我们怎么做到快速找到需要的数据呢? 方法就是 - 索引
 
索引是为了加快查找速度而设计的一种数据结构,索引就是把每一个关键字和他对应的记录相关联的一个过程
一个索引可能由若干个索引项构成,每个索引项至少要包含关键字和其对应的记录在存储器中的位置等信息
 
索引技术是组织大型数据库,和磁盘文件的重要技术
 
按照结构分类:
  • 线性索引
  • 树形索引
  • 多级索引
 

其中线性索引就是将索引项集合组织为线性结构,也称为索引表

 
 
 

稠密索引

稠密索引就是指在线性索引中,将数据集中的每个记录对应一个索引,如下图
索引项一定是按照关键码有序的排列
 
但是也暴露出一个问题,对于数据集非常大,也就意味着索引也得同样的数据集长度规模,对于内存有限的计算机来说,就主要反复访问磁盘,查找性能反而大大下降了
 
 
 

分块索引

类比图书馆,图书馆不是直接顺序排列,而是分块查找,可以减小索引项数量
 
分块有序,是把数据集的记录分成了若干块,并且这些块需要满足两个条件:
  • 块内无序,就是每一块内部的记录不要求有序
  • 快间有序,例如,第二块所有记录的关键字均要比第一块中的关键字大
 
 
定义的分块索引的索引项结构分三个数据项:
  • 最大关键码,存储每一块中的最大关键字
  • 存储块中的记录个数,便于循环时使用
  • 用于指向块首数据元素的指针,便于开始对这一块中记录遍历
 
 
对应如下图:
 
 
 

倒排索引

索引项的通用结构是:
  • 次关键码
  • 记录号表
 
其中记录号表存储具有相同次关键字的所有记录的记录号(可以是指向记录的指针或者是该记录的主关键字)
这样的索引方法就是倒排索引(inverted index)
 
 
 
 
 
 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/116894122

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。