Ein rot-schwarzer Baum ist ein binärer Suchbaum. Es ist nur eine Variante von BST, die über ausgefeilte Versionen der Operationen insert
und delete
verfügt, die den Baum so organisieren, wie er läuft, damit der Baum niemals "lang und strähnig" wird. Je länger und streicher ein Baum wird, desto mehr verhält er sich wie eine verkettete Liste. Im Durchschnitt erfordern verkettete Listenoperationen, dass die Hälfte der Liste berührt wird (oder die gesamte Liste im schlimmsten Fall), so dass die Laufzeit linear variiert (O (n) in der Anzahl der Elemente n). Wenn der Baum "buschig" oder fast ausgeglichen ist, sind die Operationen viel billiger (O (log n)). Die Rot-Schwarz-Algorithmen garantieren, dass der Baum buschig bleibt.
Um dies konkret zu machen, hier sind zwei Bäume, die die Schlüssel A bis G speichern. Die linke Seite ist lang und strähnig. Beachten Sie, wie es aussieht wie eine Liste. Im schlimmsten Fall benötigt man 4 Schlüsselvergleiche, um ein Element zu finden. Der Baum rechts ist buschig. Es braucht nur 3. Hier ist der Unterschied gering. Für einen Baum mit 1023 Elementen benötigt der sehnige Baum 512 Vergleiche und der buschige nur 10. Dies ist die Stärke von log n.
B _D_
/\ / \
A D B F
/\ /\ /\
C F A C E G
/\
E G
Der rot-schwarz-Baum ist nicht garantiert perfekt buschig sein (in der richtigen Terminologie „perfekt ausbalanciert“), aber die rot-schwarze Regeln garantieren, dass es so, dass Betriebszeiten in eine mathematisch strengen Weise buschigen genug variieren als der Logarithmus von n statt linear in n.
Das Genie der rot-schwarzen Regeln ist, dass sie "lokal" sind. Während einer Einfügung oder Löschung, die die Regeln bricht, ist es möglich, sie wiederherzustellen, indem nur eine konstante Anzahl von Knoten für jeden von der Operation berührten Knoten eingestellt wird. Daher sind sie billig und relativ einfach zu implementieren.
Doch wenn die Rot-Schwarz-Regeln für den ganzen Baum gelten, ist es möglich, durch einen geschickten mathematischen Beweis zu zeigen, dass es wie oben beschrieben buschig genug ist.
Was ist mit der Baumkarte? Eine Karte ist eine Funktion mit einer Domäne, die Schlüsselsatz K genannt wird, und Bereich, der als Wertsatz V bezeichnet wird. Um eine Baumstruktur zu implementieren, speichert jeder Knoten ein Schlüsselwertpaar <k,v>
mit k \in K
und v \in V
. In den obigen Zeichnungen (und den meisten Präsentationen) sind nur Tasten (Buchstaben A-G) gezeigt. In der Map funktionieren Insertion, Lookup und Deletion an diesen Paaren auf ziemlich offensichtliche Weise. Zum Beispiel sucht die Suche mit dem üblichen BST-Algorithmus nach einem Schlüssel. Wenn der Schlüssel gefunden wird, wird der Wert ebenfalls gefunden, da er sich in demselben Paar befindet. Das ist, was zurückgekehrt ist. In Java heißt das Paar Map.Entry
. Sie können dies in der Java source code überprüfen.
Ich werde nicht in die Details gehen, wie die rot-schwarzen Regeln funktionieren, weil ich the Wikipedia page nicht verbessern konnte. Meine Vermutung und Hoffnung ist, dass Sie das "große Bild" vermisst haben, so dass die Diskussion jetzt Sinn ergibt. Die gute Nachricht ist, dass fast alle Sprachen eine gründlich getestete und leistungsoptimierte Baumimplementierung bieten, weshalb es nicht notwendig ist, die obskuren Details von Rotationen zu kennen. Natürlich, wenn Sie neugierig sind und einfach nur wissen wollen, haben Sie es geschafft! Herzliche Glückwünsche!
Für was es wert ist, Top Coder Erklärungen von Algorithmen sind nicht immer am klarsten. Suche nach anderen, bis du für dich "klickst".Die respektierten Lehrbücher in CS werden aus einem bestimmten Grund respektiert: Ihre Erklärungen sind ausgezeichnet. Corman and Rivest ist ein beliebter Favorit.