首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
系统相关
> 详细
Linux内核之于红黑树and AVL树
时间:
2015-06-28 18:54:41
阅读:
165
评论:
0
收藏:
0
[点我收藏+]
标签:
为什么Linux早先使用AVL树而后来倾向于红黑树?
实际上这是由红黑树的实用主义特质导致的结果,本短文依然是形而上的观点。红黑树可以直接由2-3树导出,我们可以不再提红黑树,而只提2-3树,因为2-3树的操作太简单。另外,任何红黑树的操作和特性都可以映射到2-3树中。因此红黑树和AVL树的比较就成了2-3树和AVL树的比较。
它们俩的区别在哪?2-3树的平衡是完美平衡的,但是树杈数量却可以是3个,而AVL树差一点点就完美平衡的标准二叉树,它只允许子树的高度差最多为1。可见这么看来,2-3树比AVL树更加平衡,但是2-3树转换为二叉树,即红黑树的时候,它就不再能保持完美平衡了,因为三叉节点要分割出来一个红色节点,使得子树高度加1,这么看来,红黑树在严格意义上完全没有AVL树平衡!
AVL树在每一次插入删除时都要保持它那“差一点点的平衡”,而红黑树则只需要不扰动黑色节点即可,以2-3树来讲,它毕竟是牺牲了二叉树的标准特性变成三叉树保持平衡的。可见,红黑树的插入/删除开销远小于AVL树,对于查询开销,理论上,更加平衡的AVL树要比红黑树好(因为对于2-3树,遇到三叉节点,你需要比较2次),但是,红黑树的2倍树高的不平衡状态是一个小概率事件!因此对于正常情况,你可以认为AVL树和红黑树的查询开销是一样的,总之,常规情况下,红黑树要好于AVL树。
AVL树太理想了,而Linux内核中的数据结构,特别是虚拟内存管理模块,尤其是CFS调度器的task对列,它们是会被频繁插入删除的,因此选择了红黑树而不是AVL树。
Linux内核之于红黑树and AVL树
标签:
原文地址:http://blog.csdn.net/dog250/article/details/46672953
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
gitlab 在linux安装环境下存储地址
2021-07-29
当 Mac 未检测到外部显示器时如何修复它
2021-07-29
Ubuntu18.04安装qemu遇到问题-qemu : Depends: qemu-system (>= 1:2.11+dfsg-1ubuntu7)
2021-07-28
[Linux]Shell编程【待续】
2021-07-28
Linux系统资源查看
2021-07-27
Archlinux爬坑指南
2021-07-27
[Linux]Linux发展历程
2021-07-27
非桌面系统 (ubuntu)安装google-chrome
2021-07-27
在Ubuntu18.04系统中源码安装 gcc7.3.0
2021-07-23
Linux快捷键杂记
2021-07-22
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!