王道数据结构课代表 - 考研数据结构 第七章 查找(B树、散列表) 究极精华总结笔记(C版本)

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对数据结构知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!!
 
关于对 查找 章节知识点总结的十分全面,涵括了《王道数据结构》课程里的全部要点本人来来回回过了三遍视频),其中还陆陆续续补充了许多内容,所以读者可以相信本篇博客对于考研数据结构“查找”章节知识点的正确性与全面性
但如果还有自主命题的学校,还需额外读者自行再观看对应学校的自主命题材料
 
数据结构与算法 笔记导航🚥🚥🚥

  1. 🥬 第一章 绪论(无)
  2. 🥕 第二章 线性表
  3. 🥪 第三章 栈和队列
  4. 🍊 第四章 串-KMP(看毛片算法)
  5. 🍒 第五章 树和二叉树
  6. 🍀 第六章 图
  7. 🍚 第七章 查找(B树、散列表) ⇦当前位置🪂
  8. 🧄 第八章 排序 (内部排序:八大排序动图演示与实现 + 外部排序)
  9. 🍔 数据结构与算法 复试精简笔记 (未完成)
  10. 🎨 408 全套初复试笔记汇总 传送门 🏃‍🏃‍🏃‍
     

如果本篇文章对大家起到帮助的话,跪求各位帅哥美女们,求赞👍 、求收藏 👏、求关注!👀
你必考上研究生!我说的,耶稣来了也拦不住!😀😀😀

在这里插入图片描述

 

精准控时:
如果不实际操作代码,只是粗略过一下知识点,需花费 50 分钟左右过一遍
这个50分钟是我在后期冲刺复习多次尝试的时间,可以让我很好的在后期时间紧张的阶段下,合理分配复习时间;
但是刚开始看这份博客的读者也许会因为知识点陌生、笔记结构不太了解,花费许多时间,这都是正常的。
重点!!!学习一定要多总结多复习!重复、重复、再重复!!!

食用说明书:
第一遍学习王道课程时,我的笔记只有标题和截图,后来复习发现看只看图片,并不能很快的了解截图中要重点表达的知识点。
所以再第二遍复习中,我给每一张截图中标记了重点,以及每张图片上方总结了该图片对应的知识点以及自己的思考
最后第三遍,查漏补缺。
所以 ,我把目录放在博客的前面,就是希望读者可以结合目录结构去更好的学习知识点,之后冲刺复习阶段脑海里可以浮现出该知识结构,做到对每一个知识点熟稔于心!
请读者放心!目录展示的知识点结构是十分合理的,可以放心使用该结构去记忆学习!
注意(⊙o⊙)!,每张图片上面的文字,都是该图对应的知识点总结,方便读者更快理解图片内容。

 


第7章 查找

7.1 查找的基本概念

在这里插入图片描述

1、查找

2、查找表

3、关键字

在这里插入图片描述

4、静态查找表

在这里插入图片描述

5、平均查找长度

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.1 查找的基本概念小结

在这里插入图片描述


7.2 顺序查找和折半查找

7.2.1 顺序查找

1、算法思想

在这里插入图片描述

2、具体实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、优化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.2.1 顺序查找小结

在这里插入图片描述


7.2.2 折半查找

1、算法思想

在这里插入图片描述

2、具体实现

在这里插入图片描述

3、查找效率分析

在这里插入图片描述

在这里插入图片描述

4、折半查找判定树

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 右子树 - 左子树 = 0/1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5、拓展思考

在这里插入图片描述

在这里插入图片描述

7.2.2 折半查找小结

在这里插入图片描述


7.2.3 分块查找

1、算法思想

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、查找效率分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、拓展思考

在这里插入图片描述

在这里插入图片描述

7.2.3 分块查找小结

在这里插入图片描述


7.3 B树和B+树

  • 不怎么考察代码题

在这里插入图片描述

  • 将2叉查找树升级到5叉查找树
  • 注意每个区间的范围
  • 了解查找失败时,指针会落在哪里去?
    • 例如:下图里表明的“失败结点”,范围在(15,22)的结点都会落到那里

在这里插入图片描述

  • 每个结点内关键字太少,导致树变高,查找效率低下
    • 例如下图,5叉查找树退化成2叉查找树
  • 所以为了保证查找的效率,就会规定每个结点内至少需要含有的关键字数量

在这里插入图片描述

  • 根结点不要求至少([m/2]向上取整)个分叉

在这里插入图片描述

  • “不平衡”也不利于查找效率
  • 但是参考平衡二叉树的规定,对于m叉查找树又太麻烦了,所以直接规定左、右子树高度要相同

在这里插入图片描述

在这里插入图片描述

7.3.1 B树及其基本操作

  • 上面逼逼一大堆,关于B树比较重要的规定就是:
    • 1、各子树要平衡(绝对平衡)
    • 2、各结点的分叉数有规定
  • 注意!!!下面的终端结点和叶子结点,别混淆了
  • m阶B树,m个分叉,m-1个关键字

