Binäre Bäume zählen


28

(Ich bin ein Student mit mathematischem Hintergrund und möchte wissen, wie man die Anzahl einer bestimmten Art von Binärbäumen zählt.)

Mit Blick auf Wikipedia - Seite für Binary Trees , habe ich diese Behauptung aufgefallen , dass die Zahl der Wurzeln Binärbäumen der Größe wäre diese katalanische Nummer : n

Cn=1n+1(2nn)

Aber ich verstehe nicht, wie ich selbst zu einem solchen Ergebnis kommen könnte? Gibt es eine Methode, um dieses Ergebnis zu finden?

Was ist nun, wenn die Reihenfolge der Unterbäume (welche ist links, welche ist rechts) nicht berücksichtigt wird? Aus meiner Sicht denke ich beispielsweise, dass diese beiden Bäume gleich sind:

   /\   /\
  /\     /\

Wäre es möglich, eine ähnliche Methode anzuwenden, um zu zählen, wie viele dieser Objekte genau Knoten haben?n


Ist der Zählsatz von Polya auf zweiwurzelige Bäume hier anwendbar?
Nicholas Mancuso

Antworten:


35

Zum Zählen vieler Arten von kombinatorischen Objekten, wie in diesem Fall Bäume, gibt es leistungsstarke mathematische Werkzeuge (die symbolische Methode), mit denen Sie solche Zählungen maschinell aus einer Beschreibung ableiten können, wie die kombinatorischen Objekte aufgebaut sind. Dabei werden Funktionen generiert.

Eine ausgezeichnete Referenz ist Analytic Combinatorics von Philipe Flajolet und Robert Sedgewick. Es ist über den obigen Link verfügbar.

Der verstorbene Herbert Wilf Buch generatingfunctionology ist eine andere freie Hand.

Und natürlich ist die Konkrete Mathematik von GKP eine Fundgrube.


Für binäre Bäume gilt: Zuerst müssen Sie den Baum klar definieren.

Ein binärer Baum ist ein verwurzelter Baum, in dem jeder Nicht-Blattknoten genau den Grad 2 hat.

Als nächstes müssen wir uns einigen, was wir die Größe eines Baumes nennen wollen .

Bildbeschreibung hier eingeben

Links sind alle Knoten gleich. In der Mitte unterscheiden wir die Blätter und Nichtblätter. Rechts haben wir einen beschnittenen Binärbaum, in dem die Blätter entfernt wurden. Beachten Sie, dass es unäre Zweige von zwei Typen gibt (links und rechts)!

Nun müssen wir eine Beschreibung ableiten, wie diese kombinatorischen Objekte aufgebaut sind. Bei binären Bäumen ist eine rekursive Zerlegung möglich.

Sei die Menge aller binären Bäume des ersten Typs, dann haben wir symbolisch: ABildbeschreibung hier eingeben

Es lautet wie folgt: „Ein Objekt der Klasse der Binärbäume ist entweder ein Knoten oder ein Knoten, auf den zwei Binärbäume folgen.“ Dies kann als Mengengleichung geschrieben werden:

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

Durch die Einführung der Erzeugungsfunktion , die diese Klasse von kombinatorischen Objekten auflistet, können wir die Mengengleichung in eine Gleichung mit der Erzeugungsfunktion übersetzen.A(z)

A(z)=z+zA2(z)

Unsere Wahl, alle Knoten gleich zu behandeln und die Anzahl der Knoten im Baum als Begriff ihrer Größe zu nehmen, drückt sich durch "Markieren" der Knoten mit der Variablen .z

Wir können nun die quadratische Gleichung für lösen und erhalten wie üblich zwei Lösungen, die explizit geschlossene Form der Erzeugungsfunktion:zA2(z)A(z)+z=0A(z)

A(z)=1±14z22z

Jetzt brauchen wir einfach Newtons (verallgemeinerten) Binomialsatz:

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

mit und erweitern Sie die geschlossene Form der Erzeugungsfunktion zurück in eine Potenzreihe. Wir tun dies, weil der Koeffizient bei nur die Anzahl der kombinatorischen Objekte der Größe , die typischerweise als . Aber hier zwingt uns unser Begriff der „Größe“ des Baumes, nach dem Koeffizienten bei zu suchen . Nach einigem Jonglieren mit Binomialzahlen und Fakultätszahlen erhalten wir:a=1/2x=4z2znn[zn]A(z)z2n+1

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

