Підрахунок двійкових дерев


28

(Я студент, який має математичну освіту, і хотів би знати, як рахувати кількість певного виду двійкових дерев.)

Переглядаючи сторінку Вікіпедії для Бінарних дерев , я помітив це твердження, що кількість укорінених бінарних дерев розміром n буде таким каталонським номером :

Cn=1n+1(2nn)

Але я не розумію, як я міг сам прийти до такого результату? Чи є спосіб знайти цей результат?

Тепер, що робити, якщо порядок під дерев (що ліворуч, що праворуч) не враховується? Наприклад, з моєї точки зору, я вважаю, що ці два дерева однакові:

   /\   /\
  /\     /\

Чи можна було б застосувати подібний метод, щоб підрахувати, скільки з цих об’єктів мають саме n вузлів?


Чи застосовна тут теорема підрахунку Полі на вкорінених 2-річних деревах?
Ніколас Манкузо

Відповіді:


35

Для підрахунку багатьох типів комбінаторних об'єктів, таких як дерева в даному випадку, є потужні математичні засоби (символічний метод), які дозволяють механічно отримати такі рахунки з опису, як будуються комбінаторні об'єкти. Це передбачає генерування функцій.

Відмінна довідка - аналітична комбінаторика покійних Філіпа Флайолета та Роберта Седжевіка. Він доступний за посиланням вище.

Книга покійного Герберта Вілфа, що генерує функціоналогію, є ще одним безкоштовним джерелом.

І звичайно, конкретна математика GKP - скарбниця.


Для двійкових дерев це виглядає так: Спочатку потрібно чітке визначення дерева.

Бінарне дерево - це вкорінене дерево, в якому кожен нелистовий вузол має ступінь 2 точно.

Далі ми маємо домовитись про те, що ми хочемо назвати розміром дерева.

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

Зліва всі вузли рівні. В середині розрізняємо листя і не листя. Праворуч у нас є обрізане двійкове дерево, куди було видалено листя. Зауважте, що у нього є одинарні гілки двох типів (ліві та праві)!

Тепер ми повинні отримати опис того, як будуються ці комбінаторні об’єкти. У випадку бінарних дерев можливе рекурсивне розкладання .

Нехай - сукупність усіх бінарних дерев першого типу, тоді ми символічно маємо: Aвведіть тут опис зображення

Він звучить так: "Об'єктом класу двійкових дерев є або вузол, або вузол, за яким слідують два двійкові дерева". Це можна записати як рівняння множин:

A={}({}×A×A)

Вводячи формуючу функцію яка перераховує цей клас комбінаторних об'єктів, ми можемо перевести задане рівняння в рівняння, що включає функцію, що генерує.A(z)

A(z)=z+zA2(z)

Наш вибір обробляти всі вузли однаково і приймати кількість вузлів на дереві як поняття його розміру виражається "позначенням" вузлів змінною .z

Тепер ми можемо вирішити квадратичне рівняння для і отримати, як завжди, два рішення, явну закриту форму формуючої функції:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Тепер нам просто потрібна (узагальнена) теорія біномів Ньютона:

(1+x)a=k=0(ak)xk

з і для розширення закритої форми генеруючої функції назад у ряд потужності. Ми робимо це тому, що коефіцієнт при - це якраз кількість комбінаторних об'єктів розміром , як правило, записується як . Але тут наше уявлення про «розмір» дерева змушує шукати коефіцієнт при . Трохи жонглюючи двочленами та фабриками, ми отримуємо:a=1/2x=4z2znn[zn]A(z)z2n+1

[z2n+1]A(z)=1n+1(2nn).

Якщо ми почнемо з другого поняття розміру, рекурсивне розкладання:

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

Ми отримуємо інший клас комбінаторних об'єктів . У ньому написано: "Об'єктом класу двійкових дерев є або лист, або внутрішній вузол, за яким слідують два двійкові дерева".B

Ми можемо використовувати той самий підхід і перетворити у . Тільки цього разу змінна позначає лише внутрішні вузли, а не листя, оскільки визначення "розмір" тут різне. Ми також отримуємо різні функції генерації:B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Вилучення коефіцієнта врожайності

[zn]B(z)=1n+1(2nn).

Класи та погоджуються підрахунками, оскільки двійкове дерево з внутрішніми вузлами має листя, таким чином, вузлів.ABnn+12n+1

В останньому випадку ми повинні працювати трохи важче:

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

що є описом не порожніх обрізаних бінарних спроб. Розширюємо це на

C={}({}×C)({}×C)({}×C×C)D={ϵ}({}×C×C)

і перепишіть його за допомогою генеруючих функцій

C(z)=z+2zC(z)+zC2(z)D(z)=1+zC2(z)

розв’яжіть квадратичні рівняння

C(z)=12z14z2zD(z)=114z2z

і знову

[zn]C(z)=1n+1(2nn)n1[zn]D(z)=1n+1(2nn)n0

Зауважте, що каталонська функція генерування є

E(z)=114z2

він перераховує клас загальних дерев . Тобто дерева без обмеження ступеня вузла.

E={}×SEQ(E)

Він звучить так: "Об'єктом класу загальних дерев є вузол, за яким слідує можлива порожня послідовність загальних дерев."

E(z)=z1E(z)

З формулою Лагранжа-Бурманом Inversion ми отримуємо

[zn]E(z)=1n+1(2nn)

