为什么红黑树的时间复杂度为lgn——渐进边界的证明

维基百科

包含n个内部节点的红黑树的高度是 O(log(n))。

定义:

  • h(v) = 以节点v为根的子树的高度。
  • bh(v) = 从v到子树中任何叶子的黑色节点的数目(如果v是黑色则不计数它)(也叫做黑色高度)。

引理: 以节点v为根的子树有至少2^{bh(v)}-1个内部节点。

引理的证明(通过归纳高度):

基础: h(v) = 0

如果v的高度是零则它必定是 nil,因此 bh(v) = 0。所以:

2^{bh(v)}-1 = 2^{0}-1 = 1-1 = 0

归纳假设: h(v) = k 的v有 2^{bh(v)-1}-1 个内部节点暗示了 h(v') = k+1 的 v'2^{bh(v')}-1 个内部节点。

因为 v' 有 h(v') > 0 所以它是个内部节点。同样的它有黑色高度要么是 bh(v') 要么是 bh(v')-1 (依据v'是红色还是黑色)的两个儿子。通过归纳假设每个儿子都有至少 2^{bh(v')-1}-1 个内部接点,所以 v' 有:

2^{bh(v')-1}-1 + 2^{bh(v')-1}-1 + 1 = 2^{bh(v')}-1

个内部节点。

使用这个引理我们现在可以展示出树的高度是对数性的。因为在从根到叶子的任何路径上至少有一半的节点是黑色(根据红黑树属性4),根的黑色高度至少是h(root)/2。通过引理我们得到:

n \geq 2^{​{h(root) \over 2}} - 1 \leftrightarrow \; \log{(n+1)} \geq {h(root) \over 2} \leftrightarrow \; h(root) \leq 2\log{(n+1)}

因此根的高度是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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值