解决AVL树中节点数量的递归关系?

4
假设我们有这个递归关系式,它在AVL树的分析中出现:
  • F1 = 1
  • F2 = 2
  • Fn = Fn - 1 + Fn - 2 + 1 (其中n ≥ 3)
如何解决这个递归关系以获得F(n)的闭式形式?这个数字用于获得高度为n的AVL树中内部节点的最小数量。

可能是 http://stackoverflow.com/questions/279619 的重复问题。 - phs
@phs- 我认为这不是重复的问题。这个问题询问如何解决表明AVL树高度低的中心递归。而链接的问题则询问在生成斐波那契数列中项的方法。 - templatetypedef
1个回答

3
有很多方法可以解决这个递归问题,但大部分都比较复杂。我认为最简单的方法是展开数列的几个项并观察结果:
  • F(1) = 1
  • F(2) = 2
  • F(3) = 4
  • F(4) = 7
  • F(5) = 12
  • F(6) = 20
如果你看一下这个数列,你会发现以下规律:
  • F(1) = 1 = 2 - 1
  • F(2) = 2 = 3 - 1
  • F(3) = 4 = 5 - 1
  • F(4) = 7 = 8 - 1
  • F(5) = 12 = 13 - 1
  • F(6) = 20 = 21 - 1
看起来这些项只是斐波那契数列的项减去1。特别地,注意到 F3 = 2,F4 = 3,F5 = 5 等等。因此,这个模式似乎是这样的:
  • F(1) = 2 - 1 = F3 - 1
  • F(2) = 3 - 1 = F4 - 1
  • F(3) = 5 - 1 = F5 - 1
  • F(4) = 8 - 1 = F6 - 1
  • F(5) = 13 - 1 = F7 - 1
  • F(6) = 21 - 1 = F8 - 1
因此,更一般地,这个模式看起来是 F(n) = Fn + 2 - 1。我们可以尝试使用数学归纳法来证明:

基本情况:

  • F(1) = 1 = 2 - 1 = F3 - 1
  • F(2) = 2 = 3 - 1 = F4 - 1

归纳步骤:假设 F(n) = Fn+2 - 1 和 F(n + 1) = Fn+3 - 1。那么我们有

  • F(n + 2) = F(n) + F(n + 1) + 1 = Fn+2 - 1 + Fn+3 - 1 + 1 = (Fn+2 + Fn+3) - (1 + 1) + 1 = Fn+4 - 1 = F(n + 2) + 2 - 1

以上是归纳证明的过程。

那么我是怎么想到用斐波那契数列来寻找这个模式的呢?嗯...递归定义看起来有点像斐波那契数列的定义,所以我猜它们之间可能存在某种联系。发现每个数字都是斐波那契数减一只是创造性的洞察力。你也可以尝试使用生成函数或其他组合技巧来解决这个问题,不过我对此并不是很了解。

希望这能帮到你!


这真的很有帮助,谢谢。我专注于斐波那契数本身的归纳,但没有考虑到它们之间可能存在某种联系。当我复制斐波那契数的解决方案时,我感到很愚蠢。哈哈。 - Mamrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接