Wenn wir mit dem zweiten Begriff der Größe beginnen, ist die rekursive Zerlegung:

Bildbeschreibung hier eingeben

Wir erhalten eine andere Klasse von kombinatorischen Objekten . Es lautet: "Ein Objekt der Klasse der Binärbäume ist entweder ein Blatt oder ein Zwischenknoten, gefolgt von zwei Binärbäumen."B

Wir können den gleichen Ansatz anwenden und zu . Nur diesmal markiert die Variable nur die internen Knoten, nicht die Blätter, da hier die Definition „die Größe“ unterschiedlich ist. Wir bekommen auch eine andere Erzeugungsfunktion:B={}({}×B×B)B=1+zB2(z)z

B(z)=114z2z

Das Extrahieren des Koeffizienten ergibt

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

Die Klassen und stimmen in der Anzahl überein, da ein Binärbaum mit internen Knoten Blätter hat, also insgesamt Knoten.ABnn+12n+1

Im letzten Fall müssen wir etwas härter arbeiten:

Bildbeschreibung hier eingeben

Dies ist eine Beschreibung nicht leerer beschnittener Binärversuche. Wir erweitern dies auf

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

und mit generierenden Funktionen neu schreiben

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

Löse die quadratischen Gleichungen

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

und nochmal holen

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

Beachten Sie, dass die katalanische Erzeugungsfunktion ist

E(z)=114z2

es zählt die Klasse der allgemeinen Bäume auf . Das sind die Bäume ohne Einschränkung des Knotengrades.

E={}×SEQ(E)

Es lautet wie folgt: "Ein Objekt der Klasse der allgemeinen Bäume ist ein Knoten, dem eine mögliche leere Folge von allgemeinen Bäumen folgt."

E(z)=z1E(z)

Mit der Lagrange-Bürmann Inversion Formula erhalten wir

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

Wir haben also bewiesen, dass es so viele allgemeine Bäume gibt wie es binäre Bäume gibt. Kein Wunder, dass zwischen dem allgemeinen und dem binären Baum ein Unterschied besteht. Die Bijektion ist als Rotationskorrespondenz bekannt (erklärt am Ende des verlinkten Artikels), die es uns ermöglicht, jeden allgemeinen Baum als binären Baum zu speichern.

Beachten Sie, dass wir, wenn wir das linke und das rechte Geschwister in class nicht unterscheiden, eine weitere Klasse von Bäumen :CT

Bildbeschreibung hier eingeben

die unären binären Bäume. Sie haben auch eine Erzeugungsfunktion jedoch ist ihr Koeffizient unterschiedlich. Sie erhalten die Motzkin-Zahlen

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

Oh, und wenn Sie keine Funktionen generieren möchten, gibt es auch viele andere Beweise. Sehen Sie hier , es gibt einen Punkt, an dem Sie die Kodierung von Binärbäumen als Dyck-Wörter verwenden und eine Wiederholung aus ihrer rekursiven Definition ableiten können. Wenn Sie dann diese Wiederholung lösen, erhalten Sie auch die Antwort. Die symbolische Methode erspart Ihnen jedoch in erster Linie die Wiederholung, da sie direkt mit den Blaupausen der kombinatorischen Objekte zusammenarbeitet.


Zu beachten ist, dass Sedgewick und Flajolet in "Introduction to the Analysis of Algorithms" ( aofa.cs.princeton.edu ) eine Menge des gleichen Materials wie das Buch "Analytic Combinatorics" behandeln, jedoch in einer zugänglicheren Form.
Vonbrand

7

Das Generieren von Funktionen ist ein sehr mächtiger und sehr nützlicher Zauberstab. Die folgende Lösung zur ersten Frage (warum gibt es Bäume) ist etwas weniger magisch. Daher süß.Cn

