Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Rot-schwarz Bäume • Eigenschaften • Rotationen • Einfügen • (Löschen) 2 Einführung • Binäre Suchbäume – – – – Höhe h Höh O(h) für Operationen auf dynamische Mengen Baum kann zu Liste degenerieren h ist im Worst Case O(n) • Balancierte Suchbäume – Garantieren Garantieren, dass Baum nicht zu Liste degenerieren kann – Garantieren h=O(lg n) – Erzwungen mittels zusätzlichen Bedingungen an Datenstruktur 3 Rot-schwarz Bäume • Eine Variante von balancierten Suchbäumen • Ggarantieren, g , dass Höhe im Worst Case O(lg n) statt wie vorher O(n) – Alle All Operationen O i sind i d O(lg O(l n)) 4 Rot-schwarz Bäume • Zeiger gleich wie binäre Suchbäume (left right, (left, right p) • Konvention – Falls ein Kind nicht existiert, wird Zeiger auf Wä ht l Wächterelement t nil[T] il[T] gespeichert g i h t – Alle Knoten ausser nil[T] werden als innere Knoten betrachtet g auch auf nil[T] – Vater von Wurzel zeight 5 Rot-schwarz Bäume Hauptidee • Jeder Knoten hat ein Bit Zusatzinformation – Farbe des Knotens – Rot oder schwarz • Bedingungen g g an Farbreihenfolge g entlang g Pfaden von Wurzel zu Blatt – Garantieren Garantieren, dass kein Pfad mehr als doppelt so lang als alle anderen – Baum ist balanciert • Einfügen und Löschen müssen Bedingungen erhalten 6 Eigenschaften 7 Beispiel 8 Schwarz-Höhe • Höhe eines Knotens – Länge des längsten Pfades vom Knoten zu einem Blatt • Schwarz-Höhe eine Knotens bh(x) – A Anzahl hl Schwarzer S h K Knoten t auff iirgendeinem d i Pfad von x zum Blatt nil[T] – x selbst nicht gezählt [ ] mitgezählt g – Blatt nil[T] – Wegen Eigenschaft 5 wohldefiniert 9 Beispiel 10 Höhe von rot-schwarz Bäumen • Lemma: Eigenschaften von rot-schwarz Bäumen garantieren garantieren, dass Höhe des Baumes h <= 2lg(n+1) = O(lg n) • Garantiert effiziente Operationen! • Beweis mittels 2 Behauptungen 11 Höhe von rot-schwarz Bäumen 1. Behauptung: Knoten mit Höhe h hat Schwarz-Höhe bh mindestens h/2 • Beweis: Eigenschaft g 4 – Höchstens h/2 rote Knoten auf einem Pfad von K t zu jjedem Knoten d Bl Blatt tt – Mindestens h/2 Schwarze Knoten 12 Höhe von rot-schwarz Bäumen 2. Behauptung: Unterbaum von jedem Knoten x hat ≥ 2bh((x)) − 1 interne Knoten 13 Höhe von rot-schwarz Bäumen • Zusammenfassend 1. Knoten mit Höhe h hat Schwarz-Höhe ≥ h/2 / 2. Für jjeder Knoten x,, Unterbaum hat interne Knoten ≥ 2bh(x) − 1 • Sei b Schwarz Schwarz-Höhe Höhe der Wurzel, Wurzel n Anzahl Knoten im ganzen Baum 14 Operationen • Nicht-modifizierende Operationen (Suchen, Vorgänger, Nachfolger, Minimum, Maximum) gleich l i h wie i bi binäre ä SSuchbäume hbä – Aufwand O(lg n) • Einfügen und Löschen sind komplizierter • Einfügen – Roter Knoten: kann Eigenschaft 4 verletzen – Schwarzer Knoten: kann Eigenschaft 5 verletzen • Löschen – Rote Knoten: kein Problem – Schwarze Knoten: kann Eigenschaften 2, 4, oder 5 verletzen 15 Übersicht Rot-schwarz Bäume • Eigenschaften • Rotationen • Einfügen • (Löschen) 16 Rotationen • Einfügen und Löschen zerstören rotschwarz Eigenschaften • Benötigen g Rotationen,, um rot-schwarz Eigenschaften wiederherzustellen – Ändern Ä d Baumstruktur B k – Bewahren binäre Suchbaum-Eigenschaft • Es gibt Links- und Rechtsrotationen – Inverse voneinander – Implementiert durch umhängen von Zeigern 17 Rotationen 18 Beispiel 19 Rotationen • Aufwand konstant, da eine konstante Anzahl Zeiger verändert werden • Rotationen werden auch in anderen balancierten Suchbäumen verwendet – AVL Bä Bäume, SSplay l Bä Bäume http://en.wikipedia.org/wiki/AVL_tree http://en.wikipedia.org/wiki/Splay_tree Übersicht Rot-schwarz Bäume • Eigenschaften • Rotationen • Einfügen • (Löschen) 21 Einfügen • Zwei Schritte 1. Einfügen (fast) wie in binären Suchbaum 2 Wiederherstellen der rot-schwarz 2. rot schwarz Eigenschaften 22 Einfügen 23 Eigenschaften 1. Ok 2. Verletzt falls z die Wurzel ist, sonst Ok 3 Ok 3. 4. Verletzt falls p[z] rot ist: sowohl z wie auch p[z] sind rot 5. Ok 24 Wiederherstellen der Eigenschaften 25 Schleifeninvariante • Zu Beginn jeder Iteration der whileSchleife gilt a. z ist rot b. Falls p[z] Wurzel, dann ist p[z] schwarz c Es gibt höchstens eine rot c. rot-schwarz schwarz Verletzung • Eigenschaft 2: z is die Wurzel und rot • Eigenschaft 4: sowohl z wie auch p[z] sind rot 26 Schleifeninvariante Initialisierung a. B Beii IInitialisierung iti li i iistt z roter t K Knoten, t d der eingefügt wurde b. Falls p[z] Wurzel, dann schwarz vor Einfügen und Farbe wurde nicht geändert Einfügen, c. Zwei Fälle – Falls Eigenschaft 2 verletzt: rote Wurzel ist Knoten der eingefügt wurde, keine andere Verletzung alls Eigenschaft ge sc a t 4 ve verletzt: let t: z u und d p[ p[z]] ssind d rot, ot, – Falls keine andere Verletzung 27 Schleifeninvariante Terminierung • Schleife endet weil p[z] schwarz ist, also ist Eigenschaft g 4 ok • Letzte Zeile garantiert Eigenschaft 2 • Deshalb: rot-schwarz Eigenschaften bei Terminierung erfüllt 28 Schleifeninvariante Fortsetzung • Fallunterscheidung – 6 Fälle, Fälle 3 symmetrisch zu den anderen 3 – Je 3 Fälle für p[z] entweder linkes oder rechtes ht Ki Kind d – Beschreibung hier nimmt an p[z] ist linkes Kind – y bezeichnet den Onkel von z, also den Bruder von p[z] p[ ] • Fälle schliessen sich gegenseitig nicht aus 29 Fall 1: Onkel y ist rot • p[p[z]] [ [ ]] muss schwarz h sein, i weil il sowohl hl z wie i p[z] rot sind, aber es nur eine Verletzung von Eigenschaft 4 gibt • Mache p[z] und y schwarz => Eigenschaft 4 ok, aber Eigenschaft 5 kann verletzt erlet t sein • Mache p[p[z]] rot => Eigenschaft 5 ok • Nächste Iteration hat p[p[z]] als neues z 30 Fall 2: y ist schwarz, z ist rechtes Kind • Linksrotation um p[z] => z ist nun linkes Kind, und z und p[z] sind rot • Sind nun in Fall 3 31 Fall 3: y ist schwarz, z ist linkes Kind • Mache p[z] schwarz und p[p[z]] rot • Rechtsrotation h um p[p[z]] • Eigenschaft 4 ok: nicht mehr zwei aufeinanderfolgende rote Knoten • p[z] [ ] ist i t jetzt j t t Schwarz S h => k keine i weiteren it Iterationen 32 Analyse • O(lg n) für RB-Insert • Für RB-Insert-Fixup – Jede Iteration ist O(1) – Jede Iteration ist entweder die letzte (Fälle 2 und d 3) oder d b bewegtt z zweii St Stufen f nach h oben b (Fall 1) – O(lg n) Stufen => O(lg n) Zeit g – Höchstens 2 Rotationen insgesamt! • Total: Einfügen in rot-schwarz Baum ist O(lg n) 33 Übersicht Rot-schwarz Bäume • Eigenschaften • Rotationen • Einfügen • (Löschen) 34 Löschen • Zwei Schritte 1. Löschen (fast) wie aus binärem Suchbaum 2 Wiederherstellen der rot-schwarz 2. rot schwarz Eigenschaften 35 Löschen 36 Löschen • y wurde ausgeschnitten • x ist entweder – yy‘ss einziges Kind bevor y ausgeschnitten wurde – oder der Wächter, falls y keine Kinder hatte • p[x] zweigt auf Knoten, der vorher y‘s Vater war 37 Rot-schwarz Verletzungen • Falls y rot, keine Verletzungen – – Keine K i Veränderung V ä d g der d SSchwarz-Höhen h Höh Keine neuen roten Knoten • Falls y schwarz, mögliche Verletzungen 1. Ok 1 2. Falls y die Wurzel und x rot ist, dann wurde Wurzel rot 3. Ok 4 Verletzt falls p[y] und x rot sind 4. 5. Jeder Pfad, der y enthält, hat jetzt einen schwarzen Knoten weniger 38 Rot-schwarz Verletzungen • Idee zur Reparatur: x bekommt ein „zusätzliches zusätzliches“ Schwarz • Alle Pfade,, die x enthalten,, erhalten +1 schwarz • Eigenschaft 5 repariert, aber Eigenschaft 1 verletzt – x ist doppelt schwarz oder rot & schwarz 39 Reparatur • Interpretation – Der Knoten, auf den x zeigt, hat ein zusätzliches („gedachtes“) Schwarz, aber sein Farbattribut wird nicht geändert • Idee: dee: bewege x im Baum au nach ac oben, obe , bis bs – x zeigt auf einen rot & schwarzen Knoten => mache h x schwarz h – x zeigt auf die Wurzel => zusätzliches Schwarz wird einfach entfernt g Rotationen und Umfärbungen g – Geeignete durchgeführt werden können 40 Reparatur 41 Reparatur • In der while Schleife – Zeigt x immer auf einen nicht nicht-Wurzel Wurzel, doppelt schwarzen Knoten – w ist der Bruder von x – w kann nicht nil[T] sein, weil das Eigenschaft 5 am Knoten p[x] verletzen würde • 8 Fälle, Fäll je j 4 symmetrisch i h – Hier: betrachten Fälle wo x ein linkes Kind ist – Fälle schliessen sich gegenseitig nicht aus • Idee – Jede Transformation erhält Eigenschaft 5 – Jede Transformation verschiebt x zu p[ p[x], ], oder führt zu Termination der Schleife in der nächsten Iteration 42 Fall 1 Bruder w von x ist rot • • • • w muss schwarze Kinder haben Mache w schwarz und p[x] rot Linksrotation auf p[x] Neuer Bruder von x war Kind von w bevor Rotation => muss schwarz sein • Gehe zu Fall 2 2, 3 oder 4 43 Fall 2 w ist schwarz und w‘s Kinder sind schwarz • Entferne 1 Schwarz von x (=> einfach schwarz) und 1 von w (=> rot) • Bewege Schwarz zu p[x] • Nächste Iteration mit p[ p[x]] als neuem x • Falls vorher Fall 1, dann war p[x] rot => neues x ist rot & schwarz => Farbattribut von neuem x ist rot => Schleife terminiert, neues x wird schwarz in letzter Zeile 44 Fall 3 w ist schwarz, linkes Kind rot, rechtes schwarz • Mache w rot und w‘s linkes Kind schwarz • Rechtsrotation auf w • Neuer Bruder w von x ist schwarz mit rotem Kind => Fall 4 45 Fall 4 w ist schwarz, w‘s rechtes Kind ist rot • Mache w die Farbe von p[x] p[ ] • Mache p[x] schwarz und w‘s rechtes Kind schwarz • Linksrotation auf p[x] [ ] • Entferne extra schwarz auf x (=> x jetzt einfach schwarz) h ) ohne h rot-schwarz t h Ei Eigenschaften h ft zu verletzen • Fertig. F i Lass L x auff Wurzel W l zeigen, i SSchleife hl if terminiert i i 46 Analyse • RB-Delete ist O(lg n) • RB-Delete-Fixup – Nur Fall 2 erfordert mehr Iterationen • x bewegt sich eine Stufe nach oben • O(lg O(l n)) Iterationen It ti – Fälle 1, 3 und 4 haben eine Rotation => hö h höchstens 3R Rotationen i totall – Total O(lg n) 47 Zusammenfassung • Binäre Suchbäume – – – – Binäre Suchbaum Suchbaum-Eigenschaft Eigenschaft Wörterbuchoperationen (Suchen, Einfügen, Löschen) Prioritätswarteschlangen o tätswa tesc la ge (M (Minimum, u , Ma Maximum) u ) Sortierte Ausgabe (Vorgänger, Nachfolger) • Ohne Zusatzbedingungen: g g Höhe h=O(n) ( ) – Kann zu Liste degenerieren • Balancierte Bäume – – – – Z.B. rot-schwarz Bäume Zusatzbedingungen an Struktur Garantiert logarithmische Höhe h=O(lg n) Zusatzbedingungen müssen nach Einfügen, Einfügen Löschen wiederhergestellt werden, Aufwand O(lg n) 48 Nächstes Mal • Kapitel 15: dynamisches Programmieren 49