为什么红黑树的时间复杂度为lgn——渐进边界的证明
维基百科
包含n个内部节点的红黑树的高度是 O(log(n))。
定义:
- h(v) = 以节点v为根的子树的高度。
- bh(v) = 从v到子树中任何叶子的黑色节点的数目(如果v是黑色则不计数它)(也叫做黑色高度)。
引理: 以节点v为根的子树有至少个内部节点。
引理的证明(通过归纳高度):
基础: h(v) = 0
如果v的高度是零则它必定是 nil,因此 bh(v) = 0。所以:
归纳假设: h(v) = k 的v有 个内部节点暗示了 h() = k+1 的 有 个内部节点。
因为 有 h() > 0 所以它是个内部节点。同样的它有黑色高度要么是 bh() 要么是 bh()-1 (依据是红色还是黑色)的两个儿子。通过归纳假设每个儿子都有至少 个内部接点,所以 有:
个内部节点。
使用这个引理我们现在可以展示出树的高度是对数性的。因为在从根到叶子的任何路径上至少有一半的节点是黑色(根据红黑树属性4),根的黑色高度至少是h(root)/2。通过引理我们得到:
因此根的高度是O(log(n))。
*******************************************************************************************************************
算法导论
引例:一棵有n个内节点的红黑树高度至多为2lg(n+1)
证明:
1.先证明某一节点x为根的子树中至少包含2^[bh(x)] - 1个内节点(归纳假设)
如果:x高度为0,则x必为叶子节点,这时以x为根的子树至少包含2^[bh(x)] - 1 = 2^0 - 1= 0,
考虑x为正数,并且x有两个孩子,两个孩子的高度为bh(x)或bh(x)-1(根据孩子自身的红黑性质决定),所以假设每个孩子至少包含2^[bh(x)-1] - 1个内节点,则x = 2*(2^[bh(x)-1] - 1) + 1(x本身),则x = 2^[bh(x)] - 1,得证
根据性质4(如果一个节点为红,则其孩子必为黑)可知,高度为h的树的黑高度至少为h/2
所以 n >= 2^(h/2) - 1,所以lg(n+1) <= h/2,所以可知一个有n个内节点的红黑树高度至多为2lg(n+1),得证
*******************************************************************************************************************
由此可知,从根节点到任意节点最多经历2lg(n+1)步,因此红黑树的时间复杂度为O(lgn)
参考文献:
算法导论
维基百科:http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91
为什么红黑树的时间复杂度为lgn——渐进边界的证明相关推荐
- 红黑树的时间复杂度分析
一.红黑树的基本属性. 红黑树的每个结点,要么是黑色,要么是红色. 根结点(root)一定是黑色. 所有红色结点不可以直接相连. 也即是,如果一个结点为红色,那么,它的爸爸或儿子,一定就是黑色,不可是 ...
- 红黑树的性质以及时间复杂度证明
很久就想写一篇红黑树的博客,一直没有倒出时间,今天想稍微的总结下红黑树,但是并不想介绍如何的进行插入删除,以及怎么进行旋转,变色,本编文章主要讲解红黑树的时间复杂度的证明,要想证明红黑树的时间复杂度, ...
- 红黑树时间复杂度为什么是O(logn)?
一.红黑树性质 结点必须是红色或者黑色. 根节点必须是黑色. 叶节点(NIL)必须是黑色(NIL节点无数据,是空节点). 如果一个节点是红色的,则它的子节点必须是黑色的. 从任一节点出发到其每个叶子节 ...
- 红黑树(一)之 原理和算法详细介绍---转帖
目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sky W ...
- 红黑树,看不懂你找我
文章目录 一:什么是红黑树 二:关于红黑树的一般操作 1.查找操作 2. 插入操作 2.1 新节点:我是红色的,我爹是红色的,我叔叔是黑色的 2.2 新节点:我是红色的,我爹是红色的,我叔叔也是红色的 ...
- Java数据结构与算法:红黑树
概要 概述:R-B Tree,又称为"红黑树".本文参考了<算法导论>中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明.本文的主要内容包括:红黑树的特 ...
- 红黑树(一)之 原理和算法详细介绍
出处:http://www.cnblogs.com/skywang12345/p/3245399.html 概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树 ...
- 【Java深入研究】10、红黑树
一.红黑树介绍 红黑树是二叉查找树,红黑树的时间复杂度为: O(lgn) 红黑树的特性: (1)每个节点或者是黑色,或者是红色. (2)根节点是黑色. (3)每个叶子节点(NIL)是黑色. [注意:这 ...
- 红黑树 —— 原理和算法详细介绍
红黑树 -- 原理和算法详细介绍 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种特殊的二叉查找树.红黑树的每个节点上都有存储位 ...
- 红黑树的删除_红黑树
红黑树是许多"平衡的"查找树中的一种,它能保证在最坏的情况下,基本的动态集合操作(插入和删除)的时间为O(lgh).我们先简单叙述二叉查找树的性质. 1.1 二叉查找树 二叉查找树 ...
最新文章
- .NET Core 构建跨平台的桌面应用
- ListView getChildCount 以及getChildAt 坑 误区指南
- linux 列出特定时间内修改的文件
- 如何用windbg查看_eprocess结构
- 计算机安全OSI安全框架
- LeetCode677. 键值映射(Trie树)
- 抖音python课程价格_抖音
- oracle安装要多久,一次耗时4天的oracle安装过程
- Description Resource	Path Location Type Project configuration is not up-to-date with pom.xml. Select
- 【GPORF源码编译】GDB源码编译之gprof交叉编译
- python查天气预报_一个用Python编写抓取天气预报的代码示例
- 内网使用 IPV6 之 TunnelBroker隧道(6in4)篇
- 每天一个算法(简单)
- 例外被抛出且未被接住问题
- VS2008 安装顺序
- 【华为面试手撕代码】
- Win7 32 不能安装STM32 虚拟串口驱动解决方法
- 轻轻一扭,迎来温暖柔风,告别手脚冰凉,卡蛙桌面暖风机上手
- ubuntu conda、pip 设置代理
- python数字识别kaggle论文_基于Python语言Kaggle的数据集分析