Liczenie drzew binarnych

28

(Jestem studentem z pewnym doświadczeniem matematycznym i chciałbym wiedzieć, jak policzyć liczbę określonego rodzaju drzew binarnych).

Patrząc na stronę Wikipedii dotyczącą drzew binarnych , zauważyłem to twierdzenie, że liczba zakorzenionych drzew binarnych o rozmiarze będzie katalońską : C_n = \ dfrac {1} {n + 1} {2n \ wybierz n}n

Cn=1n+1(2nn)

Ale nie rozumiem, jak sam mogłem wymyślić taki wynik? Czy istnieje metoda znalezienia tego wyniku?

A co, jeśli kolejność pod-drzew (która jest pozostawiona, która jest właściwa) nie jest brana pod uwagę? Na przykład z mojego punktu widzenia uważam, że te dwa drzewa są takie same:

   /\   /\
  /\     /\

Czy można zastosować podobną metodę, aby policzyć, ile z tych obiektów ma dokładnie n węzłów?

Stéphane Gimenez
źródło
Czy ma tu zastosowanie twierdzenie Polyi o zakorzenionych drzewach 2-arynkowych?
Nicholas Mancuso

Odpowiedzi:

35

Do zliczania wielu rodzajów obiektów kombinatorycznych, takich jak drzewa w tym przypadku, istnieją potężne narzędzia matematyczne (metoda symboliczna), które pozwalają mechanicznie wyprowadzać takie liczby z opisu budowy obiektów kombinatorycznych. Obejmuje to generowanie funkcji.

Doskonałym odniesieniem jest Analytic Combinatorics autorstwa zmarłego Philipe Flajoleta i Roberta Sedgewicka. Jest dostępny z linku powyżej.

Funkcjonalność generowania książek zmarłego Herberta Wilfa jest kolejnym darmowym źródłem.

I oczywiście Matematyka konkretna GKP jest skarbnicą.


W przypadku drzew binarnych wygląda to tak: Najpierw potrzebujesz jasnej definicji drzewa.

Drzewo binarne jest drzewem zrootowanym, w którym każdy węzeł inny niż liść ma dokładnie stopień 2.

Następnie musimy uzgodnić, co chcemy nazwać rozmiarem drzewa.

wprowadź opis zdjęcia tutaj

Po lewej wszystkie węzły są równe. W środku rozróżniamy liście i liście niebędące liśćmi. Po prawej stronie mamy przycięte drzewo binarne, z którego usunięto liście. Zauważ, że ma jednoargumentowe gałęzie dwóch typów (lewy i prawy)!

Teraz musimy uzyskać opis budowy tych obiektów kombinatorycznych. W przypadku drzew binarnych możliwy jest rekurencyjny rozkład .

Niech będzie zbiorem wszystkich drzew binarnych pierwszego typu, a następnie symbolicznie mamy: Awprowadź opis zdjęcia tutaj

Brzmi on następująco: „Obiektem klasy drzew binarnych jest albo węzeł, albo węzeł, po którym następują dwa drzewa binarne.” Można to zapisać jako równanie zbiorów:

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

Wprowadzając funkcję generującą która wylicza tę klasę obiektów kombinatorycznych, możemy przełożyć zestaw równań na równanie obejmujące funkcję generującą.A(z)

A(z)=z+zA2(z)

Nasz wybór równego traktowania wszystkich węzłów i przyjmowania liczby węzłów drzewa jako pojęcia jego wielkości wyraża się przez „oznaczenie” węzłów zmienną .z

Możemy teraz rozwiązać równanie kwadratowe dla i otrzymać, jak zwykle, dwa rozwiązania, jawnie zamkniętą postać funkcji generującej:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Teraz potrzebujemy po prostu (uogólnionego) twierdzenia dwumianowego Newtona:

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

przy i aby rozwinąć zamkniętą postać funkcji generującej z powrotem do szeregu mocy. Robimy to, ponieważ współczynnik przy jest tylko liczbą obiektów kombinatorycznych o rozmiarze , zwykle zapisywanych jako . Ale tutaj nasze pojęcie „wielkości” drzewa zmusza nas do szukania współczynnika z . Po odrobinie żonglowania dwumianami i silniami otrzymujemy:a=1/2x=4z2znn[zn]A(z)z2n+1

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

