七大查找算法之线性索引---稠密查找、分块索引、倒排索引

对于海量的无序数据,为了提高查找速度,一般会为其构造索引表。索引就是把一个关键字与它相对应的记录进行关联的过程。
一个索引由若干个索引项构成,每个索引项至少包含关键字和其对应的记录在存储器中的位置等信息。

对于这样的数据表,如何能够快速的查找到需要的数据呢?办法就是——索引。

数据结构的最终目的是提高数据的处理速度,索引是为了加快查找速度而设计的一种数据结构。

索引按照结构可以分为:线性索引、树形索引和多级索引。
线性索引:将索引项的集合通过线性结构来组织,也叫索引表。
线性索引可分为:稠密索引、分块索引和倒排索引

稠密索引

       稠密索引时指在线性索引中,将数据集中的每个记录都对应一个索引项 。对于索引项一定是按照关键码有序的排列,索引项有序意味着可以使用顺序查找算法,这是稠密索引的有点, 但是如果数据集非常大,意味着索引也得有同样的数据集长度规模。

原理:

image_1b2cl8r0dk1v1u0ssf0rmk8o29.png-157.4kB

       这其实就相当于给无序的集合,建立了一张有序的线性表。其索引项一定是按照关键码进行有序的排列。这也相当于把查找过程中需要的排序工作给提前做了。

分块索引

       给大量的无序数据集合进行分块处理,使得块内无序,块与块之间有序。

       这其实是有序查找和无序查找的一种中间状态或者说妥协状态。因为数据量过大,建立完整的稠密索引耗时耗力,占用资源过多;但如果不做任何排序或者索引,那么遍历的查找也无法接受,只能折中,做一定程度的排序或索引。

       分块索引的效率比遍历查找的O(n)要高一些,但与二分查找的O(logn)还是要差不少。

原理:

分块有序-是吧数据集合的记录分成了若干份,并且这些块需要满足2个条件
     1)块内无序,即每一块内的记录不要求有序。(有序更好,但需要付出大量时间和空间代价)
     2)块间有序-例如要求第二块所有记录的关键字均要大于第一块所有记录的关键字,第三块的所有记录要大于第二块的所有记录关键字,因为只有块间有序,才能提高查找效率
      分块索引的平均查找长度ASL=根号n+1  高于o(n)小于折半查找o(logn)
 

倒排索引

       倒排索引的概念很简单:就是将文件中的单词作为关键字,然后建立单词与文件的映射关系。 当然,你还可以添加文件中单词出现的频数等信息。 倒排索引是搜索引擎中一个很基本的概念,几乎所有的搜索引擎都会使用到倒排索引。

原理:

索引项的通用结构是:

     1)次关键码,例如上面的英文单词
     2) 记录号表,例如上面的文章编号

 其中记录号表存储具有相同次关键字的所有记录的记录号(可以是指向记录的指针或者是该记录的主关键字)

猜你喜欢

转载自blog.csdn.net/qq_30123335/article/details/83242278
今日推荐