红黑树概述

git连接华为软件开发云 我用的是github客户端的git shell 连接。用git bash也可以github客户端下载地址:https://desktop.github.com/1.在华为软件开发云上创建代码仓库2.在本地创建密钥SSH密钥帮助文档公钥是代码托管服务(CodeHub)识别您的用户身份的一种认证方式,通过公钥,您可以将本地git项目与代码托管服务(CodeHub)建立联系, 然后您就可以很方便的将本地... 阅读详情

前言

  红黑树是一种自平衡的二叉搜索树,它能够实现对于任何一个含有N个节点的红黑树,其高度不会超过log(N)。在Java中的HashMap、TreeMap等数据结构中,都使用了红黑树来实现。

红黑树的实现原理

  红黑树与普通的二叉搜索树最大的区别在于它使用了红黑两种颜色来标记节点,并规定了一些特殊的约束条件,从而使得红黑树在插入和删除元素时能够保持平衡。

具体而言,红黑树需要满足以下5个基本特性:

  1. 每个节点要么是黑色,要么是红色;
  2. 根节点必须是黑色;
  3. 每个叶子节点(即空节点)都是黑色;
  4. 如果一个节点是红色的,则其子节点必须是黑色的(反之未必成立);
  5. 从任意一个节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。

通过这些限制条件,我们可以保证红黑树始终能够维持平衡。

红黑树如何保持自平衡

  当我们对红黑树进行插入和删除操作时,可能会导致红黑树失去平衡。此时,我们需要进行一系列调整操作,使得红黑树重新满足上面所述的五个基本特性。

  具体而言,我们需要根据新插入或删除的节点的颜色和其父节点、祖父节点等节点的颜色关系,分别进行左旋、右旋等操作。

比如插入操作可能会发生以下四种情况:

  1. 插入节点为根节点;
  2. 插入节点的父节点为黑色;
  3. 插入节点的父节点为红色,且其叔叔节点(即父亲节点的兄弟)也为红色;
  4. 插入节点的父节点为红色,且其叔叔节点为黑色或者空节点。

针对这四种情况,我们需要进行不同的调整操作,以保持红黑树的平衡。

同理,删除操作也会发生类似的四种情况,需要进行相应的调整。

结合Java中的hashmap树化过程详细讲解

  在Java中的HashMap实现中,当链表长度超过了某个阈值时(默认为8),就会将链表转换为红黑树,以提高搜索效率。

  具体而言,当HashMap执行插入操作时,如果插入节点与该位置的链表已经存在相同的key值,则会进行覆盖操作;否则,它就会将插入节点插入链表的末尾。但是,当链表过长时,这种线性搜索的效率就会变得非常低下。这就是为什么需要将链表转换为红黑树的原因。

  在HashMap树化过程中,HashMap会遍历整个链表,将链表节点挂载到新创建的TreeNode节点上,并对TreeNode节点进行红黑树平衡调整。最后,HashMap会将新创建的红黑树放回到原位置,以取代原来的链表结构。

总结

  红黑树是一种自平衡的二叉搜索树,采用了红黑颜色标记和特殊约束条件来保证树的平衡。其应用广泛,出现于多种数据结构实现(如Java中的HashMap、TreeMap等)。学习和理解红黑树的实现原理,对于我们理解这些数据结构的底层原理和优化非常有帮助。

第六节 LLaVA模型数据处理源码解读(input_ids/labels/attention_mask/image,上篇) 本篇文章直接介绍llava模型数据加工部分,整体结构说明llava多模态模型输入数据格式,其中包含input_ids/labels/attention_mask与image格式,并给出对应代码位置与整个数据加工流程。最重要,通过debug给出数据解释与代码解读,也通过一个真实数据给出模型输入格式说明。当你阅读完此篇文章,绝对透彻理解llava数据加工过程与内容。显然,一篇博客是无法呈现整个数据细节,我将继续下篇博客呈现数据细节处理。result = input.ne(3) # torch.ne函数调用。 阅读详情

相关推荐

Pipeline更多理解

Pipe 类型用途VIGVideo Image Generator:用于图层显示,支持 scaling、rotationRGB简单图层显示,较低优先级DMA主要用于 writeback / WFD / composition output,即从 framebuffer 输出到外部设备(或 memory)Cursor小图层,用于显示指针等很可能是:分别用于主屏、仪表、虚拟显示的输出路径或者用于不同的 display 去做 GPU_TARGET / writeback 的拷贝你看到的意思。

Damon_X的博客 1052

Java使用红黑树的好处

