zoukankan      html  css  js  c++  java
  • 查找-概念性总结及代码示例

    总览

    • 静态查找:只有查找的功能
    • 动态查找:找到删掉,没找到添加
    • 数据结构:顺序表
    • 性能分析:平均查找长度ASL 与给定值进行比较的关键字个数的期望值

       

    静态查找:

    1. 顺序查找
      1. 主要思想:从表的最后一个记录开始,逐个进行关键字的匹配,若匹配成功,查找成功,返回关键字的位置;若直到第一个记录依旧没有匹配成功,查找失败。
      2. ASL:(n + 1/2
      3. 时间复杂度:O(n)
      4. 示例代码:
    2. 折半查找
      1. 主要思想:先确定待查记录的方位,然后逐步缩小范围知道找到记录为止。
      2. ASL
      3. 时间复杂度:
      4. 构造折半查找判定树:把当前查找区间中的中间位置(向下取整)上的记录作为树根,左子表和右字表中的记录分别作为根的左子树和右子树。
      5. 求判定树的ASL:判定树的层数就是查找的次数,ASL=判定树上所有分枝节点的总层数/总分支节点数
      6. 示例代码:
    3. 块查找(索引顺序表的查找)
      1. 结构:把线性表分成若干块,每一块中的元素存储顺序是任意的,但是块与块之间必须按照关键字的大小有序排列,前一块的最大关键字小于后一块的最大关键字。需要建立一个索引表用于存放每一块的最大关键字,并将指针指向该块。
      2. 主要思想:首先确定待查找元素属于哪一块,然后在块内精确查找该元素。由于索引表是递增有序的,所以第一步采用折半查找,第二步采用顺序查找。
      3. ASL:折半查找的平均长度+顺序查找的平均长度
      4. 示例代码:

    动态查找:

    1. 二叉排序树(BST
      1. 定义:
        1. 若它的左子树不为空,则在左子树上的所有结点的值均小于它的根节点的值
        2. 若它的右子树不空,则右子树上的所有结点的值均大于它的根结点的值
        3. 它的左子树、右子树也分别为平衡二叉树
      2. 查找算法:
        1. 主要思想:将待查元素与根节点比较,小于查左子树,大于查右子树,重复直到查到,查找成功;到结点的空指针域,查找失败
        2. 示例代码
      3. 插入关键字:
        1. 主要思想:对查找算法进行修改,来到空指针域直接插入即可。如果要插入的关键字已经存在,插入失败;否则,插入成功
        2. 示例代码:
      4. 删除关键字:
        1. 主要思想:

          假设在二叉排序树行被删除节点为p, f为其双亲节点,删除p的过程分为三种情况

          1. p为叶子结点,直接删除即可;
          2. p结点只有右子树而无左子树,或者只有左子树没有右子树,删除p,并把p的子树连接到原来p与其双亲节点f连接的指针上;
          3. p既有左子树又有右子树,先沿p的左子树的根节点的右指针一直往右走,知道来到其右子树的最右边的一个节点(或者沿p的右子树的根节点的左指针一直往左走,知道来到其左子树的最左边的一个节点),然后将p中的关键字用r中的关键字代替。最后判断,如果r是叶子结点,则按照1中的方法删除r;如果r是非叶子结点,则按2中的方法删除r
        2. 示例代码(不重要)
    2. 平衡二叉树(AVL
      1. 概念:

        一种特殊的二叉排序树,左右子树都是平衡二叉树,左右子树高度之差绝不大于1。目的是为了提高二叉排序树的查找效率。

      2. 平衡调整总结:以平衡因子为2-2的结点,自底向上的进行调整
        1. 单向右旋平衡处理:由于在根节点的左子树根节点的左子树上插入节点,根节点的平衡因子由1增至2,需要进行一次向右的顺时针旋转操作。
        2. 单向左旋平衡处理:由于在根节点的右子树根节点的右子树上插入节点,根节点的平衡因子由-1增至-2,需要进行一次向左的逆时针旋转操作。
        3. 双向旋转(先左后右):由于在根节点的左子树根节点的右子树上插入节点,根节点的平衡因子由1增至2,需要进行先左后右的旋转操作。
        4. 双向旋转(先右后左):由于在根节点的右子树根节点的左子树上插入节点,根节点的平衡因子由-1增至-2,需要进行先右后左的旋转操作。
    3. b-
      1. 概念:B-树是一种平衡多路查找树,在文件系统中很有用。

        一棵m阶的B-树,或为空树,或者满足下列特性的m叉树:

        1. 树中每个结点至多有m棵子树
        2. 若根节点不是叶子结点,则至少有两棵子树
        3. 除根之外的所有非终端结点至少有m/2(向上取整)棵子树
        4. 所有的非终端结点中包含下列信息数据

          n,A0,K1,A1,K2,A2,…,Kn,An

        5. 所有叶子结点都出现在同一层次上,并且不带信息。
      2. 查找:
      3. 插入:
      4. 删除:
    4. b+
      1. 概念:

    哈希表:

    1. 概念
    2. 哈希表的构造方法
      1. 直接定址法
      2. 数字分析法
      3. 平方取中法
      4. 折叠法
      5. 除留余数法
      6. 随机数法
    3. 处理冲突的方法
      1. 开放定址法
      2. 再哈希法
      3. 链地址法
      4. 建立一个公共溢出区
    4. 哈希表的查找
      1. 主要思想:给定值K,根据造表时设定的哈希函数求得哈希地址,若此位置上没有记录,则查找不成功;否则,比较关键字,若给定值相等,则查找成功;否则根据造表时设定的处理冲突的方法找"下一个地址",直至哈希表中的某个位置为"空"或者表中所填记录的关键字等于定值时为止。
      2. 二次聚集:
      3. 不同哈希函数的ASL
  • 相关阅读:
    【解决】Word 在试图打开文件时遇到错误 请尝试下列方法:* xxx * xxx * xxx
    【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
    [经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~
    Git技巧:右键菜单怎么去除?
    07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)
    Git异常:fatal: V1.0 cannot be resolved to branch.
    06.GitHub实战系列~6.过滤器过滤掉的文件如何上传
    Git异常:Cannot delete the branch 'test1' which you are currently on
    ElasticSearch查询 第四篇:匹配查询(Match)
    字符串的长度,是字符数量,还是字节数量?
  • 原文地址:https://www.cnblogs.com/stormax/p/9220124.html
Copyright © 2011-2022 走看看