大话数据结构 第八章 查找(一) 顺序表查找、有序表查找、线性索引查找

大话数据结构 第八章 查找(一) 顺序表查找、有序表查找、线性索引查找

  • 查找
    • 定义
    • 顺序表查找
    • 有序表查找
      • 折半查找
      • 插值查找
      • 斐波那契查找
    • 线性索引查找
      • 稠密索引
      • 分块索引
      • 倒排索引

查找

定义

  • 查找表:由同一类型的数据元素(或记录)构成的集合
  • 关键字:数据元素中某个数据项的值。若此关键字可以唯一地标识一个记录,则称其为主关键字
  • 查找表分为静态查找表和动态查找表
  • 静态查找表:只作查找操作的查找表
  • 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素

顺序表查找

  • 顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若==某个记录的关键字和给定值相等,则查找成功,找到所查的记录;==如果知道最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。
  • 在查找过程中可以设置“哨兵”,免去在查找过程中每一次比较后都要判断查找位置是否过界。
  • 算法的时间复杂的为O(n)

有序表查找

  • 前提:线性表中记录有一定顺序

折半查找

  • 又称为“二分查找”
  • 其基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
  • 时间复杂度O(log n)

插值查找

  • 使用插值计算公式
  • 时间复杂度O(log n)
  • 适用于表长较大,关键字分布比较均匀的查找表。不适于极端数据

斐波那契查找

  • 使用斐波那契数组辅助进行分隔
  • 时间复杂度O(log n)
  • 平均性能要优于折半查找

线性索引查找

  • 索引是为了加快查找速度而设计的一种数据结构。索引就是把一个关键字与它对应的记录相关联的过程
  • 索引按照结构可分为:线性索引、树形索引和多级索引。其中线性索引主要有稠密索引、分块索引和倒排索引

稠密索引

  • 稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项,索引项一定是按照关键码有序的排列
  • 可以使用折半、插值、斐波那契等有序查找方法

分块索引

  • 为了减少索引项的个数,可以对数据集进行分块,使其分块有序,然后再对每一块建立一个索引项
  • 要求块内无序,块间有序
  • 索引项结构:最大关键码,块长,块首指针
  • 查找步骤:
  • 【1】在分块索引表中查找要查关键字所在的块
  • 【2】根据块首指针找到相应的块,并在块中顺序查找关键码
  • 分块索引在兼顾了对细分块不需要有序的情况下,大大增加了整体查找的速度,所以普遍被用于数据库表查找等技术的应用中

倒排索引

  • 索引项通用结构:次关键码,记录号表
  • 其中记录号表存储具有相同次关键字的所有记录的记录号(或者指向记录的指针),这样的方法就是倒排索引
  • 倒排索引的优点是查找记录非常快,但是缺点是记录号不定长

你可能感兴趣的:(大话数据结构)