为什么STL和linux都使用红黑树作为平衡树的实?
一、为什么STL和linux都使用红黑树作为平衡树的实现
选择红黑树作为底层实现红黑树是一种类平衡树, 但它不是高度的平衡树, 但平衡的效果已经很好了。STL map , nginx,linux 虚拟内存管理,他们都有红黑树的应用。
1. 如果插入一个node引起了树的不平衡,AVL和RB-Tree都是非常多只需要2次旋转操作,即两者都是O(1);但是在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree非常多只需3次旋转,只需要O(1)的复杂度。
2. 其次,AVL的结构相较RB-Tree来说更为平衡,在插入和删除node更容易引起Tree的unbalance,因此在大量数据需要插入或者删除时,AVL需要rebalance的频率会更高。因此,RB-Tree在需要大量插入和删除node的场景下,效率更高。自然,由于AVL高度平衡,因此AVL的search效率更高。
3. map的实现只是折衷了两者在search、insert以及delete下的效率。总体来说,RB-tree的统计性能是高于AVL的。
延伸阅读
二、AVL树(平衡二叉树)
AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树的高度差不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差的绝对值不超过1。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转是非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。:

猜你喜欢LIKE
相关推荐HOT
更多>>
为什么要学IO模型?
一、要学IO模型的原因1、理解应用程序性能IO操作是网络应用程序中的关键部分,它涉及数据的输入和输出。了解不同的IO模型可以帮助开发人员更好...详情>>
2023-10-15 20:56:04
网站域名有www没有www区别?
一、网站域名有www没有www区别区别:主机记录也就是域名前缀不同,以aliyun.com为例网站域名带www:域名前缀为www,解析后的域名为www.iyun.com...详情>>
2023-10-15 17:02:21
gulp与webpack的区别?
一、gulp与webpack的区别gulpgulp强调的是前端开发的工作流程,我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并、雪碧图...详情>>
2023-10-15 14:45:09
insmod 和 modprobe有什么区别?
一、insmod 和 modprobe的区别insmod和modprobe都是在Linux系统中加载内核模块的命令,它们之间的区别如下:1、命令格式不同insmod命令的语法格...详情>>
2023-10-15 14:09:11热门推荐
网站间隙性502怎么解决?
沸Python中动态编译函数compile参数filename的作用是什么?
热Mysql为什么只能支持2000w左右的数据量?
热为什么使用红黑树以及如何使用红黑树?
新HBase、TiDB、TDengine有什么优势?
为什么要学IO模型?
python中 from…import… 、from…import * 与import的区别?
AliSQL和OceanBase是什么关系?
APP开发的核心是什么?
什么是Sanity check,其作用是什么?
什么是Binder?
web前端开发学习路线?
Android开发手机APP软件需要做哪些准备?
网站域名有www没有www区别?
技术干货






