2009-09-08 6 views
24

Ich habe die article von Steve Yegge über Singletons gelesen. Darin erwähnt er, dass sein Lehrer ihm sagte, AVL Trees sei böse. Ist es nur, dass rote und schwarze Bäume eine bessere Lösung sind?Sind AVL Trees Evil?

+12

OP rep von 666 bestätigt AVL Trees sind böse – SwDevMan81

+1

Ich denke nicht, dass wir diese Frage dann aufwerten können? ;) –

Antwort

19

Böse von welchem ​​Standpunkt?

Wie immer: Es gibt keine schlechten Werkzeuge, nur schlechte Handwerker.

In meinem Gedächtnis haben AVL-Bäume langsamere Einfügung/Entfernung, aber schnelleres Wiederauffinden als Rot/schwarz. Hauptsächlich wegen des Balance-Algorithmus.

+4

Genau. Wenn Sie eine Karte zum einmaligen Schreiben benötigen, um viele zu lesen, sind AVL-Bäume schwer zu schlagen. Meiner Meinung nach sind sie auch leichter zu implementieren. – erickson

+5

Eine einmal beschreibbare Karte liest sich für mich eher nach einem sortierten Array ... Eine Karte mit Schreibzugriff - selten gelesen - viel klingt mehr als ein AVL-Baum. Stellen Sie sicher, dass Sie auch in diesen Fällen ein sortiertes Array berücksichtigen. Die konstanten Kosten sind erheblich niedriger, so dass Sie viele Einträge benötigen, bevor ein AVL-Tree sowohl den Rot/Schwarz-Baum als auch ein sortiertes Array übertrifft. –

+3

AVL-Bäume sind jedoch in hohem Maße nachvollziehbar. IME, RB-Bäume werden von ihren Machern nicht verstanden - sie befolgen lediglich die Regeln; Sie verstehen wirklich nicht, was konzeptionell vor sich geht. –

8

Nein, AVL-Bäume sind in keiner Hinsicht böse. Sie sind eine vollständig gültige selbstbalancierende Baumstruktur. Sie haben andere Leistungsmerkmale als rot-schwarze Bäume und diese Unterschiede führen dazu, dass die Menschen einen rot-schwarzen Baum über einen AVL-Baum wählen. Aber das macht sie nicht böse.

4

Ich bin sicher, dass AVL-Bäume auf die gleiche Weise böse sind, wie GOTO böse ist oder BUBBLE SORT ist böse.

Algorithmen sind nicht böse, aber Algorithmen springen auch nicht auf und ab, um Ihnen zu sagen, wann sie angemessen sind.

+6

Goto ist kein Algorithmus und ist wirklich kein legitimer Vergleich. – Imagist

+2

Das Problem w/bubble sort ist, dass es keine echten Kompromisse gibt, die es überlegen machen. Das kann man für AVL-Bäume nicht sagen. –

+5

:: snark :: Bubble sort verwendet sehr wenig Code und lässt sich leicht in einer traditionellen Turing-Maschine realisieren. – dmckee

2

Hier ist eine Menge Informationen über die Unterschiede zwischen Rot-Schwarz und AVL-Bäume:

http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=22948

und ein Papier zu vergleichen die unterschiedlichen Strukturen:

http://www.stanford.edu/~blp/papers/libavl.pdf

Kurz - AVL ist schneller zu suchen, Rot-Schwarz schneller einzufügen.

+0

Die Fogcreek-Verbindung ist schlecht. Der Inhalt ist irreführend. AVL-Bäume benötigen keine O (log n) -Drehungen für das Rebalancing. Max 2. – Jesse