【学习总结】《大话数据结构》- 第8章-查找

【学习总结】《大话数据结构》- 总

第8章查找-代码链接

启示:

  • 查找(Searching)

    查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。

目录

========================================

8.1 开场白

  • 一些可以略过的场面话...

========================================

8.2 查找概论

  • 定义

    • 查找(searching):

      • 查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
    • 查找表(search table):

      • 由同一类型的数据元素(或记录)构成的集合。如下图的表。
    • 关键字(key):

      • 数据元素中某个数据项的值,又称为键值,可以标识一个数据元素。
      • 也可以标识一个记录的某个数据项(字段),称为关键码。
      • 如图圈1和2。
    • 主关键字(primary key):

      • 若此关键字可以唯一地标识一个记录,则称此关键字为主关键字。
      • 对于不同记录,其主关键字均不相同。
      • 主关键字所在的数据项:称为主关键码。如图圈3和4。
    • 次关键字(secondary key);

      • 那些可以识别多个数据元素(或记录)的关键字,称为次关键字。
      • 次关键字对应的数据项:次关键码。如图圈5。
      • 次关键字是不以唯一标识一个数据元素(或记录)的关键字。
    • 注:“字”-数据项的值;“码”-数据项本项,或称为“字段”,即数据的“统一名称”

  • 查找结果:

    • 若表中存在这样一个记录,则是查找成功,查找结果给出整个记录的信息,或指示该记录在查找表中的位置。
    • 若表中不存在关键字等于给定值的记录,则是查找不成功,查找结果可给出一个“空”记录或“空”指针。
  • 分类:静态查找表和动态查找表

    • 查找表按照“操作方式”分为两大类:静态和动态。

    • 静态查找表:通常理解的“查找”

  • 动态查找表:广义的“查找”,找到并操作或找不到并操作


- 例如:新词汇收录:找不到并插入;违规用户:找到并删除。

  • 查找结构:

    • 面向查找操作的数据结构称为查找结构。

========================================

8.3 顺序表查找

  • 顺序查找定义:

  • 顺序表查找算法:

  • 顺序表查找优化:


  • 顺序查找分析:

    • 缺点:效率极为低下

    • 优点:对静态查找表的记录没有任何要求,小型数据查找时很适用

    • 查找概率不同的特性:将容易查找到的记录放在前面,不常用的放在后面,可以大幅提高效率。

========================================

8.4 有序表查找

  • 折半查找

    • 定义


  • 代码实现

  • 图示解析



  • 时间复杂度:O(logn)

    • 对于排序好的静态查找表比较适用
    • 如果是频繁插入删除的动态查找表,维护有序是不小的工作量,就不太适用了。
  • 插值查找

    • 定义

  • 改进推导



  • 时间复杂度:O(logn)

  • 斐波那契查找

    • 代码实现


  • 图示解析



  • 分析



  • 时间复杂度:O(logn)

  • 三种方法对比

========================================

8.5 线性索引查找

  • 引入

    • 数据结构的最终目的:提高数据的处理速度。

    • 索引:为了加快查找速度而设计的一种数据结构。

    • 索引定义:把一个关键字与它对应的记录相关联的过程。

  • 稠密索引

    • 定义:

      • 稠密索引是值在线性索引中,将数据集中的每个记录对应一个索引项。
      • 对于稠密索引的索引表来说,索引项一定是按照关键码有序的排列。
  • 图示:

  • 优缺点分析:

    • 索引项按照关键码有序排列,因此可以使用折半等查找方式提高效率
    • 索引项与数据集的记录个数相同,空间代价很大。
    • 数据集非常大时,需要同样数据量的索引,反复访问磁盘,反而降低了查找效率。
  • 分块索引

    • 分块有序

  • 分块索引


  • 分块索引表的查找

  • 复杂度分析

  • 倒排索引

    • 引例


  • 定义

  • 优缺点分析

    • 优点:查找记录非常快。
    • 缺点:记录号不定长,维护困难,插入删除都需要作相应的处理。

========================================

8.6 二叉排序树

  • 定义






  • 二叉排序树查找

    • 代码实现



  • 解析





  • 二叉排序树插入

    • 插入代码




- 注:根据上一段代码,查找不成功时,p指向最后一个结点。

  • 利用插入代码创建二叉树

  • 二叉排序树删除

    • 删除分析:

  • 删除代码:


  • 代码解析:






  • 二叉排序树总结


========================================

8.7 平衡二叉树-AVL树

  • 相关定义

    • 平衡二叉树(AVL树)


  • 最小不平衡子树

  • 平衡二叉树实现原理

    • 平衡二叉树构建的基本思想

  • 构建图示






  • 平衡二叉树实现算法

    • 改进二叉排序树的结点结构

  • 右旋操作


  • 左旋操作

  • 左平衡旋转处理代码




  • 主函数代码




  • 代码分析


  • 时间复杂度分析

========================================

8.8 多路查找树-B树

  • 多路查找树引入


  • 2-3树

    • 定义


  • 插入操作








  • 删除操作

  • 2-3-4树

  • B树

  • B+树

========================================

8.9 散列表查找-哈希表-概述

========================================

8.10 散列函数的构造方法

========================================

8.11 处理散列冲突的方法

========================================

8.12 散列表查找实现

========================================

8.13 总结回顾

========================================

8.14 结尾语

END

posted @ 2019-08-01 09:29  anliux  阅读(528)  评论(0编辑  收藏  举报