日拱算法之不能不知道的“红黑树”

简介: 不知道前端小伙伴们都了解“红黑树”吗?本瓜,之前听是听过,但是它到底是干嘛的,并不十分清楚。在认识了平衡二叉树、AVL 树之后,现在已经来到了这个节点,必须来看下“红黑树”了!

image.png

不知道前端小伙伴们都了解“红黑树”吗?本瓜,之前听是听过,但是它到底是干嘛的,并不十分清楚。在认识了平衡二叉树、AVL 树之后,现在已经来到了这个节点,必须来看下“红黑树”了!


今天也不是植树节,却依旧要来种树!🌳🌳🌳


闲言少叙,冲!(ง •_•)ง


算法专栏 关于树的文章传送门:


先来看下二叉查找树是为什么而诞生的!

我们都知道:数组适合查询这种静态操作(O(1)),不合适删除与插入这种动态操作(O(n)),而链表则是适合删除与插入,而查询效率则就比较慢了;


二叉查找树就是为了平衡这种静态操作(数组)与动态操作(链表)的差距而诞生的~

image.png


特性:

  • 任意节点左子树不为空,则左子树的值均小于根节点的值;
  • 任意节点右子树不为空,则右子树的值均大于于根节点的值;
  • 任意节点的左右子树也分别是二叉查找树;
  • 没有键值相等的节点;


为了避免如下图极端情况出现:

image.png


二叉查找树必须“平衡”,以防止单边层数过深;


于是就诞生了 AVL 树(平衡二叉树)!


实践复杂度被提升到 O(log2n);

AVL树是带有平衡条件的二叉查找树,左右子树树高不超过1,它是严格的平衡二叉树;

不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而 旋转是非常耗时的


由此我们可以知道AVL树适合用于插入删除次数比较少,但查找多的情况。

为了权衡“平衡”和“旋转耗时”这两个特性,于是 “红黑树” 诞生了!!

image.png


红黑树是一种弱平衡二叉树!通过对任何一条从根到叶子的路径上各个节点着色的方式的限制确保:没有一条路径会比其它路径长出两倍;


相对于要求严格的AVL树来说,它的旋转次数变少;与之对应的,旋转带来的耗时也更小;


红黑树有很广泛的应用:

  • C++的STL中,map和set都是用红黑树实现的;
  • 著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间;
  • IO多路复用epoll的实现采用红黑树组织管理sockfd,以支持快速的增删改查;
  • ngnix中,用红黑树管理timer,因为红黑树是有序的,可以很快的得到距离当前最小的定时器.
  • java中TreeMap的实现;


红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决~~


欲了解更多,推荐阅读 b乎上的回答

image.png


OK,本篇仅分享红黑树诞生的渊源、以及一些概念上的东西,后续带来在 JS 中的实现等等;


其实,空间换时间的概念在很多地方都可以见到,函数式编程更耗费内存,也是空间换时间;神奇~~


撰文不易,点赞鼓励👍👍👍


我是掘金安东尼,公众号同名,日拱一卒、日掘一金,再会~



相关文章
|
算法 C++
【数据结构与算法】—— 手撕红黑树
【数据结构与算法】—— 手撕红黑树
352 0
|
7月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
337 1
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
429 1
|
10月前
|
存储 监控 算法
员工电脑监控场景下 Python 红黑树算法的深度解析
在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
218 7
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
219 9
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
存储 算法 Java
红黑树原理和算法分析
红黑树原理和算法分析
340 0
|
存储 缓存 算法
数据结构与算法 树(B树,B+树,红黑树待完善)
数据结构与算法 树(B树,B+树,红黑树待完善)
191 0
|
存储 算法 Java
红黑树【数据结构与算法Java】
红黑树【数据结构与算法Java】
176 0
|
存储 机器学习/深度学习 算法
【算法社区】从零开始的DS生活 轻松从0基础写出Huffman树与红黑树
本文详细介绍了树的概念和术语,并配合两种树的遍历算法来进行理解。文内附有800行的详细代码实现Huffman树和红黑树,供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~
【算法社区】从零开始的DS生活 轻松从0基础写出Huffman树与红黑树

热门文章

最新文章