数据结构期末注记1x

1. 二叉查找树(BST)的查找性能:
最好情况:与折半查找的判定树类似,平均查找长度为log_2 n
最坏情况:退化成了单支树,平均查找长度为(n + 1)/2
最好情况:二叉查找树的平均高度为O(log_2 n),因此在平均情况下时间复杂性为O(log_2 n)。

就查找性能来讲,BST与二分查找树的查找复杂度都是O(log_2 n)

但是对于树的插入删除节点之后有序性的维护而言,BST更具优势:
BST的插入、删除操作的平均执行时间为O(log_2 n)
而二分查找树的插入删除操作平均执行时间为O(n)

综上,静态查找的时候二分查找更具优势,动态查找的时候BST更具优势

例题:
 

2. 平衡二叉树(AVL树)
AVL树的平均查找长度(ASL)始终保持在O(log_2 n)
包含n个结点的AVL树,其最坏情况的查找、插入、删除的操作时间复杂度为O(log n)

3. BST的结点删除

4. 平衡二叉树的最大深度/最小节点问题

由此公式可以得到在某个深度下的AVL的最小节点数,或者是在某个结点数下的AVL的最大深度。
例题:

eg.1

 N0 = 0, N1 = 1, N2 = 2, N3 = 4     --->      N4 = 7, N5 = 12, N6 = 20, N7 = 33

要是看最少的层数就是 [log_2 (n + 1)] 了。

 eg.2

如果AVL的非叶节点平衡因子都为+1(当然,都为-1也可以),那么平衡二叉树的结点总数应该是该层数的AVL中结点数量最小的。 

5. AVL的插入和删除操作的对比
AVL的插入:一次平衡化即可得到AVL。
AVL的删除:需要进行1次或者多次的平衡化,才能够完全的平衡化AVL。
***应该选择离改变的结点处最近的(也就是下面的)平衡因子绝对值超过1的地方作为根节点处理。

例子:

这步显然:

最终正确答案:

3-4-5用RR旋转容易理解,但是有个小问题:
 
其实是这样理解的:
这就懂了:

5. B树 (m路归并树)
1)最小结点数(第一个结点的儿子数为2,第二个结点儿子数为[ceil(m/2)]):

注:最后一行的h+1层是失败节点数 

2)最小关键字数:(结点数量*每个结点的最少的关键字数,每个结点最小关键字数为最小儿子数减一)

:如果总的关键字数N,则最后一排的失败节点数量为N+1

3)最大结点数(每个结点的儿子结点数量都为m):
1 + m + m^2 + m^3 + ...... + m^(h-1) = (m^h - 1) / (m - 1)

4)最大关键字数(每个结点的关键字数都为m - 1):
总关键字:m^h - 1
由此得到最后一排的失败节点数量为:m^h

5. B树的叶子结点是失败节点,B树高度不算最后一层的叶子结点。

 6. B树的插入删除、结构等方面加深理解:B树平衡过程-根节点为什么最少要有两个子节点?_雪*夹雨夹*雪的博客-CSDN博客https://blog.csdn.net/qq_34999565/article/details/112644993

7. B+树的应用
B+树是一种树数据结构,通常用于数据库和操作系统的文件系统中。
B+树是应文件系统所需而产生的B-树的变形,前者比后者更加适用于实际应用中的操作系统的文件索引和数据库索引,因为前者磁盘读写代价更低,查询效率更加稳定。

8. 哈希过程中的冲突现象、堆积现象的区分:
冲突:不同的关键字具有相同散列地址的现象称为散列冲突(碰撞)。而发生冲突的两个关键字称为同义词(synonym)。
同义词:发生冲突的两个关键字称为同义词(synonym)。
堆积现象:在处理冲突的过程中出现的非同义词之间对同一个散列地址争夺的现象。

9. KMP算法
KMP算法BilibiliI.关注「辉解读」公众号可以获得更多计算机考研的课程;II.全系列课程也可以直接去腾讯课堂天勤主页获取:https://shds.ke.qq.comIII.加天勤官方qq群,和研友门一起交流吧:878328827。去年的全程班中,辉哥讲过一次KMP算法,适合用于对KMP算法考的比较深的学校。对于不太把KMP算法当作重点来考的院校,其实这个算法不需要理解太深,仅仅学到会手工求next数组,最多再求一https://www.bilibili.com/video/BV1jb411V78H?from=search&seid=519750383967024217&spm_id_from=333.337.0.0上面的蓝色串称为主串,下面的黄色串称为模式串。
实现KMP简化的两个条件:
(1) 到指针为止,前面的模式串与主串的序列完全相同。

(2) 模式串左右两端有两个子串是相同的。

KMP算法的核心操作:
直接向前移动模式串,使前后的两个相同子串能够重合。

✳最长公共前后缀:
如果模式串中有多个公共的前后缀,那么我们取最长的那个(这样才能在向前移动模式串实现重合的过程中,不会有中间过程发生其他相同模式串重合的现象)
另:公共前后缀不能是本身

公共前后缀并不是对称的,只是位置相对于指针之前部分的串使对称的:

于是,我们开始研究模式串:

注意我们的模式串是从数组下标1开始。
处理结果:

规律:
第一个默认next[j] = 0
之后的如果没有公共前后缀,那么就next[j] = 1
如果有长(最长的)为i的公共前后缀,那么就将next[j] = i+1

if (i != 0)
next[j] = i 的含义就是将模式串中的 i 号位与当前的指针所指的主串位相比较
if (i == 0)
就是将1号位与主串的下一位相比较的意思
 

||转化成的next数组:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值