注意:每个数据元素的关键字都是唯一不重复的
注意:查找表并不是一种特定的数据结构,他只是对于要执行数据查询工作的数据结构的统称,所以查找表并不是一种新的数据结构。
ASL是平均查找长度 ,可分为查找成功的ASL和查找失败的ASL。
我们用ASL成功和ASL失败来评价查找的效率。
注意:这节课里面除了课后思考,剩下的所有授课过程中的mid 都是相除后向下取整
折半查找判定树的构造
👇下面的mid的结果是相除后向上取整
👆上面的树高直接反映了折半查找的时间复杂度
关于mid是向上取整还是向下取整,对于我们绘制出的折半查找的判断树也会有所不同。
使用分块查找相比于顺序查找提升了一定的性能
LL & RR
LR
RL
汇总
练习:
例一、例二、例三这种可能会出现;例四有点复杂,408可能不会考,能掌握更好;例五、六,如果有题目出现争议(多种做法)的话不太可能会考。
2022年之前都没有考过删除平衡二叉树的题目。
但是至少要掌握例一到例四的课件中的例子。
染色是说参与旋转的结点都需要染色(如父换爷操作后的染色,是说给父节点和爷结点染上相反的颜色)
非根节点的插入只需要关注是否违背不红红的特性
如果新插入结点不是根节点的话,就判断新结点是否满足红黑树定义(口诀),主要是判断满不满足"不红红",如果不满足"不红红"的话就继续按照看叔结点的红色或者黑色继续处理。
插入结点23
插入节点24
插入结点18(注意原来的红黑树里面就有一个18,因此插入新的数据时,可以根据自己的喜好或者实际情况,判断应该插入到左边还是右边)
重点在B树的性质、B树的插入删除查找的操作,对于B树的代码一般不要求掌握,重点把握B树的手算方法。
五叉查找树满足上取整的条件和高度条件的,实际上就是一个五阶B树。
B树的性质:所有的叶子节点(空节点)都出现在树的最后一层,且都在同一层。
强调B树的每次插入都是插入到最底层的“终端节点”的位置,不能插入到终端节点以上的位置,否则就是错误的插入。
更复杂情况下的删除节点的问题:(分为三种情况)
情况1:兄弟够借,借右兄弟的关键字
(以删除关键字38为例)
情况2:兄弟够借,借左兄弟的关键字
情况3:左右兄弟不够借,那就删完之后和兄弟节点合并到同一个节点
(例:删除节点49)
注意B+树的结点的子树个数和关键字个数相等,与B树不一样,B树结点的子树个数=结点的关键字个数+1
B+树通过树的方式查找
B+树的另一种查找方式:
B+树通过底下的节点p的查找方式(B+树的顺序查找)
考研中喜欢将B+树和B树进行对比考察
****磁盘是一种慢速设备,所以计算机读磁盘的操作的时间开销很大,因此B+树的高度越高读磁盘的次数也就越多。
****如果用B+树记录的话,对于非叶子节点因为相比于B树不含有信息记录,所以存储到磁盘中的空间耗费的比B树的少,因此在相同的索引空间大小的要求下,我们可以让B+树比比B树保存更多的关键字,也就是让B+树的阶数更大,树高更矮,使得读磁盘的次数更少,查找更快。
拉链法处理冲突
散列函数的常见处理方法:
方法一:除留余数法
方法二:直接定址法
方法三:数字分析法
方法三:平方取中法
之前介绍了拉链法的方法来处理冲突,接下来介绍开放定址法来处理冲突。
冲突的发生是不可避免的,我们应该尽可能的减少冲突发生的可能性,因此当我们在设计散列函数的时候,对于给定的关键字集合,我们应该根据关键字集合的特性来确定比较合适的散列函数,让这些关键字能够均匀的散列到各个地址中,分布的越均匀发生的冲突的可能性就越小。