当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (xa4)红黑树:删除 > 08xa4-9: 归纳体味
好 终于到了可以总结的时候了
在介绍过红黑树在各种情况下的调整算法之后
我们不难发现它与AVL树至少一样
每一次删除操作 在每一高度上至多只会花费常数时间
由此可知 红黑树的删除操作
时间复杂度不会超过logn
然而我们的目标还不止于此
是的 我们还需要更为精细的来考察
其中所涉及的拓扑结构调整的工作量
也就是旋转操作的累计次数
为此 我们可以将以上4种情况的处理流程
汇总为这样一个流程图
首先是BB-1
你应该记得 在这种情况下我们的处理是一蹴而就的
成本是一次重染色 以及一轮重构
也就是说 在这种情况下 我们的确只需要常数次旋转操作
而接下来的BB-2R 从计算的角度来看更为简明
你应该还记得 在这里我们只需要一轮重染色
即可完成对双黑缺陷的修复
也就是说 这种情况所涉及的旋转次数为0
再来看更为复杂的BB-2B
你应该记得 在这种情况下我们会做一轮重染色
然而遗憾的是 此时除非我们已经抵达树根
否则我们并不能保证算法就此结束
事实上我们往往会在一个更高的层次上回到最初的问题
并相应的进行处理
在最坏的情况下 这种不断的向上蔓延可能会多达logn步
然而无论如何 我们可以看到 在这种情况下
我们所做的操作 只涉及重染色
而没有任何的拓扑结构的调整
因此这种情况所实质对应的旋转操作次数也是0
最后 自然是最为复杂的BB-3
你应该记得 此时我们的确需要做一轮重染色
以及一次旋转调整
并在随后在更高的层次上 转入到问题的原点
然而正如我们已经强调指出的
此时的原点并非完全的原点
什么意思呢
你应该还记得 如果的确是从BB-3这种情况转化而来
那么接下去必然不可能是令人生厌的BB-2B
而只能是BB-2R甚至是BB-1
从流程图可以看出 无论是BB-2R 还是BB-1
接下来都不会做更多的迭代
而反过来只需要再进行一轮调整
即可完成整个的双黑修复
由此可见 在这种情况下
我们所需要执行的旋转操作 累计也不过是常数次
凡此种种 通过以上概括我们可以发现
红黑树的删除操作 至多只需做logn次的重染色
以及常熟次的结构调整
这也是红黑树优于AVL树的一个重要方面
你应该记得 我们在介绍红黑树的一开始就曾经提到
这一特性 对于持久性结构的实现是至关重要的
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试