zoukankan      html  css  js  c++  java
  • 【学习总结】《大话数据结构》- 第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

  • 相关阅读:
    C++程序设计基础(7)位运算
    C++程序设计基础(1)程序的编译和执行
    深度学习看过的文档留存
    Linux常用快捷键
    从Zero到Hero,一文掌握Python关键代码
    三角测量原理与双目视觉景深恢复
    动态规划——DP算法(Dynamic Programing)
    算法-动态规划 Dynamic Programming--从菜鸟到老鸟
    语义分割--全卷积网络FCN详解
    2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译
  • 原文地址:https://www.cnblogs.com/anliux/p/11280558.html
Copyright © 2011-2022 走看看