it-swarm.com.de

Unterschied zwischen rot-schwarzen Bäumen und AVL-Bäumen

Kann jemand bitte erklären, was die Hauptunterschiede zwischen diesen beiden Datenstrukturen sind? Ich habe versucht, online eine Quelle zu finden, die die Unterschiede/Ähnlichkeiten hervorhebt, aber ich habe nichts zu Informatives gefunden. In welchen Fällen wäre einer dem anderen vorzuziehen? Welche praktischen Situationen machen einen "besser" als den anderen?

80
Bob John

AVL-Bäume halten ein starreres Gleichgewicht als rot-schwarze Bäume. Der Pfad von der Wurzel zum tiefsten Blatt in einem AVL-Baum beträgt höchstens ~ 1,44 lg (n + 2), während er in rot-schwarzen Bäumen höchstens ~ 2 lg (n + 1) beträgt.

Infolgedessen ist die Suche in einem AVL-Baum in der Regel schneller. Dies führt jedoch zu einer langsameren Einfügung und Löschung aufgrund von mehr Rotationsvorgängen. Verwenden Sie daher einen AVL-Baum, wenn Sie erwarten, dass die Anzahl der Suchvorgänge die Anzahl der Aktualisierungen des Baums dominiert.

96
Fred Foo

Für kleine Daten:

Einfügen: Der RB-Baum und der AVL-Baum haben eine konstante maximale Rotationszahl, aber der RB-Baum ist schneller, da der RB-Baum im Durchschnitt weniger Rotation benötigt.

Nachschlagen: AVL-Baum ist schneller, weil der AVL-Baum weniger Tiefe hat.

löschen: Der RB-Baum hat eine konstante Anzahl maximaler Umdrehungen, aber der AVL-Baum kann O (log N) Umdrehungen als die schlechtesten haben. und im Durchschnitt hat der RB-Baum auch eine geringere Rotationszahl, so dass der RB-Baum schneller ist.

für große Datenmengen:

Einfügen: AVL-Baum ist schneller. weil Sie vor dem Einfügen nach einem bestimmten Knoten suchen müssen. Wenn Sie mehr Daten haben, wächst der Zeitunterschied beim Aufrufen des jeweiligen Knotens proportional zu O (log N). AVL-Baum und RB-Baum benötigen jedoch im schlimmsten Fall nur eine konstante Rotationszahl. Auf diese Weise wird der Flaschenhals zur Zeit, in der Sie nach diesem bestimmten Knoten suchen.

Nachschlagen: AVL-Baum ist schneller. (wie bei kleinen Daten)

delete: Der AVL-Baum ist im Durchschnitt schneller, aber im schlimmsten Fall ist der RB-Baum schneller. weil Sie auch nach einem sehr tiefen Knoten suchen müssen, um ihn vor dem Entfernen auszutauschen (ähnlich dem Grund des Einfügens). Im Durchschnitt haben beide Bäume eine konstante Rotationszahl. Der RB-Baum hat jedoch eine konstante obere Grenze für die Rotation.

45
DU Jiaen

Zitat aus diesem: nterschied zwischen AVL und Rot-Schwarz-Bäumen

RB-Bäume sind ebenso wie AVL-Bäume selbstausgleichend. Beide bieten eine Such- und Einfügeleistung für O (log n). Der Unterschied besteht darin, dass RB-Trees O(1) Rotationen pro Insert-Operation garantieren. Dies kostet die Leistung in realen Implementierungen. Vereinfacht ausgedrückt, profitieren RB-Trees von diesem Vorteil, wenn sie konzeptionell 2-3 sind Bäume, ohne den Overhead von dynamischen Knotenstrukturen mit sich zu tragen. Physikalisch sind RB-Bäume als binäre Bäume implementiert, die roten/schwarzen Flags simulieren 2-3 Verhaltensweisen.

per Definition ist jede AVL daher eine Teilmenge von Rot-Schwarz. Man sollte in der Lage sein, jeden AVL-Baum ohne Umstrukturierung oder Rotation zu färben, um ihn in einen Rot-Schwarz-Baum umzuwandeln.

8
taocp

AVL-Bäume werden häufig mit rot-schwarzen Bäumen verglichen, da beide dieselbe Menge von Operationen unterstützen und O(log n) Zeit für die Grundoperationen benötigen. Für suchintensive Anwendungen sind AVL-Bäume schneller als rot-schwarze Bäume, weil sie starrer ausbalanciert sind. Ähnlich wie rot-schwarze Bäume sind AVL-Bäume in der Höhe ausgeglichen. Beide sind im Allgemeinen weder gewichtsausgeglichen noch μ-ausgeglichen für μ ≤ ½; Das heißt, Geschwisterknoten können eine sehr unterschiedliche Anzahl von Nachkommen haben.

Aus dem Wikipedia-Artikel zu AVL Trees

3
user3078685

Die maximale Höhe der Bäume ist das Wichtigste, um das Gleichgewicht zu halten. Es entspricht fast 1.44 * log(n) für AVL, aber für RB tree ist es 2 * log(n). So können wir den Schluss ziehen, dass es besser ist, die AVL zu verwenden, wenn das Problem ein Suchanreiz ist. Was zählt, ist eine andere Frage für AVL- und RB-Baum. RB-Baum ist besser als AVL, wenn die zufällige Einfügung zu geringeren Kosten der Rotation erfolgt, aber die AVL ist gut, um die aufsteigenden oder absteigenden Daten einzufügen. Wenn das Problem ein Anreiz zum Einfügen ist, können wir den RB-Baum verwenden.

