Решение рекуррентного соотношения для числа узлов в дереве AVL?
Предположим, что мы имеем такое рекуррентное отношение, которое возникает при анализе деревьев AVL:
- F1 = 1
- F2 = 2
- Fn = F n-1 + F n - 2 + 1 (где n ≥ 3)
Как бы вы решили эту рекуррентность, чтобы получить замкнутую форму для F (n)? Это число используется для получения минимального числа внутренних узлов в дереве AVL высотой n.
1 ответ:
Есть много способов решить эту проблему, но большинство из них довольно сложны. Я думаю, что самый простой способ сделать это-расширить несколько терминов серии и посмотреть, что вы найдете:
- 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) = F n + 2 - 1. Мы могли бы попытаться формализовать это с помощью математической индукции:
Базовые случаи:
- F(1) = 1 = 2 - 1 = F3 - 1
- F(2) = 2 = 3 - 1 = F4 - 1
Индуктивный шаг: предположим, что F (n) = F n+2 - 1 и F (n + 1) = F n+3 - 1. Тогда мы имеем, что
- F (n + 2) = F (n) + F(n + 1) + 1 = F n+2 - 1 + F n+3 - 1 + 1 = (F n+2 + F n+3) - (1 + 1) + 1 = F n+4 - 1 = F (n + 2) + 2 - 1
И вуаля! Индукция проходит проверку.
Так как же я думал искать этот паттерн с помощью ряда Фибоначчи? Что ж... рекурсивное определение было похоже на определение для ряда Фибоначчи, поэтому я ожидал, что там, вероятно, было какое-то связь между ними двумя. Наблюдение, что все было числом Фибоначчи минус один, было просто творческим озарением. Потенциально вы можете попытаться решить эту проблему с помощью генерирующих функций или других комбинаторных трюков, хотя я не очень хорошо разбираюсь в них.
Надеюсь, это поможет!