没有合适的资源?快使用搜索试试~ 我知道了~
1.红黑树 - 1 - 1.1需求分析 - 1 - 1.2算法设计 - 1 - 1.2.1旋转 - 1 - 1.2.2插入 - 2 - 1.2.3删除 - 4 - 1.3 数据结构设计 - 5 - 1.4 运行结果 - 6 - 1.5 结果分析 - 7 - 1.6 优化 - 8 - 1.7 心得体会 - 8 - 1.8未来工作 - 8 - 2. 区间树 - 8 - 2.1 需求分析 - 8 - 2.2 程序设计 - 9 - 2.3数据结构设计 - 9 - 2.4运行结果 - 10 - 2.5 结果分析 - 11 - 2.6 心得体会 - 12 - 2.7未来工作 - 12 -
资源推荐
资源详情
资源评论
中国科学技术大学
算法第二次实验报告
1. 红黑树 ....................................................................................................................................... - 1 -
1.1 需求分析 ........................................................................................................................ - 1 -
1.2 算法设计 ........................................................................................................................ - 1 -
1.2.1 旋转 ..................................................................................................................... - 1 -
1.2.2 插入 ..................................................................................................................... - 2 -
1.2.3 删除 ..................................................................................................................... - 4 -
1.3 数据结构设计 ............................................................................................................... - 5 -
1.4 运行结果 ....................................................................................................................... - 6 -
1.5 结果分析 ....................................................................................................................... - 7 -
1.6 优化 ............................................................................................................................... - 8 -
1.7 心得体会 ....................................................................................................................... - 8 -
1.8 未来工作 ........................................................................................................................ - 8 -
2. 区间树 ..................................................................................................................................... - 8 -
2.1 需求分析 ....................................................................................................................... - 8 -
2.2 程序设计 ....................................................................................................................... - 9 -
2.3 数据结构设计 ................................................................................................................ - 9 -
2.4 运行结果 ...................................................................................................................... - 10 -
2.5 结果分析 ...................................................................................................................... - 11 -
2.6 心得体会 ..................................................................................................................... - 12 -
2.7 未来工作 ...................................................................................................................... - 12 -
- 1 -
1.
1.
1.
1.
红黑树
1.1
1.1
1.1
1.1 需求分析
需求分析
需求分析
需求分析
本实验要求实现红黑树各种操作如 SEARCH , PREDECESOR , SUCCESSOR ,
MINIMUM , MAXIMUM , INSERT , DELETE 等。
红黑树是一种自平衡二叉查找树 , 是在计算机科学中用到的一种数据结构 , 典型的用途
是实现关联数组。它是在 1972 年由 Rudolf Bayer 发明的,他称之为 " 对称二叉 B 树 " ,它现
代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于 1978 年写的一篇论文中获得的。它是
复杂的 , 但它的操作有着良好的最坏情况运行时间 , 并且在实践中是高效的 : 它可以在 O(log
n) 时间内做查找,插入和删除,这里的 n 是树中元素的数目。
红黑树是每个节点都带有颜色属性的二叉查找树 , 颜色或红色或黑色 。 在二叉查找树强
制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求 :
1. 每 个结点或红或黑。
2. 根 结点为黑色。
3. 每 个叶结点 ( 实际上就是 NULL 指针 ) 都是黑色的。
4. 如 果一个结点是红色的 , 那么它的周边 3 个节点都是黑色的。
5. 对 于每个结点 , 从该结点到其所有子孙叶结点的路径中所包含的黑色结点个数都一
样。
这些约束强制了红黑树的关键性质 : 从根到叶子的最长的可能路径不多于最短的可能
路径的两倍长 。 结果是这个树大致上是平衡的 。 因为操作比如插入 、 删除和查找某个值的最
坏情况时间都要求与树的高度成比例 , 这个在高度上的理论上限允许红黑树在最坏情况下都
是高效的,而不同于普通的二叉查找树。
要知道为什么这些特性确保了这个结果 , 注意到属性 5 导致了路径不能有两个毗连的红
色节点就足够了 。 最短的可能路径都是黑色节点 , 最长的可能路径有交替的红色和黑色节点
。
因为根据属性 4 所有最长的路径都有相同数目的黑色节点 , 这就表明了没有路径能多于任何
其他路径的两倍长。
在很多树数据结构的表示中,一个节点有可能只有一个子节点,而叶子节点包含数据
。
用这种范例表示红黑树是可能的 , 但是这会改变一些属性并使算法复杂 。 为此 , 本文中我们
使用 "nil 叶子 " 或 " 空 (null) 叶子 " 。
1.2
1.2
1.2
1.2
算法设计
算法设计
算法设计
算法设计
操作 SEARCH, , PREDECESOR , SUCCESSOR , MINIMUM , MAXIMUM 与二查检索
树的对应操作几乎相同。这里只介绍旋转、插入、删除。
1.2.1
1.2.1
1.2.1
1.2.1 旋转
由于插入 、 删除操作对树作了修改 , 结果可能违反红黑树的五个性质 。 为保持这些性质
,
就要改变树中某些结点的颜色以及指针结构。指针结构的修改通过旋转来完成。
- 2 -
当在某个结点 x 上做左旋时 , 假设它的有孩子 y 不是 nil[T] , 左旋以 x 与 y 之间的链为
“ 支轴 ” 进行 。 它使 y 成为该子树新的根 , x 成为 y 的左孩子 , 而 y 的左孩子成为 x 的有孩
子。右旋与左旋对称。左旋代码如下:
void RBTree::LeftRotate(RBTNode * x){
RBTNode * y =x->right;
x->right=y->left; //turn y's left subtree into x's right subtree
if (y->left!=Nil)
y->left->parent=x;
y->parent=x->parent; //link x's parent to y
if (x->parent==Nil)
root=y;
else if(x==x->parent->left)
x->parent->left=y;
else x->parent->right=y;
y->left=x;
x->parent=y;
}
1.2.2
1.2.2
1.2.2
1.2.2 插入
向一颗含 n 个结点的红黑树插入一个结点 z 的操作可在 O(lgn) 时间完成 。 利用二叉查找
树的 Tree_Insert 过程,将 z 插入树内,并将其着红色。为保证红黑树的性质,调 用
RB_INSERTT_FIXUP 来对结点重新着色并旋转。 RB_INSERTT_FIXUP 代码如下:
void RBTree::RB_Insert_fixup(RBTNode* z){
RBTNode* y;
while (z->parent->color==red){
if (z->parent == z->parent->parent->left){
y=z->parent->parent->right;
//case 1
if (y!=Nil && y->color==red){
z->parent->color=black;
y->color=black;
z->parent->parent->color=red;
剩余12页未读,继续阅读
资源评论
changbiao1990
- 粉丝: 5
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功