在这里插入图片描述

  • k是关键字,p是指针

在这里插入图片描述

  • 3个B树关键的性质

在这里插入图片描述

1、B树的高度

在这里插入图片描述

  • n+1个叶子结点:n个关键字剋划分出n+1个区域

在这里插入图片描述

在这里插入图片描述

7.3.1 B树的基本概念小结

在这里插入图片描述

2、B树的插入
  • 插入80,导致结点关键字数量超过上限

在这里插入图片描述

  • 新结点一定是插入到最底层

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 根结点可以只有一个关键字

在这里插入图片描述

在这里插入图片描述

3、B树的删除
  • 终端结点直接删除(但是也要注意结点里关键字的数量)

在这里插入图片描述

  • 删除非终端节点,找直接前驱或直接后继

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 删除终端节点里的关键字,导致结点关键字数量不足
    • 1、兄弟够借

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 删除终端节点里的关键字,导致结点关键字数量不足
    • 2、兄弟不够借(合并)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.3.1 B树的基本操作小结

在这里插入图片描述


7.3.2 B+树的基本概念

考研中B+树不会考的很深,都是考一些基本概念的问题。

在这里插入图片描述

1、B+树满足的条件
  • B树:m-1个关键字对应m个分支,m个子树
  • B+树:m个关键字,对应m个分支,m个子树
  • B+树里,查找信息并不会停留在分支节点上,会一直查找到叶子结点
    • 例如查找9,最后找的是绿色的9,而不是蓝色的9

在这里插入图片描述

在这里插入图片描述

2、B+树的查找

在这里插入图片描述

  • B+树和B树关于查找的区别
  • 看下B+树,B树两个图,B+树关键字会重复,B树不会重复

在这里插入图片描述

  • B+树还可以通过p开始顺序查找

在这里插入图片描述

3、B+树 VS B树

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.3.2 B+树的小结

  • B树只能进行随机查找,而B+树可以进行随机查找和顺序查找

在这里插入图片描述


7.4 散列表

7.4.1 散列表的基本概念

在这里插入图片描述

在这里插入图片描述

1、散列查找

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.4.2 散列函数

1、除留余数法
  • 选最大质数 —— 为了让不同的关键字冲突尽可能少

在这里插入图片描述

在这里插入图片描述

2、直接定址法

在这里插入图片描述

3、数字分析法

在这里插入图片描述

4、平方取中法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


7.4.3 处理冲突的方法

  • 之前使用的是拉链法
一、开放定址法

在这里插入图片描述

1、线性探测法

在这里插入图片描述

在这里插入图片描述

  • 哈希函数取模,和冲突函数取模,选的取模值不一定相同,看看下图标识
    • 一个选择13,一个选择16

在这里插入图片描述

  • 开发定址法:即可能和同义词发生冲突,也可能和非同义词发生冲突。

在这里插入图片描述

  • 注意,此处对于空位置的判断也算作一次比较,和上一小节的拉链法不算空位置有区别

在这里插入图片描述

  • 21%13=8,所以下图从84开始找,一旦遇到空(例如,10那个位置),就表明不需要在找下去了

在这里插入图片描述

  • 上图里我们说到:越早遇到空位置,就可以越早确认查找失败。可是也有不适应的情况!
    • 下图中假设删除元素1,使得2位置变空。
    • 此时若要查找27元素,27%13=1,从1位置(14)开始找,可是此时2位置为空,就无法查找到4位置了元素27了。
  • 针对上诉情况,规定在删除一个元素时不能简单删除元素就完事了,还需要做个删除标记,让查找时可以此处是因删除而空,而不是没有初始元素才空的。还需要接着往后找。

在这里插入图片描述

  • 下面的看似表很满,实际真实数据并不多,也是开放定址法的一个弊端。

在这里插入图片描述

  • 查找成功的效率分析

在这里插入图片描述

  • 查找失败的效率分析
    • 只有位置为空,才比较1次,不然就得一直遍历到13这个位置,才能确认失败。

在这里插入图片描述

  • 为什么查找效率低:同义词、非同义词聚集堆积
  • 聚集是因选取不当的处理冲突的方法造成的

在这里插入图片描述

2、平方探测法
  • d是针对初始位置操作的,例如:元素32的位置就是6-1,而不是上一个位置7-1。

在这里插入图片描述

在这里插入图片描述

  • 平法探测法对于散列表的长度有要求:4*j+3

在这里插入图片描述

3、伪随机序列法

在这里插入图片描述

在这里插入图片描述

二、再散列法

在这里插入图片描述

7.4.3 处理冲突的方法小结

在这里插入图片描述


拉链法的小优化

  • 保持冲突的同义词的链表,进行有序链接

在这里插入图片描述

在这里插入图片描述


考研人加油!!!

  • 21
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的clz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值