Вычислить количество бинарных деревьев с i узлами - PullRequest
0 голосов
/ 31 декабря 2011

Пусть bi будет числом бинарных деревьев с i узлами.Вычислить b10.

Это проблема, с которой я столкнулся.

Я уже смог придумать это:

B0=1
B1=1
B2=2
B3=5
B4=12 

Это быстро становится слишком много, когда я становлюсь больше.

Может ли кто-нибудь придумать лучший способ вычислить Bi, чем просто вытягивать деревья и считать их?

1 Ответ

1 голос
/ 31 декабря 2011

Я напечатал ваш ответ в OEIS, и он дал несколько результатов.

Многообещающим результатом является A000669 - количество посаженных деревьев с уменьшенным количеством серий с n листьями.Приведен следующий пример: a (4) = 5 со следующими посаженными деревьями с редуцированными рядами: (oooo), (oo (oo)), (o (ooo)), (o (o (oo))), ((оо) (оо)).Тем не менее, наши деревья не обязательно посажены.

Однако, после небольшой работы, я должен сообщить вам, что ваше значение для B4 неверно - правильный ответ 14. Тогда ответ ясен: каталонские цифры .Каталонские числа подсчитывают странное и разнообразное количество вещей, включая проблему, которую вы здесь представили (через Wolfram ).Здесь стоит отметить тождество каталонского числа (8) - повторение, которое определяет каталонские числа.Это суммирование можно рассматривать как определение количества узлов, которые будут слева от узла (а остальные будут справа).

Более простой способ осмыслить это - использовать слова Дейка.пусть X означает «левая скобка», а Y означает «0».(Я использую представление списка для деревьев - узлы слева - это списки слева от элемента, и наоборот; если узел не имеет ни левого, ни правого списков, он считается листом.) При необходимости мы будем ставить правые скобки.,Тогда наши деревья для B3 выглядят следующим образом:

(((0) 0) 0) => XXXYYY

((0) 0 (0)) => XXYYXY

(0 (0 (0))) => XYXYXY

((0 (0)) 0) => XXYXYY

(0 ((0) 0)) => XYXXYY

Из Википедии пять слов Дик длиной 2n в этой форме: XXXYYY, XYXXYY, XYXYXY, XXYYXY и XXYXYY.И наконец, закрытая форма

  Bn = (1 / (n + 1)) * (2n choose n) = (2n!)/((n+1)!(n!))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...