Тож ми довели, що існує стільки загальних дерев, скільки є двійкових дерев. Недарма між загальним та бінарним деревами існує біекція. Біекція відома як відповідність обертання (пояснено в кінці пов'язаної статті), що дозволяє нам зберігати кожне загальне дерево як двійкове дерево.

Зауважимо, що якщо ми не розмежимо лівий і правий брат у класі ми отримаємо ще один клас дерев :CT

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

одинарні бінарні дерева. Вони також мають функцію генерування проте їх коефіцієнт різний. Ви отримуєте числа Моцкіна

T={}×SEQ2(T)
T(z)=1z12z3z22z
[zn]T(z)=1nk(nk)(nkk1).

О, і якщо вам не подобається генерувати функції, є і багато інших доказів. Дивіться тут , є одне, де ви можете використовувати кодування бінарних дерев як слова Dyck і отримувати повтор із їх рекурсивного визначення. Тоді вирішення цього повторення дає і відповідь. Однак символічний метод рятує вас, перш за все, від повторення, оскільки він працює безпосередньо з кресленнями об'єктів комбінаторів.


Зауважимо лише, що «Вступ до аналізу алгоритмів» ( aofa.cs.princeton.edu ) Седжевіка та Флайолета охоплює багато того самого матеріалу, що і книга «Аналітична комбінаторика», але в більш доступній формі.
фонбранд

7

Функції генерації - це дуже потужна і дуже корисна магічна паличка. Наступне рішення першого питання (чому існують дерева ) дещо менш магічне. Отже, мило.Cn

Приклад. Щоб створити дерево з вузлів, ми починаємо з послідовності, в якій відбувається раз, а трапляється разів. Наприклад, . Серед тих префіксів з найменшою (і, можливо, негативною) сумою виберіть найдовший; у цьому випадку . Візьміть цей префікс з початку і поставте його в кінці; у цьому випадку ми отримуємо . Тепер змінимо в і в ; в цьому випадку ми отримуємо . Видаліть від початку, додайте5+15+115+++++++++++++++++TETTETETTETEETEв кінці; в цьому випадку ми отримуємо TETETTETEEE. Це опис дерева T(E,T(E,T(T(E,T(E,E)),E))). Нижче є кілька пояснень, чому це біекція. Як тільки ви переконаєтесь у цьому, підрахувати легко. Є послідовності , то ми поділили на оскільки вибрали одну з можливих циклічних перестановок.(5+65)±15+6

Перша біекція. Типовим визначенням для дерев у ML є type tree = T of tree * tree | E; тобто у дерева або є два (впорядковані) підряди, або воно порожнє. Ось як дерева побудовані: T(T(E,E),T(T(E,E),T(E,E))). Скинувши пух, ми можемо просто написати TTEETTEETEE. Всі ці описи будуть закінчуватися рядком E, тому він є зайвим: TTEETTEETE. (Зверніть увагу, що тепер порожнє дерево відповідає порожній рядку.) Ці рядки мають властивість, що кожен префікс має щонайменше стільки ж Ц, як і Es, і загалом вони мають Ts і Es, де - кількість вузлів дерево.nnn

Другий біекція. Тепер замінимо T на +1, а E на -1. Отже, ми розглядаємо послідовності з значеннями +1, з значеннями -1 та з сумами всіх префіксів .nn0

Третя біекція. Тепер трохи змінимо вимогу до префіксів: Ми просимо, щоб сума кожного непустого префікса становила . Щоб це стало можливим, давайте значення +1 і значення -1. (Інакше сума всього рядка дорівнюватиме 0 та не відповідає умові префіксів.) Ці послідовності повинні починатися з +1. Отже, вони справді такі ж, як і раніше, за винятком того, що вони на початку застрягли в +1.>0n+1n

Власність Рені. Тепер забути наші послідовності на мить і розглянемо деяку кінцеву послідовність цілих чисел , , сума яких становить 1. Якщо всі непусті префікси мають позитивні суми, то немає циклічної перестановкою цієї послідовності має ту ж властивість. Чому? Ну, припустимо, є такий, що у також є всі позитивні непорожні префікси. Тоді (властивість послідовності, що починається з ) і (властивість послідовності, що починається з ); отже,x1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2, що суперечить припущенню, що сума для всієї послідовності дорівнює 1.

Більше того, враховуючи деяку послідовність із сумою 1, завжди існує циклічна перестановка, завдяки якій усі непусті префікси мають позитивну суму. (Це справедливо навіть для реальних чисел.)

Висновок. Тепер давайте порахуємо послідовності +1 і -1, які знаходяться у бісекції з деревами. Із чисел ми повинні вибрати що дорівнює +1, інші будуть -1. Існують способи зробити це. Але лише з послідовностей, що нараховуються дотепер, має позитивні префікси. Отже, кількість укорінених, упорядкованих бінарних дерев становить:2n+1n+1(2n+1n+1)12n+1

12n+1(2n+1n+1)=12n+12n+1n+1(2nn)=1n+1(2nn)

Дуже гарна відповідь, але наступне твердження потребує певного пояснення: "Враховуючи деяку послідовність із сумою 1, завжди є циклічна перестановка, завдяки якій усі непусті префікси мають позитивну суму" .... принаймні, натяк на доказ був би приємно.
vog

1
@vog: візьміть префікс з найменшою сумою і перемістіть його до кінця.
rgrig

1
@vog: це також повинен бути найдовший префікс, якщо їх є кілька з однаковою найменшою сумою. Я відредагував відповідь, щоб додати приклад на початку.
rgrig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.