Ich verstehe die Struktur von binären Bäumen und wie man sie durchquert. Ich bemühe mich jedoch, ihre tatsächlichen Verwendungen, Zwecke in Programmen und Programmierung zu realisieren. Wenn ich an Beispiele für hierarchische Daten aus der Praxis denke, haben sie mit ziemlicher Sicherheit mehr als zwei Kinder. Beispielsweise kann eine Mutter in einem Stammbaum häufig mehr als zwei Kinder haben.
Sind Binärbäume wirklich nur nützlich, um linear zusammengehörige Daten zu speichern, da Arrays und Listen schneller verarbeitet werden können? Alternativ dienen sie einem bestimmten Zweck beim Speichern hierarchischer Daten? Wenn ja, welche Beispiele gibt es für die Anwendung von Binärbäumen? Welche Daten sind so, dass ein Knoten höchstens 2 Kinder hat?
quelle
Antworten:
Nein, binäre Bäume dienen nicht zum Speichern hierarchischer Daten in dem Sinne, an den Sie denken. Der primäre Anwendungsfall für n-ary-Bäume, bei denen
n
es sich um eine feste Zahl handelt, ist die schnelle Suchfunktion , keine semantische Hierarchie.Denken Sie an das alte Spiel, in dem eine Person an eine Zahl zwischen 1 und 100 denkt und die andere es mit möglichst wenigen Vermutungen erraten muss. Wenn Sie falsch raten, muss die Person, die an die Zahl denkt, Ihnen mitteilen, ob Sie es auch sind hoch oder zu niedrig? Nach einer Weile wird es langweilig, weil Sie schnell herausfinden, dass Sie immer bei 50 beginnen, dann bei 25 oder 75 beginnen und den zu durchsuchenden Bereich mit jeder neuen Vermutung in zwei Hälften teilen sollten, und schließlich können Sie eine beliebige Zahl erraten in höchstens 7 raten, garantiert.
Es ist vielleicht kein lustiges Spiel, aber diese Eigenschaft macht binäre (und andere n-fache) Bäume nützlich: Sie können sie verwenden, um einen sehr großen Datensatz in sehr kurzer Zeit zu durchsuchen.
quelle
Jede Baumstruktur, in der ein Knoten eine unbegrenzte Anzahl von untergeordneten Knoten haben kann, kann mithilfe eines Binärbaums implementiert werden.
Ersetzen Sie jeden Knoten in Ihrem Baum durch einen Knoten mit einem rechten und einem linken Zeiger. Der linke Zeiger zeigt auf das erste untergeordnete Element des Knotens. Der rechte Knoten geht zum nächsten Geschwister des Knotens. Alle untergeordneten Knoten eines bestimmten Knotens befinden sich in einer verknüpften Liste, die durch ihre rechten Zeiger verbunden ist, wobei der Kopf der Liste auf den linken Zeiger des übergeordneten Knotens zeigt.
Ihr komplizierter n-Ary-Baum ist zu einem einfachen binären Baum geworden.
Ich bin sicher, das ist in Knuth, Vol. 1 irgendwo.
quelle
Binäre Bäume, warum sie verwenden?
Beim Programmieren arbeiten Sie viel mit Sammlungen von Daten des gleichen Typs.
Die zwei grundlegenden Möglichkeiten zum Speichern dieser Daten sind: verknüpfte Listen und Arrays.
Sie haben beide Vor- und Nachteile: In einer verknüpften Liste können Elemente einfach an einer beliebigen Position hinzugefügt oder entfernt werden. Der Zugriff auf ein bestimmtes Element ist jedoch schwieriger, da Sie die Liste durchgehen müssen, bis Sie das gewünschte Element erreicht haben.
Mit einem Array ist der Zugriff auf ein bestimmtes Element einfach, es ist jedoch schwieriger, ein Element einzufügen oder zu löschen, da Einfügen bedeutet: Array um eins erweitern, alle Elemente vor der Einfügeposition 1 nach rechts verschieben und das Element einfügen.
Sowohl die verknüpfte Liste als auch das Array haben also Nachteile.
Binäre Bäume werden erstellt, um sowohl Probleme des Arrays als auch der verknüpften Liste zu lösen:
Binärbäume sind also ideal, wenn Sie viele Daten haben, die sich regelmäßig ändern.
quelle