首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

了解黑树的起源,理解黑树的本质

说起跳表,我们就不得不提另一种非常经典的数据结构——黑树,黑树相对于跳表来说,虽然时间复杂度都是O(log n),但是黑树的使用场景相对更广泛一些,早期的Linux内核中就一直存在黑树的实现,...二叉查找树 二叉查找树(BST,binary search tree),就是二叉树的基础上增加有序性,这个有序性一般是指自然顺序,有了有序性,我们就可以使用二叉树来快速的查找、删除、插入元素了。...没错,当按照元素的自然顺序插入元素的时候,二叉查找树就退化成单链表了,单链表的插入、删除、查找元素的时间复杂度是多少?O(n)。 所以,极限情况下,二叉查找树的时间复杂度是非常差的。...F H这个节点变成了F H J了,也不符合2-3树的规则,继续上H,根节点变为D H,同时,上的过程,子节点也要相应的分裂,过程大致如下: ?...过程与2-3树一样,向上分裂即可,此时,中间节点有两个,取任意一个上都是可以的,我们这里以左节点上为例,大致过程如下: ? 是不是挺简单的,至少比AVL树那种左旋右旋简单得多。

1.4K30

idea设置注解格式_idea添加类注释

: 为何源码别人的注释和自己写的注释显示效果完全不一样呢 其实是设置问题而已(今天才知道… 尴尬了) 点击图中的铅笔就可以切换为注解源码,效果如下: 再点击图中左上角的图标就切换回了注释的阅览视图...Student类以及其中属性和方法的超链接: 图中的5个@see注解后的链接分别指向Student类、age属性、pub属性、getName方法、printWords方法 需要注意的是#age会被标,...切换视图后: ---- plus: 注释制表符的实现: 加上li标签即可, 效果: 注意 : 使用时最好用标签作为其父标签: /** * * sss...当写为: /** * * hello world * * hello world */ @Data public class User { 效果为: 此时两个hello world从属于不同的...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

UML——序列图

UML的模型可分为两种,动态模型和静态模型。用例图、类图和对象图都是UML的静态结构模型。而在UML系统动态模型的其中一种就是交互视图,它描述了执行系统功能的各个角色之间相互传递消息的顺序关系。...序列图就是交互视图的一种形式。 1、序列图的定义   序列图是对对象之间传送消息的时间顺序的可视化表示。序列图的主要用途是把用例表达的需求,转化为进一步、更加正式层次的精细表达。...我认为序列图中对象有三种状态:激活、运行(存在)和销毁。 ? 2.2、生命线   生命线(Lifeline)是一条垂直的虚线,用来表示序列图中的对象一段时间内的存在。见上图。...UML消息分为5类:递归调用、普通操作、返回消息、异步调用的消息、过程调用的消息。 2.5、分支与从属流   UML存在两种方式可以来修改序列图中消息的控制流,分别是:分支和从属流。   ...分支是指从同一点发出的多个消息并指向不同的对象,根据条件是否互斥,可以有条件和并行两种结构。   从属流指的是从同一点发出多个消息指向同一个对象的不同生命线。 3、综合示例 ?

1.2K40

java集合介绍_java代码分析框架

它继承了 AbstractSet>,表示的是容器的一对键值对对象。注释,作者将其称为视图。... remove() ,这个方法就是 removeNode(),所有的删除行为最终都要通过调用它来实现。... removeNode()方法,可以看到调用了 removeTreeNode()以删除黑树节点,实际上在这个过程中会发生黑树的链化。...也就是说,和网上所说的小于6就链化不同,删除,链化触发值是一个范围, [3,10] 之间。 3.黑树扩容过程的链化 我们知道,扩容经过重哈希有可能会拆分链表,树也一样。...而黑树的链化既发生在扩容过程,也发生在删除过程,扩容过程的链化触发条件是树的节点数量小于链化阈值6,而删除过程的链化触发条件要求是左子节点、左子节点的左子节点或右子节点为null。

73930

解决ANR、JVM、Serializable与Parcelable、黑树、一道算法题

显然,如果在那种插入、删除很频繁的场景,平衡树需要频繁着进行调整,这会使平衡树的性能大打折扣,为了解决这个问题,于是有了黑树,黑树具有如下特点: 1. 具有二叉查找树的特点。 2....与平衡树不同的是,黑树插入、删除等操作,不会像平衡树那样,频繁着破坏黑树的规则,所以不需要频繁着调整,这也是我们为什么大多数情况下使用黑树的原因。...总结: 平衡树是为了解决二叉查找树退化为链表的情况, 而黑树是为了解决平衡树插入、删除等操作需要频繁调整的情况。...30,不等于的话前后面的指针。...二分法查找;从第一个角标开始,计算差值,然后二分法查找数组,寻找是否存在有满足需求的数,没有就向右移动角标 所有数字存进 map,遍历查找 map 是否存在当前元素与 30 的差值,存在就说明两数之和为

