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

Posted 是CodeAllen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话数据结构C语言54 线性索引查找相关的知识,希望对你有一定的参考价值。

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

 

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

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

 
 
 

稠密索引

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

分块索引

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

倒排索引

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

以上是关于大话数据结构C语言54 线性索引查找的主要内容,如果未能解决你的问题,请参考以下文章

C语言数据结构(大话数据结构——笔记1)数据结构绪论算法线性表

大话数据结构C语言51 查找算法

大话数据结构C语言53 斐波那契查找(黄金分割法查找)

大话数据结构C语言55 二叉排序树

大话数据结构C语言62 散列表(哈希表)查找

大话数据结构C语言56 二叉排序树的查找插入和删除