算法导论 第13章 红黑树
来源:互联网 发布:招聘数据出售 编辑:程序博客网 时间:2024/05/13 13:24
算法导论 第13章 红黑树
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[-]
- 一概念
- 定义与性质
- 结构
- 红黑树上的操作
- 二代码
- 三练习
- 1 红黑树的性质
- 2 旋转
- 3 插入
- 4 删除
- 四思考题
- 13-1 动态持久集合
- 13-2 红黑树上的连接操作
一、概念
1.定义与性质
(1)定义
红黑树字义:满足(a)每个结点或是红的,或是黑的(b)根结点是黑的(c)每个叶结点(NIL)是黑的(d)如果一个结点是红的,则它的两个儿子是黑的(e)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点的二叉查找树称为红黑树。
黑高度定义:从某个结点x出发(不包括该结点)到达一个叶结点的任意一条路径上的黑色结点的个数称为x的黑高度。
(2)性质
红黑树确保没有一条路径会比其它路径长出两倍。
一棵有n个内结点的红黑树的高度至多为2lg(n+1)
2.结构
(1)红黑树结点结构
(2)红黑树结构3.红黑树上的操作
SEARCH
PREDECESSOR
MINIMUM
MAXIMUM
INSERT
DELETE
二、代码
头文件
产品代码
测试代码
代码说明:
1.使用NIL作为叶子结点,代替NULL,这样可以少一些特殊处理
2.删除一个结点,delete改为remove,一方面是避免与关键字冲突,另一方面,觉得remove语义更符合
3.insert和remove使用int key代替node *z作为参数,觉得这样使用更方便
三、练习
13.1 红黑树的性质
13.1-1
黑高度是指从根结点到叶结点的路径上黑色结点的个数,需要注意的是,计算黑高度时,出发的结点不计算在内,叶结点是指nil结点
13.1-2
不是,因为违反性质4
不是,因为违反性质5
13.1-3
是
13.1-4
http://zh.clrs-ans.wikia.com/index.php?title=13.1_%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E6%80%A7%E8%B4%A8&variant=zh-cn
叶子深度为黑高度
13.1-5
bh(x)为黑高度,相应的定义rh(x)为红高度,根据RB树性质
rh(x)<=bh(x),而每条路径的bh(x)都想等,最长可能路径bh(x)+rh(x),最短可能路径bh(x),故最长是最短的至多两倍。
13.1-6
最多:2^(2k+1)-1
高少:2^(k)-1
13.1-7
比值最大为2:1,奇数层的结点为红色,偶数层的结点为黑色。n为奇数。
比值最小为0,全部结点都为黑色
13.2 旋转
13.3 插入
13.3-1
1楼说得很好
13.3-2
运行以上程序能得到结果
13.3-6
见算法导论-13.3-6
令待插入的元素是z。在插入的过程记录从根结点到z的路径,并用栈存储。那么z的父结点就是栈顶元素,z的祖父结点就是栈的次顶元素。
在向上迭代的过程同时出栈,控制好出栈的时间,就能正确实现RB-INSERT
13.4 删除
四、思考题
13-1 动态持久集合
见算法导论-13-1-持久动态集合
13-2 红黑树上的连接操作
见算法导论-13-2-红黑树上的连接操作
0 0
- 算法导论代码 第13章 红黑树
- 算法导论 第13章 红黑树
- 算法导论第13章-红黑树
- 算法导论-第13章-红黑树
- 算法导论第13章 红黑树
- 算法导论 第13章 红黑树
- 算法导论 第13章 红黑树
- 《算法导论》第13章 红黑树
- 算法导论-第13章
- 算法导论 第13章 红黑树 C++源代码
- 《算法导论》笔记 第13章 13.1 红黑树的性质
- 算法导论 第13章 红黑树(图文详细解说)
- 《算法导论》读书笔记之第13章 红黑树
- 学习 《算法导论》第13章 红黑树 总结一
- 学习 《算法导论》第13章 红黑树 总结二
- 学习 《算法导论》第13章 红黑树 总结三
- 《算法导论》第13章 红黑树 个人笔记
- 算法导论第12章 红黑树
- codevs2618 核电站问题——记忆化搜索,或者dp
- 【会计考试谢幕】mark一下
- TFS 503 Service Unavailable 解决方法
- java对象的四种引用
- Bypass Windows AppLocker
- 算法导论 第13章 红黑树
- Android 自定义可编辑图文混排EditText
- Native Method
- sql server 生成随机字符串 如: 32U523
- iOS安全系列之一:HTTPS
- android 给界面加指定的字体
- 继续每日数据结构
- iOS9新特性Bitcode
- ubuntu禁用触摸板