44820

数据结构 之 树总结

时间复杂度: 找、插入和删除平均和最坏情况下都是O(log n) 3.黑树  特点:自平衡二叉树, 通过着色、旋转来平衡二叉树  时间复杂度: 插入,删除,查找的复杂度都是O(log N)  1)       ...黑树的删除(参考:https://www.cnblogs.com/tongy0/p/5460623.html):   黑树的删除相对复杂,找到被删除元素的后驱元素(前驱元素也可以),将找到的元素(D...1.如果D为红色, 直接删除。   2.如果D为黑色, 分别对DR(D的右儿子)是否为Nil判断   2.1.DR不为Nil, 则DR是红色,则删除D后, DR改为黑色即可。   ...B树的删除: 1)如果当前需要删除的key位于非叶子结点上,则用后继key(这里的后继key均指后继记录的意思)覆盖要删除的key,然后在后继key所在的子支删除该后继key。...3)如果兄弟结点key个数大于Math.ceil(m/2)-1,则父结点中的key下移到该结点,兄弟结点中的一个key上删除操作结束。

51420

Java初中级面试题(2)

1、Java虚拟机栈: 线程私有;每个方法执行的时候会创建一个栈帧,存储了局部变量表,操作数栈,动态连接,方法返回地址等;每个方法从调用到执行完毕,对应一个栈帧虚拟机栈的入栈和出栈。...弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。...大体回答如上,类似文章请驾: Java 如何有效地避免OOM:善于利用软引用和弱引用 ---- 数组在内存如何分配 1、简单的值类型的数组,每个数组成员是一个引用(指针),引用到栈上的空间(因为值类型变量的内存分配在栈上...大体回答如上,类似文章请驾: 理解Spring的IOC和AOP ---- spring里面的aop的原理是什么 这个有介绍,看这里:Spring的IOC原理 ---- mybatis如何处理结果集...实体类无论是否定义get/set()方法,都是可以接收到的。 如果面试只是考你这个点的话就恭喜了。如果继续深问流程,那就需要自己找一些源码来阅读了。

1.4K70

Java 集合时间复杂度

List ArrayList get() 直接读取下标,复杂度 O(1) add(E) 直接在队尾添加,复杂度 O(1) add(index, E) 第n个元素后插入,n后面的元素需要向后移动,复杂度...O(n) remove() 删除元素后面的元素需要逐个前,复杂度 O(n) LinkedList addFirst() 添加队列头部,复杂度 O(1) removeFirst() 删除队列头部,...,修改前后元素节点指针,复杂度O(1) Set HashSet add() 复杂度为 O(1) remove() 复杂度为 O(1) contains() 复杂度为 O(1) TreeSet(基于黑树...) add() 复杂度为 O(log (n)) remove() 复杂度为 O(log (n)) contains() 复杂度为 O(log (n)) map TreeMap(基于黑树) 平均时间复杂度...O(log n) HashMap 正常时间复杂度 O(1)~O(n) 黑树后 O(log n) LinkedHashMap 能以时间复杂度 O(1) 查找元素,又能够保证key的有序性

51130

各大厂都在考的 Java 集合知识点总结,不来看看???

HashSet 判断集合元素相等 不同的对象进行比较,可以有如下四种情况: 若两元素通过 equal() 方法比较返回 false,但两者的 hashCode() 返回不相等,则将其存储不同位置;...() 返回相等,则将其存储相同位置,在这个位置以链表式结构来保存多个对象。...因为向 HashSet 集合存入一个元素时,HashSet 将调用对象的 hashCode() 获取其 hash 值,然后根据 hash 值来决定对象 HashSet 的存储位置; 若两元素通过...,只需要在插入或删除位置断链后重组链即可,但数组需要重新复制一份将所有数据后移或前; 动态申请内存时,链表只需要动态创建,但数组达到初始申请长度后,需要重新申请一个更大的数组,并将原来数组的数据迁移过去...boolean equals(Object o) 比较指定的对象与此映射是否相等 V get(Objcet key) 返回指定建所映射的值;若该映射不含该键的映射关系,则返回 null int hashCode

3.9K30

HashMap原理浅析

但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,必须在堆空间,一个一个看next遍历,占用内存比较宽松,故空间复杂度很小T(1),但时间复杂度很大...链表的特点是:寻址困难,插入和删除容易。 哈希表 那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。 ?...HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean...也就是说数组存储的是最后插入的元素。© jdk1.8尾插法 HashMap是数组+链表+黑树(JDK1.8增加了黑树部分)实现的。 ?...扩充HashMap的时候,不需要像JDK1.7的实现那样重新计算hash,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”。

57400

MySQL视图

视图是指计算机数据库视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库以存储的数据值集形式存在。...行和列数据来自由定义视图的查询所引用的表,并且引用视图时动态生成。 一、视图概述 1.1、什么是视图 SQL 视图是基于 SQL 语句的结果集的可视化的表。...视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库的真实的表的字段。...1.2、视图的作用 重复利用SQL语句 简化SQL查询,快速取数据 只用知道表的部分结构 保护数据,根据特定授权 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据 注意: 视图创建后,可以用与表基本相同的方式使用...5.1、视图删除 格式: drop view 视图列表; 案例: 删除视图s_view_1 mysql> drop view s_view_1; Query OK, 0 rows affected (

7.5K20

黑树硬核讲解

需注意在2-3树,4节点是短暂存在的,会被转化为2节点或3节点。 2-3-4节点 2.2 查找 要判断一个键是否,我们先将它和根结点中的键比较。如果它和其中的任何一个相等,查找命中。...(中键一直往上,直到找到空位,在此过程没有空位就先搞个临时的,再分裂。) 2-3树插入算法的根本在于这些变换都是局部的:除了相关的结点和链接之外不必修改或者检查树的其他部分。...删除3节点中数据 当待删除元素2节点时,由于删除这个元素会导致2节点失去唯一的元素,引发树某条路径的高度发生变化,为维持平衡,此时有两种方法。 先删除再对2-3树进行平衡调整。...算法导论黑树树基于2-3-4树实现的。 算法4黑树树基于2-3树实现的,并且要求3节点在黑树必须以左倾红色节点来表示。 2-3树肯定比2-3-4树简单,所以接下来主要基于2-3树说。...此时a跟d深度是一样的,因为无法判别ad是否,直接将b设置为黑的了,此时e提高了一度为保持平衡也设置为黑色的了。 3.6.3 删除理解 多画图,不画图单看代码一会儿就眩晕了。

47630

数据结构:黑树

image.png 例如,Java集合的TreeSet、TreeMap、HashMap都是通过黑树去实现的。...这个应该很容易想明白,因为变换操作之前,该树是黑树,“父节点”是红色,那么“祖父节点”一定是黑色。...而之前我们说过,我们处理黑树的核心思想:将红色的节点移到根节点;然后,将根节点设为黑色。既然是“将红色的节点移到根节点”,那就是说要不断的将破坏黑树特性的红色节点上(即向根方向移动)。...而S又是一个右孩子,因此,我们可以通过“左旋”来将S上!...黑树删除黑树内的某一个节点删除。需要执行的操作依次是:首先,将黑树当作一颗二叉查找树,将该节点从二叉查找树删除;然后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵黑树。

61311

具有现代UI的TCP Modbus Examiner工具

10 点击"添加"按钮后,新连接将添加到配置选项下方的表。 已添加连接 主机名、端口号和从属 ID 的每个组合都将被视为新连接,并将在表获取新行。...表的每一行都包含一个状态,以便您知道连接是否成功。有一个绿色的视图数据按钮和一个红色的删除按钮。显然,删除按钮将有效地删除连接,而绿色视图数据按钮将打开一个新窗口,其中将显示您的数据。...介绍视图数据窗口之前,请务必提及底部的"保存"和"加载"配置按钮。这些按钮将允许您将连接信息存储 json 文件,以后可以随时重新加载。...每行都包含寄存器 ID、别名、值、类型、采样率,最后是一个删除按钮(如果要从列表删除 id)。这里值得一提的两个是别名和采样率。...执行写入后,将显示一条消息,显示写入是否已发送到Modbus设备,或者是否存在错误。

2.3K20

Java集合框架(五)—— Map、HashMap、Hashtable、Properties、SortedMap、TreeMap、WeakHashMap、IdentityHashMap、EnumMap

boolean containsKey(Object key);        //查询Map是否包含指定key,如果包含则返回true。...boolean containsValue(Object value);   //查询Map是否包含一个或多个value,如果包含则返回true。...为了成功地HashMap、Hashtable存储、获取对象,用作key的对象必须实现hashCode方法和equals方法。   ...如果仅仅只是查询是否包含值为null的key,或者仅仅只是使用删除值为null的key,都不会抛出异常。...TreeMap通常比HashMap、Hashtable要慢(尤其插入、删除key-value对的时候更慢),因为TreeMap需要额外的黑树操作来维护key之间的次序。

1.5K80

数据仓库建设之数仓架构

其中的数据以最低粒度级别被捕获,存储满足三范式设计的关系数据库。 部门级数据集市:是面向主题数据的部门级视图,数据从企业级数据仓库获取。数据进入部门数据集市时可能进行聚合。...这意味着它是基于完整的数据集来重新计算的,能够修复任何错误,然后更新现有的数据视图。输出通常存储只读数据库,更新则完全取代现有的预先计算好的视图。 速度处理层 会实时处理新来的大数据。...速度层 通过提供最新数据的实时视图来最小化延迟。速度层所生成的数据视图可能不如批处理层最终生成的视图那样准确或完整,但它们几乎收到数据后立即可用。...(4)停止老的作业,删除老的结果表。...实时数仓架构设计时,主要是思考“是否数据集成流批一体、“是否存储层流批一体”、“是否 ETL 逻辑流批一体”、“是否 ETL 计算引擎流批一体”;权衡这几个一体带来问题,而设计出符合业务场景的实时数仓架构

1.2K30

文心一言 VS 讯飞星火 VS chatgpt (178)-- 算法导论13.4 1题

RB-DELETE-FIXUP 是删除黑树的节点后进行的修复操作,确保黑树的性质得到保持。...通义千问: 黑树(Red-Black Tree),RB-DELETE-FIXUP 是一个用于维护黑树性质的过程,它在节点删除后被调用以重新调整颜色和旋转节点来确保黑树的五个性质得以保持。...• 即使最坏情况下,算法会通过将某个红色节点上并涂黑的方式来补偿失去的黑色高度,从而保证从根到任何叶子节点的最长路径与最短路径之间的黑色节点数量仍然相等。...灵小智: 执行RB-DELETE-FIXUP(黑树删除修复算法)之后,可以证明树根一定是黑色的。下面是证明的详细过程: 1. 首先,黑树,每个节点都有一个颜色属性,可以是红色或黑色。...• 因此,删除修复结束时,无论是否需要对根节点进行旋转和重新着色操作,根节点仍然是黑色。 综上所述,执行 RB-DELETE-FIXUP 后,可以得出结论:树根一定是黑色的。

13420

命名空间介绍之八:挂载命名空间和共享子树

clone() 或 unshare() 之后,可以每个命名空间中独立地添加和删除挂载点(通过 mount() 和 umount() )。...例如,可以提供文件系统的每个用户视图。还有其它用途,可以为新的 PID 命名空间挂载 /proc 文件系统,而不会对其它进程造成副作用,还可通过 chroot() 将进程隔离到单个目录层次结构。...共享子树特性下,每个挂载点都用“传播类型”标记,该类型决定在此挂载点下创建和删除的挂载点是否传播到其他挂载点。...一个命名空间中,某些挂载点可能标记为共享,而其它挂载点则标记为私有(或从属或不可绑定)。 第二点需强调的是,传播类型决定了挂载点下挂载和卸载事件的传播。...因此,如果在共享挂载 X 下创建了子挂载 Y,则该子挂载将传播到对等组的其它挂载点。但是,X 的传播类型不会影响 Y 下创建和删除的挂载点;Y 下的事件的传播与否取决于对 Y 传播类型的定义。

3.8K21

数据结构与算法复习

关键字个数=分支数-1 所有叶子结点位于同一层 区别: B树的关键字集合分布整棵树,而B+树的实际数据只叶子节点中。因此B树的搜索有可能在非叶子结点结束。...此时有5个分支,4阶B树是非法的,会发生上溢。B树修复上溢,需要在问题结点中找到居中的关键码并进行分裂。 调整完成后,g作为新的调整基准点与上层进行调整。...但黑树的性质不一定会继续加以维持。有可能违反3、4的性质。 情况0:被删除结点有一个孩子。...因为黑结点与其孩子之间存在一条虚边,将孩子上并染色本质上相等于删除这条虚边,这样外部节点的黑距离是不变的,性质3也不会受到影响。 问题: 双黑缺陷,此时外部节点的黑高度是不同的。...如果插入的结点的父节点为黑色,直接插入 如果插入结点的父节点为红色,则如上文的双问题,以叔叔结点是否存在或颜色为判断标准. 设父结点为P,叔叔结点为S,祖父结点为PP 黑树的删除

30540
领券