红黑树(RBTree)
来源:互联网 发布:squid代理 java程序 编辑:程序博客网 时间:2024/06/08 23:38
红黑树定义
class Node<T>{ public T value; public Node<T> parent; public boolean isRed; public Node<T> left; public Node<T> right;}
红黑树性质
1. 任何一个节点都有颜色,黑色或者红色2. 根节点是黑色的3. 父子节点之间不能出现两个连续的红节点4. 任何一个节点向下遍历到其子孙的叶子节点,所经过的黑节点个数必须相等5. 空节点被认为是黑色的 (每个叶节点都是黑的,即树尾端NIL指针或NULL节点)
红黑树的各种操作的时间复杂度
能保证在最坏情况下,基本的动态几何操作的时间均为O(logn)
红黑树相比于BST和AVL树有什么优点?
红黑树是牺牲了严格的高度平衡的优越条件为代价,它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。 相比于BST,因为红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。 红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高,所以在插入和删除中所做的后期维护操作肯定会比红黑树要耗时好多,但是他们的查找效率都是O(logN),所以红黑树应用还是高于AVL树的. 实际上插入 AVL 树和红黑树的速度取决于你所插入的数据.如果你的数据分布较好,则比较宜于采用 AVL树(例如随机产生系列数),但是如果你想处理比较杂乱的情况,则红黑树是比较快的
红黑树相对于哈希表,在选择使用的时候有什么依据?
权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性。 总体来说,hash查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash。但若你对内存使用特别严格, 希望程序尽可能少消耗内存,那么一定要小心,hash可能会让你陷入尴尬,特别是当你的hash对象特别多时,你就更无法控制了,而且 hash的构造速度较慢。 红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。 红黑树通过扩展节点域可以在不改变时间复杂度的情况下得到结点的秩。
红黑树实际运用
红黑树(Red-Black Tree,以下简称RBTree)的实际应用非常广泛,比如Linux内核中的完全公平调度器、高精度计时器、ext3文件系统等等,各种语言的函数库如Java的TreeMap和TreeSet,C++ STL的map、multimap、multiset等。 RBTree也是函数式语言中最常用的持久数据结构之一,在计算几何中也有重要作用。值得一提的是,Java 8中HashMap的实现也因为用RBTree取代链表,性能有所提升
红黑树插入删除详解
[美团点评技术团队](http://tech.meituan.com/redblack-tree.html)[红黑树查找、插入C++实现](http://tech.meituan.com/redblack-tree.html)
0 0
- 红黑树(RBtree)
- 数据结构-红黑树(RBTree)
- 红黑树(RBTree)
- RBTree(红黑树)
- 红黑树(RBTree)的实现
- 红黑树-RBTree
- RBTree红黑树
- RBTree----红黑树
- RBTree(红黑树)
- 红黑树--RBTree
- 红黑树【RBTree】
- 算法编程_红黑树(RBTree)
- 红黑树(RBTree)之插入结点图解
- 红黑树(RBTree)之删除结点图解
- 二叉搜索树—RBTree(红黑树)
- Linux内核之rbtree(红黑树)
- RBTree(红黑树的简单实现)
- RBTree-红黑树的实现
- UML用例图总结
- [SDOI2017]树点涂色
- Spring AOP (3)
- 宅急送 项目第四天 取派员和区域管理
- 浅谈拒绝服务攻击的原理与防御(2):反射型DDOS
- 红黑树(RBTree)
- Java程序员必读之热门书单
- 正则笔记
- 机器学习—模型评估与选择
- JLOI2017——相逢是问候,离别是祝愿
- 怎么样在C++模板类编写类成员cleanup的部分
- LeetCode_198、213、222三题
- Spring的构造注入和设值注入
- Java性能优化