Вычисление количества 2-3 деревьев, если задано количество узлов

Я пытаюсь выяснить количество доступных деревьев, если дано количество данных. Ex) Если существует 8 разных данных, сколько деревьев можно сделать?

1 ответ

Вопрос не совсем понятен. Я предполагаю, что вам нужно количество полных двоичных (соответственно троичных) деревьев с ровно n листьями (если вы скорее ищете всего n узлов, вы сможете найти его по моему результату; если вы хотите количество деревьев, которые могут хранить данный набор из n различных данных, т.е. учитывать все способы хранения ваших данных в таком дереве, тогда вы также должны иметь возможность легко их получить).

Давайте рассмотрим случай полных двоичных деревьев. Если вы хотите, чтобы n листьев было в нем, вы можете назвать k количеством листьев в левом поддереве, у вас будет nk справа. Эти поддеревья имеют соответственно N(k) и N(nk) возможностей. Тогда у вас есть N(n)=sum(N(k)*N(n-k), k=1..n-1), С N(1)=1.

Это (a?) Определение каталонских номеров: https://en.wikipedia.org/wiki/Catalan_number

N(n)=C(n-1)

Вы можете сделать что-то подобное для тройных деревьев

Другие вопросы по тегам