2-3-4树和红黑树
来源:互联网 发布:数据库通用访问工具 编辑:程序博客网 时间:2024/06/05 00:33
一、2-3-4树和红黑树的关系
可以证明2-3-4树和红黑树在数学上是同构(等价)的。在历史上,也是2-3-4树先被提出来,后来红黑树由它发展而来。
二、如何把2-3-4树转为红黑树
有三条规则分别对应有2,3,4个子节点的情况:
1、若该节点有两个子节点,则把该节点转为红黑树中的黑色节点。
2、若该节点有三个子节点,则节点中存有两个数据项,将这节点转为两个节点中来存储这两个数据项,这两个节点构成父子关系。并把父节点设为黑色节点。把该节点的子节点中的两个拿出来作为新生成子节点的子节点,剩下的一个子节点直接连接在新生成的父节点上。有根据生成子节点的左右关系有两种生成方式:
3、若该节点有四个子节点,则存有三个数据项。我们将该节点其转化为一个父节点和两个子节点。把父节点设为黑色节点,再把原来的四个子节点连接到新的子节点上即可。
可以验证按照上述三个规则,把一个2-3-4树转换后形成的树,是符合红黑树的规则的,就是一颗红黑树。
也可验证红黑树的颜色变换和2-3-4树的4-节点分裂操作是等价的
红黑树的旋转操作和2-3-4树的3-节点分裂等价
三、两者的效率分析:
与一般的二叉搜索树一样,红黑树的查找、插入和删除的时间复杂度都是O(logN),存储空间上多了一个存储颜色的boolean变量。事实上,红黑树的插入操作比普通二叉搜索树要慢一点,因为在插入过程中需要进行一些一切其他操作以保证树的平衡。这点消耗是值得的,这使得红黑树对有序数据的操作不会慢到O(N)的地步。
2-3-4树的复杂度与红黑树一致,但是存储空间的利用率没有红黑树高。但是在java语言中,存储的往往是对象的引用而不是对象本身,这就使得两者差异没那么重要了。可以看出2-3-4树的java实现要比红黑树简单,所以更加常用。对于其他保存数据不是引用的语言平台,则需要慎重考虑两者的优劣。
四、关于树中的删除操作
在树中删除一个节点是十分复杂的。一种解决方法是在节点中加入一个boolean数据项,用来表示该节点是否存在或删除。这种方法并没有把节点从树中正真移除,只是我们不能再去访问这个节点的内容而已。
参考文献:
java数据结构与算法(第二版)
- 2-3-4树和红黑树
- 2-3-4树和红黑树的转变方法
- 搜索:平衡2-3-4树和(左倾)红黑树
- 2-3-4树和B树
- 第10章 2-3-4树和外部存储
- 数据结构和算法学习(10)- 2-3-4树
- 【数据结构和算法06】2-3-4树
- 数据结构和算法06 之2-3-4树
- 红黑树和AVL树
- 红黑树和AVL树
- 红黑树和AVL树
- 红黑树和二叉树
- 1!+2!+3!+4!............n!的和
- 交换链表的奇偶位(比如1和2,3和4,5和6。。。交换)
- Python 2和3
- 已安装apache2.2和php5.3的情况下安装apache2.4和php5.5
- 排序二叉树和红黑树
- 红黑树和二叉平衡树
- 马拦过河卒
- java web工程打成war包,部署到Linux tomcat上,运行失败的可能原因。
- git使用细节精细
- JVM(Java虚拟机)优化大全和案例实战
- html a标签img标签的认识
- 2-3-4树和红黑树
- 贝塞尔曲线
- KVO、KVC的实现原理与应用
- iTunes Connect 上架 -- App store 搜索不到 解决方法
- MD5加密
- P数序列
- sklearn模型保存(pickle模块和joblib模块)
- 实习小记 用list来免去查询数据时打开数据库链接所占用的资源
- 如何提高编译snap应用的速度