【linux温故】红黑树

为了了解 CFS调度,特意学习了一下红黑树相关的基础知识。

网上一大堆将红黑树的,一上来就是跟你说各种性质,各种操作技巧,天花乱坠,通通讲的是 how,典型的国内教材风格。让人看了一脸懵逼。

其实最重要的,不是跟你说 什么是 Red Black Tree,记住哪几种性质,怎么染色。。。最重要的是,先跟你说明白,why? 为什么会有这玩意,是用来解决什么问题的,这才是认知的真正次序。

这里参考了知乎上的一篇文章,写得很好:
https://zhuanlan.zhihu.com/p/104048881

老规矩,先提出问题:

提出问题

计算机中非常经典的问题了,如何快速查找/插入/删除?

学过数据结构的人,都知道,用 hash 表,时间复杂度接近 常数 级别。但是他有个弊端,就是内存占用比较大。

而红黑树,是一种 查找/插入/删除 性能都非常出色的数据结构,而且内存占用比 hash 表小,所以,在一些对于资源占用有限制,以及动态资源的查询,插入等动态操作的场景, 红黑树有更好的表现。

linux 内核的 CFS 调度底层用的数据结构就是 red-black tree。

这部分内容,参考了:https://blog.51cto.com/u_15990681/6099774

红黑树原理

这部分内容,大家就直接看这篇文章吧,我就不写了: https://zhuanlan.zhihu.com/p/104048881

整体的思考线是:
搜索二叉树 -> 但是某些情况下会退化为一维数组 -> 提出了平衡二叉树 -> 但是平衡二叉树每次插入删除之后,需要维持平衡,开销太大 -> 提出了2,3 树的概念,看2,3树是怎么解决这个问题的 -> 通过2,3树的改造,变成了 红黑树,红黑树就是 2,3树的一个变体而已 -> 最后,才是红黑树为了维持平衡的各种操作方法和技巧:旋转、着色、等等。。。

你看,最后才是 “术” 的内容,这才是正确的思维方式。

从某种意义上来说,其实最不重要的是 “术”,而大家习惯,开门就讲“术”,因为可以显示自己的工作量,自己的学识。。。。。工作学习中,很多这样的人。你很烦,但是这些人总是存在,而且广受好评。

最后

似乎对于 红黑树 ,啥也没讲。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值