3
zhpmatrix

Die Tatsache, dass RedBlack-Bäume weniger Rotationen aufweisen, kann sie jedoch beim Einfügen/Löschen beschleunigen. Da sie normalerweise etwas tiefer sind, können sie beim Einfügen und Löschen auch langsamer sein. Jedes Mal, wenn Sie von einer Ebene im Baum zur nächsten wechseln, gibt es eine große Änderung, dass sich die angeforderten Informationen nicht im Cache befinden und aus dem RAM abgerufen werden müssen. Somit kann die Zeit, die durch weniger Umdrehungen gewonnen wird, bereits verloren gehen, da es tiefer navigieren muss und daher seinen Cache häufiger aktualisieren muss. Vom Cache aus arbeiten zu können oder nicht, macht einen großen Unterschied. Befinden sich die relevanten Informationen im Cache, können Sie mehrere Rotationsvorgänge ausführen, und zwar in der Zeit, die zum Navigieren in einer zusätzlichen Ebene erforderlich ist, und die Informationen der nächsten Ebene befinden sich nicht im Cache. In Fällen, in denen RedBlack theoretisch schneller ist und nur die erforderlichen Operationen berücksichtigt, kann es in der Praxis aufgrund von Cache-Fehlern langsamer sein.

2
Jimmy Venema

Um eine Vorstellung davon zu bekommen, wie ein AVL-Baum funktioniert, hilft this interaktive Visualisierung.

Sowohl AVL- als auch RedBlack-Bäume sind höhenausgeglichene Baumdatenstrukturen. Sie sind sich ziemlich ähnlich, und der eigentliche Unterschied besteht in der Anzahl der Rotationsoperationen, die bei jeder Add/Remove-Operation ausgeführt werden - im Falle von AVL höher, um einen insgesamt homogeneren Ausgleich zu gewährleisten.

Beide Implementierungen werden als O(lg N) skaliert, wobei N die Anzahl der Blätter ist. In der Praxis ist ein AVL-Baum jedoch bei suchintensiven Aufgaben schneller: Aufgrund des besseren Gleichgewichts sind die Tree-Durchquerungen im Durchschnitt kürzer. Andererseits ist das Einfügen und Löschen eines AVL-Baums langsamer: Eine höhere Anzahl von Umdrehungen ist erforderlich, um die Datenstruktur nach der Änderung richtig auszugleichen.

Für Implementierungen für allgemeine Zwecke (dh a priori ist nicht klar, ob Suchvorgänge vorherrschen) werden RedBlack Trees bevorzugt: Sie sind einfacher zu implementieren und in den gängigen Fällen schneller - überall dort, wo die Datenstruktur so häufig geändert wird, wie gesucht wird . In einem Beispiel verwenden TreeMap und TreeSet in Java) einen unterstützenden RedBlack-Baum.

2
Paolo Maresca

Fazit: AvlTrees sind etwas ausgewogener als RedBlackTrees. Beide Bäume benötigen insgesamt O (log n) Zeit für Suchvorgänge, Einfügungen und Löschvorgänge, für das Einfügen und Löschen sind jedoch O (log n) -Rotationen erforderlich, während für letzteres nur O(1) erforderlich ist = Umdrehungen.

Da Rotationen das Schreiben in den Speicher bedeuten und das Schreiben in den Speicher teuer ist, lassen sich RedBlackTrees in der Praxis schneller aktualisieren als AvlTrees

1
beanmoon

Nach dem, was ich gesehen habe, scheinen AVL-Bäume so viele Rotationen (manchmal rekursiv) durchzuführen, wie erforderlich sind, um die gewünschte Höhe des AVL-Baums (Protokoll n) zu erhalten. Dies macht es starrer ausbalanciert.

Für rot-schwarze Bäume gibt es 5 Regelsätze, die Sie benötigen, um beim Einfügen und Entfernen zu bleiben. Diese finden Sie hier http://en.wikipedia.org/wiki/Red-black_tree .

Die Hauptsache, die Ihnen für rot-schwarze Bäume helfen könnte, ist die Tatsache, dass Sie abhängig von diesen fünf Regeln den Baum bis zur Wurzel rekursiv färben können, wenn der Onkel rot ist. Wenn der Onkel schwarz ist, müssen Sie maximal zwei Umdrehungen ausführen, um alle Probleme zu beheben, die Sie haben, aber nach diesen ein oder zwei Umdrehungen sind Sie fertig. Pack es ein und sag gute Nacht, denn das ist das Ende der Manipulation, die du machen musst.

Die große Regel lautet Nummer 5 ... 'Jeder einfache Pfad von einem bestimmten Knoten zu einem seiner untergeordneten Blätter enthält die gleiche Anzahl schwarzer Knoten'.

Dies führt dazu, dass die meisten Umdrehungen notwendig sind, damit der Baum funktioniert, und dass der Baum nicht zu weit aus dem Gleichgewicht gerät.

1
Leon