红黑树和红黑树的原理详解
红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为“对称二叉B树”,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。
一、红黑树用途和好处
红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。这不只是使它们在时间敏感的应用如实时应用(real time application)中有价值,而且使它们有在提供最坏情况担保的其他数据结构中作为建造板块的价值;例如,在计算几何中使用的很多数据结构都可以基于红黑树。
红黑树在函数式编程中也特别有用,在这里它们是最常用的持久数据结构之一,它们用来构造关联数组和集合,在突变之后它们能保持为以前的版本。除了O(log n)的时间之外,红黑树的持久版本对每次插入或删除需要O(log n)的空间。
红黑树是 2-3-4树的一种等同。换句话说,对于每个 2-3-4 树,都存在至少一个数据元素是同样次序的红黑树。在 2-3-4 树上的插入和删除操作也等同于在红黑树中颜色翻转和旋转。这使得 2-3-4 树成为理解红黑树背后的逻辑的重要工具,这也是很多介绍算法的教科书在红黑树之前介绍 2-3-4 树的原因,尽管 2-3-4 树在实践中不经常使用。
二、红黑树性质
红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑
红黑树和红黑树的原理详解相关推荐
- 红黑树原理详解及golang实现
红黑树原理详解及golang实现 文章目录 红黑树原理详解及golang实现 二叉查找树 性质 红黑树 性质 operation 红黑树的插入 `情形1`:空树 `情形2`:插入节点父节为黑色, `情 ...
- 【Java基础】HashMap原理详解
[Java基础]HashMap原理详解 HashMap的实现 1. 数组 2.线性链表 3.红黑树 3.1概述 3.2性质 4.HashMap扩容死锁 5. BATJ一线大厂技术栈 HashMap的实 ...
- Android面试Hash原理详解二
Hash系列目录 Android面试Hash原理详解一 Android面试Hash原理详解二 Android面试Hash常见算法 Android面试Hash算法案例 Android面试Hash原理详解 ...
- 时间堆原理详解及C++11的实现
一.背景 网络编程中除了处理IO事件之外,定时事件也同样不可或缺,如定期检测一个客户连接的活动状态.游戏中的技能冷却倒计时以及其他需要使用超时机制的功能.我们的服务器程序中往往需要处理众多的定时事件, ...
- HashMap 原理详解
一.HashMap的原理详解 首先我们要知道什么是哈希表以及它的结构.在介绍哈希表之前我们需要了解并且掌握数组.链表以及红黑树的结构以及特点. 1.我们先来看一下HashMap的使用 public c ...
- HashMap原理详解(基于jdk1.8)
HashMap原理详解(基于jdk1.8) HashMap原理详解,有兴趣的同学可以看下.有错误的地方也希望大佬们能指点下. HashMap的内部存储是一个数组(bucket),数组的元素Node实现 ...
- epoll 原理详解
一.epoll原理详解 当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用密切相关: struct eventpo ...
- 一、epoll原理详解
Linux服务器开发/后台架构师知识体系整理 一.epoll原理详解 当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll ...
- EMD算法之Hilbert-Huang Transform原理详解和案例分析
目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...
- SVM分类器原理详解
SVM分类器原理详解 标签: svm文本分类java 2015-08-21 11:51 2399人阅读 评论(0) 收藏 举报 分类: 数据挖掘 文本处理(16) 机器学习 分类算法(10) 目 ...
最新文章
- 互联网人的生存指南 | 每日趣闻
- 001_Servlet简介
- php获取mysql数据菜鸟_PHP操作数据库
- 10853k1_领导学基础_21秋考试
- psu是什么电脑配件_PSU的完整形式是什么?
- Freeswitch之ASR(语音识别)总结大全
- 分析阶段的类图和设计阶段的类图有什么区别?
- mysql数据表案例_mysql中库和表的简单操作案例
- Atitit 产品化法通则 目录 1. 何谓软件产品化?	1 2. 产品化优点 vs 项目化	2 2.1. 软件复用率提高	2 2.2. ,项目化交付	2 2.3. 维护成本高	2 3. 产品金字塔
- Revit二次开发——轴网
- Neural Graph Collaborative Filtering【阅读笔记】
- X86 CPU 漏洞 Meltdown 原理及google攻击代码
- 信息系统项目管理师考点之上午理论知识点总结
- git clone报错:SSL certificate problem: unable to get local issuer certificate
- 【python安装】
- 单片机tcp ip协议c语言,单片机TCP IP协议栈实现的原理
- java银行账户模拟_使用Java模拟银行账户存、取款、转账功能
- 代码REVIEW的流程化工作
- 在Ubuntu20.04上安装二进制ros2 foxy
- CSDN-markdown 首行缩进的快捷实现
热门文章
- rpmbuild告警mangling shebang in xxx from /bin/python to /usr/bin/python/python2.
- linux ftok()
- ftok()函数的使用
- Win10桌面图标无法拖动
- C++中getline()、gets()等函数的用法
- iOS逆向重签名(三):微信重签名
- 【学习日志】2022.10.16 万用头文件 sstream C++进制转换
- Linux:系统安全及应用
- CentOS 命令使用
- python不是内部文件别太任性_Python对文件的操作