- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章_红黑树-Final_算法分析与设计_杭电_褚一平
if p[y]=nil[T] then //y是根 root[T] ← x; //根指针指向x else //y非根 if y=left[p[y]] then //y是双亲的左子 left[p[y]] ← x; else right[p[y]] ← x; if y≠z then //case 3 y的内容copy到z; if color[y]=black then RBDeleteFixup(T, x); //调整算法 return y; //实际是删除y节点 } * * 删除算法(二) 讨论 x:或是y的唯一孩子;或是哨兵nil[T] 可以想象将y的黑色涂到x上,于是 - 若x为红,只要将其涂黑,调整即可终止; - 若x为黑,将y的黑色涂上之后,x是一个双黑节点,违反性质1。 处理步骤如下 step 1:若x是根,直接移去多余一层黑色(树黑高减1),终止; step 2:若x原为红,将y的黑色涂到x上,终止; step 3:若x非根节点,且为黑色,则x为双黑。通过变色、旋转使多余黑色向上传播,直到某个红色节点或传到根; * * 删除的调整算法 调整分8种情况 case 1~4为x是p[x]的左子;case 5~8为x是p[x]的右子 case 1:x的兄弟w是红色 ∵ w是红, ∴ p[x]必黑 目标:将case1转为case2,3,4处理 * * 删除调整的实例(一) case 2:x的黑兄弟w的两个孩子均为黑 目标: x上移到B,通过A和D的黑色上移 * * 删除调整的实例(二) case 3:x的黑兄弟w的右子为黑且左子为红 目标:将case3转为case4 * * 删除调整的实例(三) case 4:x的黑兄弟w的右子为红(左子为黑或红) 目标:终结处理。x的黑色上移给B,B的原色下移给D,D将黑色下移给C和E,通过旋转解决矛盾点C * * 删除调整的实例(四) 其平均和最差检索时间复杂度O(log2n) 为了恢复红黑树的平衡,需要自底向根进行调整 红黑树的结点组成 数据、颜色、左指针、右指针、父指针 如不使用父指针,也可以使用堆栈, 保存从根结点到新插入或删除结点的路径上遇到的每个结点,方便回溯 * * 红黑树插入、删除算法总结 典型的用途是:关联数组 C++ STL中的关联式容器:集合set、多重集合multiset、映射map、多重映射multimap等均采用了红黑树的变体 setint s; mapint, strings Java中的容器Set,Map的构造器TreeSet,TreeMap也使用了红黑树 在Linux内核中,用于组织虚拟区间的数据结构也是红黑树 * * 5 、红黑树的应用 二叉查找树对平衡没有要求 AVL树要求完全平衡 红黑树只要求局部平衡:懒汉平衡 时间复杂度和AVL相同,但统计性能比AVL树更高 任何不平衡都会在三次旋转之内解决 增、删算法性能好、易于实现 减少了开销、性能几乎没有下降 * * 二叉查找树 VS. 红黑树 VS. AVL树 红黑树的定义 红黑树的性质 红黑树的旋转 红黑树的结点插入 红黑树的结点删除 红黑树的应用 * * 本章小结 * 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 * 引入“颜色”的目的在于使得红黑树的平衡条件得以简化。 * set: 0个或多个不重复元素(Key)的集合。 例如:setint s; ? {1,2,3…} map:0个或多个不重复元素对的集合。 例如:mapint, strings;? { {1, Tom}, {2, Jane}, …} multiset: 允许有重复键值的set。 multimap:允许有重复键值的map * * * * Chapter13 红黑树 * * 一.红黑树定义 二.红黑树性质 三.红黑树旋转 四.红黑树插入 五.红黑树删除 六.红黑树应用 * * 内容提要 Red-Black tree, 简称RB-Tree 它是在1972年由鲁道夫·贝尔发明的,他称之为“对称二叉B树”,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的 特点:利用对树中的结点 “红黑着色”的要求,降低了平衡性的条件,达到局部平衡,有着良好的最坏情况运行时间,它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。 * * 1、红黑树定义 平衡的扩充二叉搜索树
文档评论(0)