Beispiel. Um einen Baum zu produzieren Knoten wir mit einer Sequenz zu starten , in der auftreten - mal, und auftritt mal. Zum Beispiel . Wählen Sie unter den Präfixen mit der kleinsten (und möglicherweise negativen) Summe die längste aus. in diesem Fall . Nehmen Sie dieses Präfix von Anfang an und setzen Sie es am Ende. In diesem Fall erhalten wir . Ändern Sie nun in und in ; in diesem Fall bekommen wir . Entfernen Sie ein vom Anfang und fügen Sie ein5+15+115+++++++++++++++++TETTETETTETEETEAm Ende; in diesem Fall bekommen wir TETETTETEEE. Dies ist eine Beschreibung des Baumes T(E,T(E,T(T(E,T(E,E)),E))). Nachfolgend finden Sie eine Erklärung, warum dies eine Bijektion ist. Sobald Sie davon überzeugt sind, ist das Zählen einfach. Es gibt Sequenzen von , dann haben wir durch weil wir eine der möglichen zyklischen Permutationen gewählt haben.(5+65)±15+6

Erste Biktion. Eine typische Definition für Bäume in ML ist type tree = T of tree * tree | E; Das heißt, ein Baum hat entweder zwei (geordnete) Teilbäume oder er ist leer. Hier ist , wie Bäume sind so aufgebaut: T(T(E,E),T(T(E,E),T(E,E))). Flusen fallen lassen, wir können einfach schreiben TTEETTEETEE. Alle diese Beschreibungen werden mit einem Ende E, so dass es überflüssig ist: TTEETTEETE. (Beachten Sie, dass der leere Baum jetzt der leeren Zeichenfolge entspricht.) Diese Zeichenfolgen haben die Eigenschaft, dass jedes Präfix mindestens so viele Ts wie Es hat, und insgesamt haben sie Ts und Es, wobei die Anzahl der Knoten von ist der Baum.nnn

Zweite Bijektion. Wir ersetzen nun T durch +1 und E durch -1. Wir betrachten also Sequenzen mit Werten +1, mit Werten -1 und mit den Summen aller Präfixe .nn0

Dritte Bijektion. Wir ändern nun die Vorgabe für Präfixe ein wenig: Wir fordern, dass die Summe aller nicht leeren Präfixe . Damit dies möglich ist, lassen wir Werte +1 und Werte -1. (Andernfalls wäre die Summe der gesamten Zeichenfolge 0 und würde die Bedingung für Präfixe nicht erfüllen.) Diese Sequenzen müssen mit +1 beginnen. Sie sind also wirklich die gleichen wie zuvor, außer dass sie am Anfang eine +1 haben.>0n+1n

Raney Eigentum. Vergessen Jetzt ist unsere Sequenzen für einen Moment und betrachten eine endliche Folge von ganzen Zahlen , , , deren Summe 1. Wenn alle nicht-leeren Präfixe positive Summen haben, dann keine zyklische Permutation dieser Sequenz hat die gleiche Eigenschaft. Warum? Angenommen, es gibt ein , bei dem auch alle nicht leeren Präfixe positiv sind. Dann (Eigenschaft der Sequenz ab ) und (Eigenschaft der Sequenz ab ); daherx1xmk1xk,,xm,x1,,xk1x1++xk11x1xk++xm1xkx1++xm2Dies widerspricht der Annahme, dass die Summe für die gesamte Sequenz 1 ist.

Darüber hinaus gibt es bei einer Sequenz mit der Summe 1 immer eine zyklische Permutation, die bewirkt, dass alle nicht leeren Präfixe eine positive Summe haben. (Dies gilt auch für reelle Zahlen.)

Fazit. Zählen wir nun die Folgen von +1 und -1, die sich in einer Bijektion mit Bäumen befinden. Aus Zahlen müssen wir auswählen , die gleich +1 sind, die anderen werden -1 sein. Es gibt Möglichkeiten, dies zu tun. Aber nur in - Sequenzen bisher gezählt hat positive Präfixe. Die Anzahl der verwurzelten, geordneten Binärbäume ist also:2n+1n+1(2n+1n+1)12n+1

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

Sehr gute Antwort, aber die folgende Aussage bedarf einer Erklärung: "Bei einer bestimmten Folge mit der Summe 1 gibt es immer eine zyklische Permutation, die bewirkt, dass alle nicht leeren Präfixe eine positive Summe haben" .... zumindest ein Hinweis auf den Beweis wäre nett.
Vog

1
@vog: Nimm das Präfix mit der kleinsten Summe und verschiebe es ans Ende.
rgrig

1
@vog: Es sollte auch das längste Präfix sein, falls es mehrere mit der gleichen kleinsten Summe gibt. Ich habe die Antwort bearbeitet, um am Anfang ein Beispiel hinzuzufügen.
rgrig
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.