(Я студент с некоторой математической подготовкой, и я хотел бы знать, как подсчитать количество бинарных деревьев определенного вида.)
Глядя на страницу Википедии о бинарных деревьях , я заметил это утверждение, что число корневых бинарных деревьев размером будет таким каталонским числом :
Но я не понимаю, как я мог придумать такой результат сам? Есть ли способ найти этот результат?
Теперь, что если порядок поддеревьев (слева, то справа) не учитывается? Например, с моей точки зрения, я считаю, что эти два дерева одинаковы:
/\ /\
/\ /\
Можно ли применить подобный метод для подсчета, сколько из этих объектов имеет ровно узлов?
combinatorics
binary-trees
discrete-mathematics
Стефан Хименес
источник
источник
Ответы:
Для подсчета многих типов комбинаторных объектов, таких как деревья в данном случае, существуют мощные математические инструменты (символический метод), которые позволяют механически получить такие счетчики из описания того, как строятся комбинаторные объекты. Это включает в себя создание функций.
Отличным примером является аналитическая комбинаторика покойного Филиппа Флажолета и Роберта Седжвика. Это доступно по ссылке выше.
Книга покойной Герберта Уилфа, генерирующая функциональность, является еще одним бесплатным источником.
И, конечно, « Конкретная математика» от GKP - это клад.
Для бинарных деревьев это выглядит так: сначала вам нужно четкое определение дерева.
Бинарное дерево - это корневое дерево, в котором каждый неконечный узел точно имеет степень 2.
Далее мы должны договориться о том, что мы хотим назвать размером дерева.
Слева все узлы равны. В середине мы различаем листья и не листья. Справа у нас есть обрезанное бинарное дерево, листья которого были удалены. Обратите внимание, что у него есть одинарные ветви двух типов (слева и справа)!
Теперь мы должны получить описание того, как эти комбинаторные объекты строятся. В случае бинарных деревьев возможна рекурсивная декомпозиция .
Пусть будет множеством всех двоичных деревьев первого типа, тогда символически мы имеем:A
Он гласит: «Объект класса двоичных деревьев - это либо узел, либо узел, за которым следуют два двоичных дерева». Это можно записать как уравнение множеств:
Вводя производящую функцию которая перечисляет этот класс комбинаторных объектов, мы можем преобразовать заданное уравнение в уравнение, содержащее производящую функцию.A(z)
Наш выбор одинаковой обработки всех узлов и определения количества узлов в дереве как понятия его размера выражается «маркировкой» узлов переменной .z
Теперь мы можем решить квадратное уравнение для и получить, как обычно, два решения явной замкнутой формы производящей функции:zA2(z)−A(z)+z=0 A(z)
Теперь нам просто нужна (обобщенная) теорема Ньютона:
с и чтобы разложить замкнутую форму производящей функции обратно в степенной ряд. Мы делаем это потому, что коэффициент в - это просто число комбинаторных объектов размера , обычно записываемых как . Но здесь наше представление о «размере» дерева заставляет нас искать коэффициент при . После небольшого манипулирования с биномами и факториалами мы получаем:a=1/2 x=−4z2 zn n [zn]A(z) z2n+1
Если мы начнем со второго понятия размера, рекурсивная декомпозиция будет:
Мы получаем другой класс комбинаторных объектов . Он гласит: «Объектом класса двоичных деревьев является либо лист, либо внутренний узел, за которым следуют два двоичных дерева».B
Мы можем использовать тот же подход и превратить в . Только на этот раз переменная отмечает только внутренние узлы, а не листья, потому что здесь определение «размер» отличается. Мы также получаем другую функцию генерации:B={□}∪({∙}×B×B) B=1+zB2(z) z
Извлечение коэффициента урожайности
Классы и согласуются по количеству, потому что бинарное дерево с внутренними узлами имеет лист, таким образом, всего узел.A B n n+1 2n+1
В последнем случае нам придется работать немного усерднее:
который является описанием непустых сокращенных двоичных попыток. Мы расширяем это до
и переписать его с генерирующими функциями
решить квадратные уравнения
и получить еще раз
Обратите внимание , что функция генерирования Каталонский является
он перечисляет класс общих деревьев . Это деревья без ограничений на степень узла.
Он гласит: «Объект класса общих деревьев - это узел, за которым следует возможная пустая последовательность общих деревьев».
С формулой обращения Лагранжа-Бюрмана мы получаем
Итак, мы доказали, что существует столько общих деревьев, сколько существует двоичных деревьев. Неудивительно, что между общим и бинарным деревьями существует биекция. Биекция известна как вращательная корреспонденция (объясненная в конце связанной статьи), которая позволяет нам хранить каждое общее дерево как двоичное дерево.
Обратите внимание, что если мы не различаем левого и правого родного брата в классе мы получаем еще один класс деревьев :C T
одинарные бинарные деревья. У них тоже есть производящая функция однако их коэффициент отличается. Вы получаете числа Моцкина
Да, и если вам не нравится генерировать функции, есть множество других доказательств. Смотрите здесь , есть один, где вы можете использовать кодирование бинарных деревьев как слова Дейка и получить рекуррентность из их рекурсивного определения. Тогда решение этого повторения также дает ответ. Однако символический метод избавляет вас от необходимости повторения в первую очередь, поскольку он работает непосредственно с чертежами комбинаторных объектов.
источник
Генерирующие функции - очень мощная и очень полезная волшебная палочка. Следующее решение первого вопроса (почему существуют деревья ) несколько менее волшебно. Следовательно, милый.Cn
Пример. Чтобы создать дерево из узлов, мы начинаем с последовательности, в которой встречается раз, а встречается раз. Например, . Среди префиксов с наименьшей (и, возможно, отрицательной) суммой выберите самый длинный; в этом случае . Возьмите этот префикс с начала и поместите его в конец; в этом случае мы получаем . Теперь измените на и на ; в этом случае мы получаем . Удалить с самого начала, добавить5 +1 5+1 −1 5 +−++−+−−++− +−++−+−− ++−+−++−+−− + T − E T E в конце; в этом случае мы получаем (5+65) ±1 5+6
TTETETTETEE
TETETTETEEE
. Это описание дереваT(E,T(E,T(T(E,T(E,E)),E)))
. Ниже приведено объяснение, почему это биекция. Как только вы убедитесь в этом, считать легко. Есть последовательностей , затем мы разделили на потому что мы выбрали одну из возможных циклических перестановок.Первая биекция. Типичное определение для деревьев в МЛn n n
type tree = T of tree * tree | E
; то есть дерево либо имеет два (упорядоченных) поддерева, либо оно пустое. Вот как деревья построены:T(T(E,E),T(T(E,E),T(E,E)))
. Сбрасывая пух, мы можем просто написатьTTEETTEETEE
. Все эти описания будут заканчиваться строкойE
, поэтому он является излишним:TTEETTEETE
. (Обратите внимание, что пустое дерево теперь соответствует пустой строке.) Эти строки имеют свойство, заключающееся в том, что каждый префикс имеет по меньшей мере столько же Ts, сколько Es, и в общей сложности они имеют Ts и Es, где - количество узлов дерево.Вторая биекция. Теперь мы заменим T на +1, а E на -1. Итак, мы смотрим на последовательности с значениями +1, с значениями -1 и суммами всех префиксов .n n ≥0
Третья биекция. Теперь мы немного изменим требование к префиксам: мы просим, чтобы сумма каждого непустого префикса была . Чтобы это было возможно, мы допустим значений +1 и значений -1. (В противном случае сумма всей строки будет равна 0 и не будет соответствовать условию для префиксов.) Эти последовательности должны начинаться с +1. Таким образом, они действительно такие же, как и раньше, за исключением того, что в начале они застряли +1>0 n+1 n
Реней собственности. Теперь забыть наши последовательности на мгновение и рассмотрят некоторую конечная последовательность целых чисел , , сумма которых составляет 1. Если все непустые префиксы имеют положительные суммы, то нет циклической перестановка этой последовательности имеет то же свойство. Зачем? Хорошо, предположим, что существует такое что также имеет все непустые префиксы положительные. Тогда (свойство последовательности, начинающейся с ) и (свойство последовательности, начинающейся с ); следовательно,x1 … xm k≠1 xk,…,xm,x1,…,xk−1 x1+⋯+xk−1≥1 x1 xk+⋯+xm≥1 xk x1+⋯+xm≥2 , что противоречит предположению, что сумма для всей последовательности равна 1.
Более того, для некоторой последовательности с суммой 1 всегда существует циклическая перестановка, которая заставляет все непустые префиксы иметь положительную сумму. (Это верно даже для реальных чисел.)
Вывод. Теперь давайте посчитаем последовательности +1 и -1, которые находятся в биекции с деревьями. Из чисел мы должны выбрать , равный +1, остальные будут -1. Есть способов сделать это. Но только из подсчитанных последовательностей имеет положительные префиксы. Итак, число корневых упорядоченных бинарных деревьев равно:2n+1 n+1 (2n+1n+1) 1 2n+1
источник