Was ist die durchschnittliche Höhe eines Binärbaums?

10

Gibt es eine formale Definition für die durchschnittliche Höhe eines Binärbaums?

Ich habe eine Tutorial-Frage zum Ermitteln der durchschnittlichen Höhe eines Binärbaums mithilfe der folgenden zwei Methoden:

  1. Die natürliche Lösung könnte darin bestehen, die durchschnittliche Länge aller möglichen Pfade von der Wurzel zu einem Blatt zu nehmen

    avh1(T)=1# leaves in Tv leaf of Tdepth(v) .

  2. Eine andere Möglichkeit besteht darin, es rekursiv zu definieren, dh die durchschnittliche Höhe eines Knotens ist der Durchschnitt über die durchschnittlichen Höhen der Teilbäume plus eins

    avh2(N(l,r))=avh2(l)+avh2(r)2+1

    mit avh2(l)=1 für Blätter l und avh2(_)=0 für leere Slots.

Nach meinem derzeitigen Verständnis zum Beispiel die durchschnittliche Höhe des Baumes T

    1    
   / \
  2   3
 /
4

ist avh2(T)=1.25 nach der zweiten Methode, die Rekursion verwendet.

Ich verstehe jedoch immer noch nicht ganz, wie ich den ersten machen soll. avh1(T)=(1+2)/2=1.5 ist nicht korrekt.

Zeitlos
quelle
1
Können Sie einen Kontext angeben? Es gibt keine "richtige" mathematische Definition; Sie können "durchschnittliche Höhe eines Binärbaums" definieren, wie Sie möchten. (Durchschnitt von was über welche Verteilung ?) Unterschiedliche Definitionen sind jedoch für verschiedene Anwendungen mehr oder weniger nützlich .
JeffE
@JeffE "Es ist nicht sofort klar, wie die durchschnittliche Höhe eines Binärbaums definiert werden soll. Die natürlichste Lösung könnte darin bestehen, die durchschnittliche Länge der möglichen Pfade von der Wurzel zu einem Blatt zu haben. Eine einfachere (vielleicht sogar vereinfachende) Lösung ist zu sagen, dass die durchschnittliche Höhe für einen Knoten der Durchschnitt über die durchschnittliche Höhe der Teilbäume plus eins ist. Sie finden es einfacher, diese Alternative zu codieren. Können Sie Beispiele geben, um den Unterschied zu demonstrieren? "
Zeitlos
Ich habe versucht, Ihren Beitrag klarer zu machen, indem ich die beiden Varianten genau definiert habe. Bitte überprüfen Sie, ob ich Ihren Text richtig interpretiert habe. Insbesondere fehlte Ihnen der Anker für die zweite Variante; Ob Sie Blätter nehmen, um die Höhe eins oder null zu haben, macht einen Unterschied.
Raphael

Antworten:

3

Es gibt keinen Grund zu der Annahme, dass beide Definitionen dasselbe Maß beschreiben. Sie können rekursiv schreiben :avh1

avh1(N(l,r))=lv(l)(avh1(l)+1)+lv(r)(avh1(r)+1)lv(l)+lv(r)

mit für Blätter . Wenn Sie nicht glauben, dass dies dasselbe ist, entfalten Sie die Definition von auf der rechten Seite oder führen Sie einen Induktionsnachweis durch.avh1(l)=0lavh1

Jetzt sehen wir, dass ganz anders funktioniert als . Während die rekursive Höhen von einem Knoten Kinder wiegt gleich (Hinzufügen und Division durch zwei), wiegt sie gemäß der Anzahl der Blätter die sie enthalten. Sie sind also die gleichen (Modulo der Anker) für Bäume mit Blattausgleich, dh in dem Sinne, dass Geschwisterbäume gleich viele Blätter haben. Wenn Sie die rekursive Form von mit vereinfachen, ist dies sofort ersichtlich. Bei unausgeglichenen Bäumen sind sie jedoch unterschiedlich.avh 2 avh 2 avh 1 avh 1 lv ( l ) = lv ( r )avh1avh2avh2avh1avh1lv(l)=lv(r)

Ihre Berechnungen sind in der Tat korrekt (gemäß Ihrer Definition); Beachten Sie, dass der Beispielbaum nicht blattausgeglichen ist.

Raphael
quelle
Ist es möglich, den Implementierungscode für , habe ich nicht ganz die Idee, wie man es rekursiv machtavh1
Timeless
@null: Entschuldigung, ich verstehe die Frage nicht. Sie damit, wie Sie beweisen können, dass die rekursive Definition von Ihrer entspricht? avh1
Raphael
Ich meine den Implementierungscode mit Rekursion
Timeless
@null: Sie können die Formel fast wörtlich kopieren , vorausgesetzt, Sie integrieren den Basisfall. Wie das genau geht, hängt von Ihrer Programmiersprache und der Baumimplementierung ab. Ich schlage vor, dass Sie die Wiederholung von Stack Overflow verwenden, wenn die Implementierung eine Hürde für Sie darstellt.
Raphael
2

Bearbeiten: Jeffe macht einen guten Punkt in seinem Kommentar oben. Sie sollten in der folgenden Antwort wahrscheinlich "richtig gegen falsch" als "bequem / konsistent gegen inkonsistent" lesen.

Es scheint, dass Ihre zweite Berechnung falsch ist. Die Höhe eines Teilbaums mit einem einzelnen Knoten (dh einem Blatt) sei 0. Dann ist die Höhe der Teilbaumwurzel bei:

  • Höhe bei 4 ist 0
  • Höhe bei 3 ist 0
  • Höhe bei 2 ist durchschnittliche Höhe bei 3 + 1 = 0 + 1 = 1
  • Die Höhe bei 1 ist der Durchschnitt der Höhen bei 2 und 3 = (0 + 1) / 2 + 1 = 1,5

Ich denke, Sie machen die erste Berechnung richtig und 1.5 ist die richtige Antwort.

Joe
quelle
Die Idee ist ein Nullknoten mit einer Höhe von -1, basierend auf dem 2. Ansatz, die durchschnittliche Höhe eines Knotens ist der Durchschnitt der Teilbäume plus 1, die durchschnittliche Höhe des Knotens 4 ist ((-1) + (- 1)) / 2 + 1 = 0 Die durchschnittliche Höhe von Knoten 2 beträgt (0 + (- 1)) / 2 + 1 = 0,5, sodass die durchschnittliche Höhe der Wurzel 1,25 beträgt.
Zeitlos
@null Sie können es so definieren, wenn Sie darauf bestehen, aber dann sind die beiden Definitionen nicht konsistent.
Joe