Jeśli zaczniemy od drugiego pojęcia wielkości, rekurencyjny rozkład jest następujący:

wprowadź opis zdjęcia tutaj

Otrzymujemy inną klasę obiektów kombinatorycznych . Brzmi on następująco: „Obiektem klasy drzew binarnych jest liść lub węzeł interal, po którym następują dwa drzewa binarne.”B

Możemy zastosować to samo podejście i zmienić w . Tylko tym razem zmienna oznacza tylko wewnętrzne węzły, a nie liście, ponieważ tutaj definicja „rozmiar” jest inna. Otrzymujemy również inną funkcję generowania:B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Wyodrębnienie współczynników daje

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

Klasy i zgadzają się co do liczby, ponieważ drzewo binarne z węzłami wewnętrznymi ma liści, a więc łącznie węzłów.ABnn+12n+1

W ostatnim przypadku musimy trochę ciężej pracować:

wprowadź opis zdjęcia tutaj

który jest opisem niepustych przycinanych prób binarnych. Rozszerzamy to do

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

i przepisz go za pomocą funkcji generujących

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

rozwiązać równania kwadratowe

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

i jeszcze raz

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

Zauważ, że funkcja generowania katalońskiego to

E(z)=114z2

wylicza klasę drzew ogólnych . To są drzewa bez ograniczeń stopnia węzła.

E={}×SEQ(E)

Brzmi on następująco: „Obiektem klasy ogólnych drzew jest węzeł, po którym następuje możliwa pusta sekwencja ogólnych drzew”.

E(z)=z1E(z)

Dzięki formule inwersyjnej Lagrange-Bürmann otrzymujemy

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

Udowodniliśmy więc, że jest tyle drzew ogólnych, ile drzew podwójnych. Nic dziwnego, że istnieje drzewo biologiczne między drzewami ogólnymi i binarnymi. Bijection jest znany jako korespondencja rotacyjna (wyjaśniona na końcu połączonego artykułu), która pozwala nam przechowywać dwa ogólne drzewa jako drzewa binarnego.

Zauważ, że jeśli nie rozróżnimy lewego i prawego rodzeństwa w klasie , otrzymamy kolejną klasę drzew :CT

wprowadź opis zdjęcia tutaj

jednorzędowe drzewa binarne. Mają też funkcję generującą jednak ich współczynnik jest inny. Otrzymasz liczby Motzkina

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

Aha, a jeśli nie lubisz generować funkcji, jest też wiele innych dowodów. Zobacz tutaj , jest taki, w którym można użyć kodowania drzew binarnych jako słów Dyck i uzyskać wznowienie z ich rekurencyjnej definicji. Następnie rozwiązanie tego problemu daje odpowiedź. Jednak metoda symboliczna ratuje Cię przed wymyśleniem nawrotu, ponieważ działa ona bezpośrednio z planami obiektów kombinatorycznych.

uli
źródło
Należy zauważyć, że „Wprowadzenie do analizy algorytmów” Sedgewicka i Flajoleta ( aofa.cs.princeton.edu ) obejmuje wiele takich samych materiałów, jak książka „Analytic Combinatorics”, ale w bardziej przystępnej formie.
vonbrand
7

Funkcje generujące są bardzo potężną i bardzo przydatną magiczną różdżką. Poniższe rozwiązanie pierwszego pytania (dlaczego są drzewa ) jest nieco mniej magiczne. Stąd słodki.Cn

Przykład. Aby utworzyć drzewo węzłów, zaczynamy od sekwencji, w której występuje razy, a występuje razy. Na przykład . Spośród tych prefiksów o najmniejszej (i prawdopodobnie ujemnej) sumie wybierz najdłuższą; w tym przypadku . Weź ten prefiks od początku i umieść go na końcu; w tym przypadku otrzymujemy . Teraz zmień na i na ; w tym przypadku otrzymujemy . Usuń literę od początku, dodaj literę5+15+115+++++++++++++++++TETTETETTETEETEna końcu; w tym przypadku otrzymujemy TETETTETEEE. To jest opis drzewa T(E,T(E,T(T(E,T(E,E)),E))). Poniżej znajduje się wyjaśnienie, dlaczego jest to bijection. Kiedy już będziesz o tym przekonany, liczenie jest łatwe. Istnieją z , następnie podzieliliśmy przez ponieważ wybraliśmy jedną z możliwych cyklicznych permutacji.(5+65)±15+6

