一、索引
上一篇我们介绍了有序查找,但是事实上,很多数据集增长非常快,如果都按照有序存储,将消耗非常多的时间,所以我们找到了另一种快速查找的方法——索引
索引就是把一个关键字与他对应的记录相关联的过程。索引按照结构可以分为线性索引、树形索引和多级索引。我们这里只介绍线性索引。
所谓线性索引就是将索引项集合组织为线性结构,也称为索引表。我们下面介绍三种线性索引:稠密索引、分块索引和倒排索引
二、稠密索引
所谓稠密索引,就是相当于我们把所有家里杂乱的东西的存放位置都用小本子记录下来,我们要找东西的时候,只需要去查小本子。不过我们还有查小本子这一项任务,所以小本子需要是有序的排列才能提高效率。这时候我们的折半查找就可以使用了。
但是如果数据量非常大,那么索引规模也很大,这时候查找性能就没有那么好了。
三、分块索引
分块索引就像图书馆藏书,你要先去找到目标图书的大类,你是想要社科类,还是文学类,还是体育类,然后再去这个类别的区域中去找你的目标书籍。为了减少索引项的个数,我们可以对数据集进行分块,使其分块有序,然后对每一块建立索引项,减少索引项的个数。
分块有序,是指把数据集的记录分成若干块,这些块满足两个条件:块内无序,块间有序。
每块对应一个索引项,这种索引方法叫分块索引。我们定义的分块索引的索引项结构分三个数据项:
1,最大关键码
它存储每一块中的最大关键字,这样的好处就是可以使得在它之后的下一块中的最小关键字也比这一块的最大关键字要大。
2,块中记录的个数
3,指向块首数据元素的指针,便于开始对这一块中记录进行遍历。
四、倒排索引
倒排索引的“倒”字和倒序排序不是一个意思,是指与查找记录得到属性相反,倒排索引是由属性查记录。
比如我们拿到两个句子1“Books and friends should be few but good” 2“A good book is a good friend” 我们忽略掉其中的s,大小写区别,可以建立一个单词索引
这样我们通过单词,可以找到它在哪篇文章中。索引项的通用结构是:1,次关键码,这里就是单词;2,记录号表,这里就是句子的编号。