一、B树
原文:https://blog.youkuaiyun.com/disiwei1012/article/details/78632859
插入要点:以一个3阶的B树为例:
(1)如果该结点的关键字个数没有到达2个,那么直接插入即可;
(2)如果该结点的关键字个数已经到达了2个,那么根据B树的性质显然无法满足,需要将其进行分裂
分裂的规则是该结点分成两半(注意:这里是把一个结点变成了2个结点),将中间的关键字进行提升,加入到父亲结点中,但是这又可能存在父亲结点也满员的情况,则不得不向上进行回溯,甚至是要对根结点进行分裂,那么整棵树都加了一层。
二、哈希法的平均查找长度(成功和不成功2种)
https://blog.youkuaiyun.com/dancheren/article/details/76359424
不成功的重点:①看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.
②分母是哈希函数的取值个数,即 KEY MOD X 的 X, 而不是所给的一组元素。
三、在N个乱序数字中查找第K大的数字(O(n))
四、哈弗曼树
(1)带权查找长度
注:设初始层数为1,则第L层到第1层的长度为L-1(与深度无关)!
五、最小生成树
(1)普利姆算法
例题:注意加点法是根据每次最小生成树中的结点集合来进行的,而不能在0,1加入集合后,去直接加入3,5!应该查找结点0和2中相邻的最小路径长度的结点。
六、各种排序比较
所谓排序稳定不稳定是说序列中相同元素经过排序后,他们的先后顺序不变。如果变了就不是稳定的。
七.堆排序
https://blog.youkuaiyun.com/l577217/article/details/80516654
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
堆是具有以下性质的完全二叉树:
每个结点的值都大于或等于其左右孩子结点的值,称为大根堆;
或者每个结点的值都小于或等于其左右孩子结点的值,称为小根堆。如下图:
简要核心:
① 建立初堆
反复利用“筛选法”,设二叉树结点为N,从N/2向下取整的位置开始,筛选,逐层向上倒退,直至根节点。(例如建立大根堆)
②进行调整后,堆顶元素(array[0])为最大值,可以理解为先将堆顶元素与堆尾元素交换,然后将堆尾元素移除,将剩余的元素看成一个新的堆,使用筛选法①。
③重复步骤②,直到堆排序完成。
八、树、森林和二叉树的相互转换