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

  • 相关阅读:
    LSMW TIPS
    Schedule agreement and Delfor
    Running VL10 in the background 13 Oct
    analyse idoc by creation date
    New Journey Prepare
    EDI error
    CBSN NEWS
    Listen and Write 18th Feb 2019
    Microsoft iSCSI Software Target 快照管理
    通过 Microsoft iSCSI Software Target 提供存储服务
  • 原文地址:https://www.cnblogs.com/anliux/p/11280558.html
Copyright © 2011-2022 走看看