【半ZZ】红黑树 VS AVL树
来源:互联网 发布:中航804知乎 编辑:程序博客网 时间:2024/05/16 12:39
1 好处 及 用途
红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。
当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。
在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。
典型的用途是实现关联数组
2 AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它。
引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度.
AVL树的定义:
一棵AVL树满足以下的条件:
1>它的左子树和右子树都是AVL树
2>左子树和右子树的高度差不能超过1
从条件1可能看出是个递归定义,如GNU一样.
性质:
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)).
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)).
从1这点来看红黑树是牺牲了严格的高度平衡的优越条件为代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高.
看看人家怎么评价的:
3 http://wangdei.javaeye.com/blog/236157 关于二者的比较
- 【半ZZ】红黑树 VS AVL树
- 【半ZZ】红黑树 VS AVL树
- 红黑树 VS AVL树
- AVL树 VS 红黑树
- 红黑树 VS AVL树
- AVL 树 VS红黑树
- 红黑树 VS AVL树
- 红黑树 vs AVL
- 平衡二叉树( AVL树 ) (zz)
- 自平衡二叉搜索树:红黑树 VS AVL树
- 红黑树(red-black tree)算法,附AVL树的比较zz
- RBT VS. AVL
- AVL 树与红黑树
- 红黑树和AVL树
- AVL树、红黑树
- 红黑树和AVL树
- 红黑树与AVL树
- /*****/AVL树&红黑树
- 组合的递归算法
- ZJUT1632 搭积木 ZJUT1278 最多拦截导弹数 LIS
- perl ibm相关经典文档集合链接
- 2011年2月15日到福州
- LINUX+APACHE+PHP+BDB+OPENLDAP+PHPLDAPADMIN安装配置
- 【半ZZ】红黑树 VS AVL树
- 给VC/SDK中的应用程序加上皮肤(实例演示)
- Gigi项目简介
- ubuntu内核源码树的建立
- 开发环境准备
- extjs3.3.1中继承实现代码的抽取和调用
- JDBC连接H2 数据库(转http://conanca.javaeye.com/blog/654679)
- win-pv driver 编译安装及测试出的bug
- ActionContextCleanUp StrutsPrepareAndExecuteFilter StrutsPrepareFilter,StrutsExecuteFilter FilterDispatcher