AVL树重现,如何2 * N_2 = O(2 ^(h / 2))

时间:2014-06-08 14:26:16

标签: algorithm avl-tree

我试图证明具有N个节点的AVL树的高度最多为log N.证明:

N_h = 1 + N_h-2 + N_h-1
    > 2*N_h-2            (1)
    > O(2^(h/2))         (2)
  h < 2*lg N_h           (3)

首先,任何人都可以解释为什么2*N_h-2 > O(2^(h/2)),我似乎并不理解这里的代数规则。另外,我不明白你如何从2*N_h-2 > O(2^(h/2))转到h < 2*lg N_h

1 个答案:

答案 0 :(得分:1)

在AVL树中,每个节点的子树高度最多相差1。

因此,如果N_h表示具有N个节点的AVL树的高度,则:

N_h >= 1 + N_h-1 + N_h-2 ( the heights of both sub-trees can differ by at most one )
    >= 1 + 2*N_h-2
    >= 1 + 2*( 1 + 2*N_h-4 ) (by the same recurrence relation)
     = 1 + 2 + 4*N_h-4
    >= 1 + 2 + 4 + 8*N_h-6
    >= 1 + 2 + 4 + 8 +...+ 2^(h/2)
     = 2^(h/2) - 1 (sum of geometric series)

Hence N_h >= 2^(h/2) - 1.
      h/2 <= log(N_h + 1)
      h   <= 2*log(N_h + 1)
Hence h = O(logN)