Количество бинарных деревьев поиска по n различным элементам

Сколько бинарных деревьев поиска можно построить из n различных элементов? И как найти для него математически доказанную формулу?

Пример. Если у нас есть 3 различных элемента, скажем, 1, 2, 3, то есть 5 бинарных деревьев поиска.

Двоичные деревья поиска по элементам 1, 2, 3


person siddstuff    schedule 14.04.2013    source источник


Ответы (3)


Учитывая n элементов, количество бинарных деревьев поиска, которые можно составить из этих элементов, определяется n-м каталонским числом (обозначается Cn). Это равно

введите здесь описание изображения

Интуитивно каталонские числа представляют собой количество способов, которыми вы можете создать структуру из n элементов, сделанную следующим образом:

  • Закажите элементы как 1, 2, 3, ..., n.
  • Выберите один из этих элементов для использования в качестве элемента поворота. Это разбивает оставшиеся элементы на две группы — те, что идут до элемента, и те, что идут после.
  • Рекурсивно создавайте структуры из этих двух групп.
  • Объедините эти две структуры вместе с одним удаленным элементом, чтобы получить окончательную структуру.

Этот шаблон идеально соответствует тому, как вы можете построить BST из набора n элементов. Выберите один элемент для использования в качестве корня дерева. Все меньшие элементы должны идти влево, а все большие элементы должны идти вправо. Оттуда вы можете построить меньшие BST из элементов слева и справа, а затем объединить их вместе с корневым узлом, чтобы сформировать общий BST. Количество способов сделать это с n элементами задается Cn, поэтому количество возможных BST задается n-м каталонским числом.

Надеюсь это поможет!

person templatetypedef    schedule 14.04.2013
comment
Например, для узлов 10, 10, 10 количество бинарных деревьев поиска равно 1. Но каталонское число равно 5. Но если все элементы разные, я думаю, все в порядке. - person Sukhanov Niсkolay; 23.11.2013
comment
@SukhanovNiсkolay Количество BST по-прежнему 5 на 10,10,10. Форма дерева будет другой. - person rents; 01.09.2017

Я уверен, что этот вопрос не просто для подсчета с использованием математической формулы. Я потратил некоторое время и написал программу и объяснение или идею расчета для того же самого.

Я пытался решить это с помощью рекурсии и динамического программирования. Надеюсь это поможет.

Формула уже присутствует в предыдущем ответе:

Поэтому, если вы заинтересованы в изучении решения и понимании подхода, вы всегда можете проверить мою статью Count Binary Деревья поиска, созданные из N уникальных элементов

person dharam    schedule 25.08.2013

Пусть T(n) будет количеством BST из n элементов.

Учитывая n различных упорядоченных элементов, пронумерованных от 1 до n, мы выбираем i в качестве корня.

Это оставляет (1..i-1) в левом поддереве для комбинаций T(i-1) и (i+1..n) в правом поддереве для комбинаций T(n-i).

Следовательно:

T(n) = sum_i=1^n(T(i-1) * T(n-i))

и конечно T(1) = 1

person Andrew Tomazos    schedule 14.04.2013
comment
Было бы неплохо упомянуть, что это повторение разрешается до n-го каталонского числа. - person templatetypedef; 15.04.2013
comment
@templatetypedef: Вы знаете, как вывести формулу каталонского числа, исходя из суммы, которую я показал? - person Andrew Tomazos; 15.04.2013
comment
@user1131467 user1131467 Эта сумма должна быть в точности равна количеству триангуляций многоугольника по n + 2 узлам, именно так я познакомился с каталонскими числами. Вы фиксируете ребро и позволяете оси блуждать по другим n вершинам, что оставляет вам два многоугольника размеров i-1 и n-i. - person G. Bach; 15.04.2013
comment
Оказывается, у моей суммы есть имя. Оно называется рекуррентным соотношением Сегнера. Google для этого плюс каталонские номера покажет происхождение. - person Andrew Tomazos; 15.04.2013
comment
@ user1131467- Доказательство этого, которое я знаю (с использованием функций генерации), находится на веб-сайте Википедии. На самом деле там есть несколько разных доказательств, и все они довольно хороши. - person templatetypedef; 15.04.2013