算法导论-红黑树基本概念
来源:互联网 发布:淘宝上李宁官方网店 编辑:程序博客网 时间:2024/06/16 03:43
刚刚接触到红黑树的时候,感觉很奇怪,二叉树已经很好用了,为什么要发明红黑树??看到算法导论的目录才明白,二叉树在执行查找,删除操作的时候,时间复杂度为O(h),这时间复杂度与二叉树的高度有关,如果二叉树高度较小,自然很方便,但是如果遇到树的高度较高时(所有的数据都在一根树枝上),二叉树和链表就差别不大了。所以发明了红黑树,红黑树是一种平衡搜索树,红黑树的高度最多为2lg(n+1),时间复杂度为O(h'),h'<2lg(n+1),所以红黑树相对于二叉树而言性能更好。
首先说明红黑树的五大性质:
1.每个节点不是黑色就是红色,非黑即红。
2.根节点一定是黑色。
3.每个叶节点一定是黑色。
4.每个红色节点的两个子节点为黑色。
5.对于每个节点,该节点到所有后代叶节点的路径上黑色节点的数目相同。
然后定义:红黑树的节点的黑高指得是节点x某支路上黑色节点的数目(不包括节点x,但是包括叶节点(NIL))。
引理:一棵具有n个节点的红黑树,其树高至多为2lg(n+1)
证明:
方法1(数学归纳法):
首先我们要证明节点x的红黑树具有2^bh(x)-1个内部节点(bh(x)表示节点x的黑高)
1.当具有节点x的红黑树的树高为0时,黑高也为0,则内部节点为0,符合上述公式。
2.假设当节点x的红黑树高度不为0时,不妨设黑高为bh(x),则其子节点的黑高为bh(x)或bh(x)-1,假设其子节点满足上述式子,则有
其子节点至少有2^(bh(x)-1)-1个内部节点,则节点x的内部节点可得2^(bh(x)-1)-1+2^(bh(x)-1)-1+1=2^bh(x)-1,结果与上述结论相同,故命题得证。
由红黑树的性质4可知,黑色节点一定比红色节点多,则树高h<=2bh(x),则有n>2^(h/2)-1,化简可得h<=2lg(n+1)。
方法2:
假设红黑树如上图所示,现将红色节点与其黑色的父节点合并,合并后的红黑树图如下图所示:
这是一颗2-3-4树,这棵树的高度等于黑高bh(x),每个节点最少包含两个最多包含四个节点,则该树内部节点数目2^(bh(x))-1<n<4^(bh(x))-1,得到了证明一同样的结论,同理可知h<2bh(x),同上可知h<2lg.(n+1)。
- 算法导论-红黑树基本概念
- 数据结构与算法导论之基本概念和术语介绍
- 算法导论 ch13 红黑树
- 算法导论 红黑树
- 算法导论 ch13 红黑树
- 算法导论 红黑树基础知识
- 红黑树(算法导论13)
- 算法导论红黑树
- 算法导论-----红黑树
- 【算法导论】红黑树
- 算法导论-红黑树
- 红黑树(算法导论)
- 算法导论-------------红黑树
- 算法导论--红黑树
- 算法导论—红黑树
- 算法导论之红黑树
- 算法导论(红黑树)
- 算法导论之红黑树
- python循环
- Atomin**rProDocumentation 9.34 破解小记
- ios JPEGDecompressSurface : Picture decode failed: e00002d1 解决
- Python函数概况
- 通过输入下三角或者上三角实现输出对称矩阵
- 算法导论-红黑树基本概念
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(二十二)
- 题目 14 食物链
- RxJava2_4:并行处理请求和数据缓存池
- CAS-Client客户端研究(一)-AuthenticationFilter
- 并发与多线程(一)
- 【Java学习笔记】控制语句习题集
- 还是A+B
- VLC支持的视频和音频文件扩展名