为什么红黑树的时间复杂度为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


你可能感兴趣的:(算法导论,红黑树,数学证明)