Java使用红黑树的好处有很多,主要有以下几点: 时间复杂度:红黑树是一种平衡二叉树,能够保证插入、删除、查找的时间复杂度都是O(logn),而非平衡二叉树则可能出现插入、删除、查找的时间复杂度退化为O(n)的情况。 可扩展性:红黑树是一种动态数据结构,能够根据数据的增长自动调整自己的结构,使得树保持平衡。 可扩展性:红黑树支持动态插入和删除,能够自动调整树的结构,使得树保持平衡。 稳定性...

weixin_35756637的博客 348

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9179

红黑树入门篇

红黑树 前言: JDK1.7时,HashMap组成:数组+链表。到1.8后,推出了红黑树。 当链表长度超过阈值8,则会将链表转化为红黑树,当小于6时,就会将红黑树转化为链表。 由于二叉查找树的性能极低,所以红黑树自然而然就占据主要地位。 时间复杂度也就是树的深度。 链表(也称暴力O(n))->二叉树->二叉查找树(O(logn)~O(n))->特殊的二叉查找树(红黑树O(...

rootDream的博客 870

openstack卷分离异常问题处理

对于 2023-05-10 之后的所有 OpenStack 版本,需要将Nova 配置为向 Cinder 发送服务令牌,然后 Cinder 接收该令牌。cinder.conf处添加service_token_role配置。1.修改nova的config文件添加如下配置。确定service role 是否存在。有关详细信息,请参阅。重启nova cinder 服务。nova-compute日志。cinder-api日志。

weixin_43391291的博客 475

Claude Code 实战指南:用 AI 玩转终端编程,效率狂飙!

本文介绍了终端 AI 代理工具 Claude Code,涵盖常用命令、使用方法(如 init 初始化、权限配置、工作流程、上下文管理)、MCP 扩展工具及实战案例,展示其通过自然语言辅助开发的高效性与实用性。

个人技术 1万+

数据结构之红黑树

红黑树中节点,一类被标记为黑色,一类被标记为红色。除此之外,一棵红黑树还需要满足这样几个要求:根节点是黑色的每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据。任何相邻的节点都不能同时为红色,也就是,红色节点是被黑色节点隔开的;每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点。为什么说红黑树是近似的平衡二叉树。

weixin_44399827的博客 990

【UE5_蓝图】实时音频采集与动态WAV文件保存实战指南

本文详细介绍了在UE5中使用蓝图实现实时音频采集与动态WAV文件保存的完整流程。从插件配置、录音框架搭建到动态文件名生成和音频参数优化,提供了实用技巧和常见问题解决方案,特别适合需要快速实现音频采集功能的开发者。

weixin_29009669的博客 407

为什么jdk8的HashMap链表的长度超过8会转换成红黑树?

首先说一说转换为红黑树的必要性: 红黑树的插入、删除和遍历的最坏时间复杂度都是log(n), 因此,意外的情况或者恶意使用下导致hashCode()方法的返回值很差时, 性能的下降将会是"优雅"的,只要Key具有可比性。 但由于TreeNodes的大小是常规Nodes的两倍,所以只有桶中包含足够多 的元素以供使用时,我们才会使用树。那为什么这个数字是8呢 在这里总结了两种说法: 1、分布规律 我们看看官方文档中的一段描述: Because TreeNodes are about twice the size

zzz的博客 1323

京东豆自动领取脚本配置教程

腾讯云/阿里云服务器(Docker环境):全自动跑脚本领京豆(无需本地代理,使用加速源)

AIOT魔法师 854

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 35

数据结构-红黑树

主要介绍了数据结构,2-3-4树的特性,红黑树的性质和建立方法。

m0_61482125的博客 545

【C#程序员入门AI】向量数据库入门:C#集成Chroma/Pinecone,实现AI知识库检索(RAG基础)

向量存语义,检索补知识!向量数据库:解决AI知识库存储和语义检索问题,让AI有据可查C#集成:Chroma轻量本地练手,Pinecone企业云端落地,一套逻辑无缝切换RAG闭环:检索+大模型,让AI回答精准不瞎编,是AI落地的必经之路咱C#程序员有.NET生态加持,集成向量数据库比Python更简洁、更稳定,不管是个人做智能助手,还是企业做知识库,这套技术栈都能直接落地,2026年必学技能!

人工智能AI技术 999

红黑树之概述

R-B Tree,全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

qq_24428851的博客 739

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

红黑树简明概述

快速了解一下红黑树

保持敏锐,保持进化。 288

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

红黑树系列之一:红黑树的概述

一、红黑树的定义

lpp0900320123的专栏 4151

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

35:红黑树概述以及红黑树插入

红黑树优点:查找效率不错,树的插入和删除比较简单,效率很高。1.1将插入节点的父节点,叔叔节点,变成黑色节点。1.2将祖父节点变成红色节点,并且返回。二叉树以及衍生的各种树的区别和联系。1.:插入节点的叔叔节点为红色。2.:插入节点的叔叔为黑色节点。分为LL LR RR RL。如果出现两个红色节点相连。

2501_90654357的博客 193

红黑树-概述

hash不支持范围 hash不排序 hash不支持模糊排序 hash碰撞 hash模糊 数据库为什么使用B+树而不是B树 B树只适合随机检索,而B+树同时支持随机检索和顺序检索; B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低。一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内

qq_44236958的博客 319

红黑树概述及插入删除逻辑

红黑树是一种自平衡二叉搜索树,通过颜色约束和旋转操作保持平衡。其核心性质包括节点非黑即红、根节点黑色、红色节点子节点必须黑色、各路径黑高相同等。插入时先着红,再根据叔叔节点颜色调整;删除时处理双黑节点情况,通过旋转和着色维持平衡。红黑树广泛应用于C++ STL的map/set等容器,相较于AVL树降低了旋转频率,在动态操作中性能更优。其平衡策略结合了颜色管理和旋转操作,实现了高效的动态数据管理。

2401_85642238的博客 580

红黑树的概述及插入逻辑

3.一颗红黑树的黑高 bh >= h/2,引理:一棵有n个内部结点的红黑树的高度h<= 2lg(n+1)(4)如果一个节点是红色的,则它的子节点必须是黑色的。[不存在两个相邻的红色节点](5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。c.每个叶子节点是黑色。[注意:这里叶子节点,是指为空的叶子节点!1.什么是红黑树:红黑树(R-B TREE)是一种特殊的二叉树。a.每个节点或者是黑色或者是红色。

2503_92099422的博客 216

红黑树 -- 树的概述

  红黑树(Red Black Tree) 是一种自平衡二叉查找树,既然是一种自平衡二叉查找树,那么,我们就一步一步的了解,下面小编就先解释什么是树。 树的概述  树具有的特点: 1、每个节点有零个或多个子节点 2、没有父节点的节点称为根节点 3、每一个非根节点有且只有一个父节点 4、除了根节点外,每个子节点可以分为多个不相交的子树 如下图:  名词理解: 二叉树:二叉树是每个节点最...

知性人 -- 的博客 326

奈学:红黑树(RedBlackTree)的概述

AVL树与红黑树   AVL树是一种自平衡的二叉查找树,又称平衡二叉树。AVL用平衡因子判断是否平衡并通过旋转来实现平衡,它的平衡的要求是:所有节点的左右子树高度差不超过1。AVL树是一种高平衡度的二叉树,执行插入或者删除操作之后,只要不满足上面的平衡条件,就要通过旋转来保持平衡,而的由于旋转比较耗时,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。   由于维护这种高度平衡所付出的代价可能比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的..

yuemuyi的博客 225

4. 数据结构-红黑树概述和插入演示

1.红黑树的概述 2.插入、修正演示 红黑树本质上是一棵自平衡二叉树 二叉树的特点: a. 每一个节点都可以有2个子节点 b. 左子树以及右子树都是二叉树 c. 左子树都小于根节点,右子树都大于根节点 红黑树的特点: a. 每一个节点非红即黑 b. 根节点一定是黑节点 c. 红节点下一定是黑节点,但是黑节点下可以是红节点也可以是黑节点 d. 最底层的叶子节点一定是黑色的空节点 e. 任意一条路径经过的黑节点个数一致,即黑节...

大头鱼 469

红黑树与平衡二叉树_奈学:红黑树(RedBlackTree)的概述

1. AVL树与红黑树 AVL树是一种自平衡的二叉查找树,又称平衡二叉树。AVL用平衡因子判断是否平衡并通过旋转来实现平衡,它的平衡的要求是:所有节点的左右子树高度差不超过1。AVL树是一种高平衡度的二叉树,执行插入或者删除操作之后,只要不满足上面的平衡条件,就要通过旋转来保持平衡,而的由于旋转比较耗时,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。 由于维护这种高度平...

weixin_39637049的博客 418
上一篇: Concurrenthashmap——Java高并发编程的利器
下一篇: 解密学历与职业:不仅有优势也有局限,如何实现毕业就业?
JavaWizard-M
博客等级 码龄6年 3159粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值