Pierwsze wstrzyknięcie. Typowa definicja drzew w ML to type tree = T of tree * tree | E; to znaczy, drzewo ma dwa (uporządkowane) poddrzewa lub jest puste. Oto w jaki sposób zbudowane są drzewa: T(T(E,E),T(T(E,E),T(E,E))). Upuszczając puch, możemy po prostu pisać TTEETTEETEE. Wszystkie te opisy zakończy ze związkiem E, więc jest zbędny: TTEETTEETE. (Zauważ, że puste drzewo odpowiada teraz pustemu ciągowi.) Ciągi te mają właściwość polegającą na tym, że każdy prefiks ma co najmniej tyle Ts co Es, aw sumie mają Ts i Es, gdzie jest liczbą węzłów drzewo.nnn

Drugi zastrzyk. Teraz zamieniamy T na +1, a E na -1. więc na sekwencje o wartości +1, o wartości -1 i sumach wszystkich prefiksów .nn0

Trzeci zastrzyk. Teraz nieznacznie zmieniamy wymóg dotyczący prefiksów: Prosimy, aby suma każdego niepustego prefiksu wynosiła . Aby było to możliwe, pozwalamy wartości +1 i wartości -1. (W przeciwnym razie suma całego łańcucha wynosiłaby 0 i nie spełniałaby warunku dla prefiksów.) Sekwencje te muszą zaczynać się od +1. Tak więc naprawdę są takie same jak poprzednio, z tym wyjątkiem, że na początku utknęły +1.>0n+1n

Właściwość Raney. Teraz nasze sekwencje zapomnieć na chwilę i zastanowić się jakiś skończony ciąg liczb całkowitych , , którego suma wynosi 1. Jeżeli wszystkie niepuste prefiksy mieć pozytywne sumy, wtedy nie cykliczny permutacji tej sekwencji ma te same właściwości. Czemu? Załóżmy, że istnieje taki, że mają również wszystkie niepuste prefiksy dodatnie. Następnie (właściwość sekwencji zaczynając od ) i (właściwość sekwencji zaczynając od ); stądx1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2, co jest sprzeczne z założeniem, że suma dla całej sekwencji wynosi 1.

Ponadto, biorąc pod uwagę pewną sekwencję z sumą 1, zawsze występuje permutacja cykliczna, która powoduje, że wszystkie niepuste prefiksy mają sumę dodatnią. (Dotyczy to nawet liczb rzeczywistych.)

Wniosek. Teraz policzmy sekwencje +1 i -1, które są bijection z drzewami. Z liczb musimy wybrać które są równe +1, pozostałe będą wynosić -1. Istnieją na to . Ale tylko w sekwencje zaliczane do tej pory ma pozytywny prefiksów. Tak więc liczba zakorzenionych, uporządkowanych drzew binarnych wynosi:2n+1n+1(2n+1n+1)12n+1

12n+1(2n+1n+1)=12n+12n+1n+1(2nn)=1n+1(2nn)
rgrig
źródło
Bardzo dobra odpowiedź, ale następujące oświadczenie wymaga wyjaśnienia: „biorąc pod uwagę pewną sekwencję z sumą 1, zawsze istnieje permutacja cykliczna, która powoduje, że wszystkie niepuste prefiksy mają sumę dodatnią” ... przynajmniej wskazówką do dowodu byłoby miły.
vog
1
@vog: weź prefiks z najmniejszą sumą i przenieś go na koniec.
rgrig
1
@vog: powinien być także najdłuższym prefiksem, w przypadku gdy jest ich wiele z tą samą najmniejszą sumą. Zredagowałem odpowiedź, aby dodać przykład na początku.
rgrig