网站首页 > 技术教程 正文
写这篇红黑树算法的目的:一是为了自己学习的总结;二是能够与大家一起交流沟通一起努力。
文中有些内容学习自《算法导论》一书,部分来自于维基百科,我会在文中标注出来,有不明白的地方可以通过留言大家一起沟通。
首先,什么是红黑树呢? 红黑树是一种“平衡的”二叉查找树,它是一种经典高效的算法,能够保证在最坏的情况下动态集合操作的时间为O(lgn)。红黑树每个节点包含5个域,分别为color,key,left,right和p。 color是在每个节点上增加的一个存储位表示节点的颜色,可以是RED或者BLACK。key为结点中的value值,left,right为该结点的左右孩子指针,没有的话为NIL,p是一个指针,是指向该节的父节点。如下图(来自维基百科)表示就是一颗红黑树,NIL为指向外结点的指针。(外结点视为没有key的结点)
红黑树有什么性质呢?一般称为红黑性质,有以下五点:
1)每个结点或者是红的或者是黑的;
2)根结点是黑的;
3)每个叶结点(NIL)是黑的;
4)如果一个结点是红的,则它的两个孩子都是黑的;
5)对每个结点,从该结点到其他其子孙结点的所有路径上包含相同数目的黑结点。
为了后面的分析,我们还得知道以下知识点。
(1)黑高度:从某个结点x出发(不包括该结点)到达一个叶结点的任意一条路径上,黑色结点的个数称为该结点x的黑高度。
(2)一颗有n个内结点的红黑树的高度至多为2lg(n+1)。 (内结点视为红黑树中带关键字的结点)
(3)包含n个内部节点的红黑树的高度是 O(log(n))。
证明(来自维基百科):
定义:
h(v) = 以节点v为根的子树的高度。
bh(v) = 从v到子树中任何叶子的黑色节点的数目(如果v是黑色则不计数它)(也叫做黑色高度)。
引理: 以节点v为根的子树有至少2bh(v) ? 1个内部节点。
引理的证明(通过归纳高度):
基础: h(v) = 0
如果v的高度是零则它必定是 nil,因此 bh(v) = 0。所以:
2bh(v) ? 1 = 20 ? 1 = 1 ? 1 = 0
归纳假设: h(v) = k 的v有 2bh(v) ? 1 ? 1 个内部节点暗示了 h(v') = k+1 的v'有2bh(v') ? 1 个内部节点。
因为 v' 有 h(v') > 0 所以它是个内部节点。同样的它有黑色高度要么是 bh(v') 要么是 bh(v')-1 (依据v'是红色还是黑色)的两个儿子。通过归纳假设每个儿子都有至少2bh(v') ? 1 ? 1 个内部接点,所以v' 有:
2bh(v') ? 1 ? 1 + 2bh(v') ? 1 ? 1 + 1 = 2bh(v') ? 1
个内部节点。
使用这个引理我们现在可以展示出树的高度是对数性的。因为在从根到叶子的任何路径上至少有一半的节点是黑色(根据红黑树属性4),根的黑色高度至少是h(root)/2。通过引理我们得到:
因此根的高度是O(log(n))。
到这里,红黑树基本的概念理解就到一段落。
猜你喜欢
- 2024-10-20 红黑树和AVL树之间的区别(红黑树和b树区别)
- 2024-10-20 数据结构怎么讲都听不会!红黑树自平衡?左旋或右旋?一头雾水
- 2024-10-20 数据结构与算法-基础(十三)红黑树(1)概述
- 2024-10-20 红黑树(R-B tree)原理图文详解(红黑树构造)
- 2024-10-20 数据结构:有了二叉查找树、平衡树为啥还需要红黑树?
- 2024-10-20 问:红黑树的删除真的很难吗?其实是你没找到好的解题思路
- 2024-10-20 linux学习第21节,为什么要设计“红黑树”这么奇怪的二叉搜索树
- 2024-10-20 硬核图解红黑树并手写实现(红黑树讲解)
- 2024-10-20 面试官-谈谈红黑树(红黑树面试最简洁的回答方式)
- 2024-10-20 17张图带你解析红黑树的原理!保证你能看懂!轻松应对面试
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)