• 数据结构-查找-线性索引查找(对于无序顺序存储,建立索引快速查找)


    1、索引

    我们前面提到的几种高效查找方法都是基于有序的基础上的,但是实际上,很多数据集可能增长非常快。例如空间动态信息等,对于这样的查找表,我们若是保证记录全部按照当中某个关键字有序,其维护的时间代价非常高,所以这种数据通常是按照先后顺序存储。

    数据结构的最终目的就是提高数据的处理速度,索引是为了加快查找速度而设计的一种数据结构。索引就是把一个关键字与他对应的记录相关联的过程。

    一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。

    索引技术是组织大型数据库以及磁盘文件的一种重要技术。

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

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

    2、稠密索引

    稠密索引文件的每个记录都有一个索引项,记录在数据区存放是任意的,但索引是按序的,这种索引称为稠密索引。

    稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项。

    稠密索引是因为索引项和数据集的记录个数相同,所以空间代价很大。

    3、分块索引

    我们可以对数据集进行分块,使其分块有序,然后再对每一块建立一个索引项(类似于图书馆的分块)。

    分块有序是把数据集的记录分成了若干块,并且这些块需要满足两个条件:
    (1)块内无序
    每一块内的记录不要求有序
    (2)块间有序
    比如要求第二块所以记录的关键字均要大于第一块中所有记录的关键字,第三块要大于第二块。
    只有块间有序才有可能在查找时带来效率。
    对于分块有序的数据集,将每块对应一个索引项,这种索引方法叫做分块索引。
    分块索引的索引项结构分为三个数据项:
    a: 最大关键码--存储每一块中的最大关键字。
    b: 存储每一块中记录的个数以便于循环时使用。
    c: 用于指向块首数据元素的指针,便于开始对这一块中记录进行遍历。

    在分块索引表中查找,可以分为两步:

    a: 在分块索引表中查找要查的关键字所在块。
    由于分块索引表是块间有序的,因此很容易利用折半插值等算法得到结果。
    b:根据块首指针找到相应的块,并在块中顺序查找关键码。
    因为块中可以是无序的,因此只能顺序查找。
    4、倒排索引

    通过关键字的记录号表查找,其中记录号表存储具有相同次关键字的所有记录的记录号(可以是指向记录的指针或者是该记录的主关键字)。这种索引方法就是倒排索引。


  • 相关阅读:
    第一期知识点
    如何正确地停止一个线程?
    JVM知识点总览-高级Java工程师面试必备
    常见GC算法,CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。
    深入理解分布式事务,高并发下分布式事务的解决方案
    JVM中的逃逸分析
    JVM内存初学 堆、栈、方法区
    JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。
    JVM的基本结构和JVM的内存结构
    一致性hash算法应用场景、详解与实现(JAVA)
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12395054.html
Copyright © 2020-2023  润新知