Übung zur Vorlesung Algorithmische Geometrie Dipl.-Math. Bastian Rieck Arbeitsgruppe Computergraphik und Visualisierung Interdisziplinäres Zentrum für Wissenschaftliches Rechnen 8. Mai 2012 B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 1 / 32 Vorlesung Die Vorlesung Fragen? B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 2 / 32 Konvexe Hülle Konvexe Hülle einer Menge im R2 (Demo) B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 3 / 32 Balancierte Binärbäume Motivation Binärbaum Ideale Datenstruktur für Suchanfragen Performance hängt von Baumhöhe h ab: Ideal: h = O(log n) Worst-case: h = O(n) Will daher balancierten Binärbaum. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 4 / 32 Balancierte Binärbäume Rot-Schwarz-Bäume Definition Ein Rot-Schwarz-Baum ist ein Binärbaum, dessen Knoten jeweils eine Farbe (rot oder schwarz) zugewiesen ist. Zusätzlich hat der Baum folgende Eigenschaften: 1 Jeder Knoten ist entweder schwarz oder rot. 2 Der Wurzelknoten ist schwarz. 3 Alle Blattknoten sind schwarz. 4 Die Kinderknoten jedes roten Knotens sind schwarz. 5 Jeder (einfache) Pfad von einem Knoten zu irgendeinem Blattknoten im gleichen Teilbaum enthält die gleiche Anzahl von schwarzen Knoten. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 5 / 32 Balancierte Binärbäume Zwei rote Knoten können also nicht direkt verbunden sein. Folgerung Der (einfache) Pfad vom Wurzelknoten zum am weitesten entfernten Blatt ist höchstens doppelt so lange wie der (einfache) Pfad vom Wurzelknoten zum am nächsten gelegenen Blatt. Habe also h = O(2 log n) = O(log n). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 6 / 32 Balancierte Binärbäume Operationen Konvention Jeder innere Knoten habe zwei Kinder. Füge gegebenenfalls NULL-Knoten ein, um dies sicherzustellen. Erhaltung der Eigenschaften bei Einfügen und Entfernen nötig. Erhaltung der Eigenschaften entweder durch Umfärbung oder Rotation. Amortisierter Aufwand für beide Operationen: O(1) B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 7 / 32 Balancierte Binärbäume Einfügen Generell: Ersetze schwarzes Blatt durch roten Knoten (mit zwei schwarzen NULL-Kinderknoten). Stabilität der Eigenschaften Eigenschaft 3 bleibt immer erhalten. Eigenschaft 4 kann durch neuen roten Knoten verletzt werden, sowie beim Umfärben oder Rotieren. Eigenschaft 5 kann durch neuen schwarzen Knoten verletzt werden, sowie beim Umfärben oder Rotieren. Bezeichnungen: n (aktueller Knoten), p (Vaterknoten), g (Großvaterknoten), u (Onkelknoten, d.h. Bruderknoten des Vaterknotens). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 8 / 32 Balancierte Binärbäume Fall 1 n ist Wurzelknoten, d.h. der Baum war vorher leer: Färbe n schwarz wegen Eigenschaft 2. Da nun jeder Pfad von der Wurzel einen schwarzen Knoten mehr enthält, ist Eigenschaft 5 nicht verletzt. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 9 / 32 Balancierte Binärbäume Fall 2 p ist schwarz gefärbt. Eigenschaft 4 ist nicht verletzt. Eigenschaft 5 ist nicht verletzt, da wir einen roten Knoten einfügen, der einen schwarzen Knoten ersetzt. Müssen also nichts tun. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 10 / 32 Balancierte Binärbäume Ab jetzt p ist rot gefärbt. Wegen Eigenschaften 4 und 2 muss es auch einen Großvaterknoten g geben. Ebenso muss es auch einen Onkelknoten u geben (der auch ein Blatt sein kann). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 11 / 32 Balancierte Binärbäume Fall 3 Sowohl p als auch u sind rot. Färbe beide Knoten schwarz. Färbe g rot (Eigenschaft 5!) Färbe von g ausgehend rekursiv neu (beginne mit Fall 1). Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 12 / 32 Balancierte Binärbäume Ab jetzt Annahme: p ist das linke Kind (sonst: Bezeichnungen links und rechts vertauschen). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 13 / 32 Balancierte Binärbäume Fall 4 p ist rot, u ist schwarz. n ist das rechte Kind von p. Führe Linksrotation durch, um n und p zu vertauschen. Färbe p ausgehend von Fall 5 neu, um Eigenschaft 4 wiederherzustellen. Eigenschaft 5 bleibt erhalten, obwohl Pfade, die durch p gingen, nun auch durch n gehen! Wende Fall 5 an, um Eigenschaft 4 wiederherzustellen. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 14 / 32 Balancierte Binärbäume Fall 5 p ist rot, u ist schwarz. n ist das linke Kind von p. Führe Rechtsrotation durch. p ist jetzt Vaterknoten von n und g . Wir wissen, dass g schwarz sein muss, da p rot ist und Eigenschaft 4 gilt. Tausche Farben von p und g , um Eigenschaft 4 wiederherzustellen. Eigenschaft 5 bleibt erhalten, denn alle Pfade, die durch p, n, g gingen, haben Knoten g verwendet und laufen nun durch p. p ist als einziger der drei Knoten schwarz. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 15 / 32 Balancierte Binärbäume Löschen Regulärer Binärbaum Trivial, falls die Nachfolger des Knotens Blätter sind oder der Knoten selbst ein Blattknoten ist. Falls Knoten zwei Nachfolger hat, die keine Blattknoten sind, suche entweder maximales Element im linken Teilbaum oder minimales Element im rechten Teilbaum. Ersetze den Wert im zu löschenden Knoten dann durch das gefundene Element und lösche den Knoten aus dem Teilbaum. 7 6 9 6 9 9 6 Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 16 / 32 Balancierte Binärbäume Löschen Sei m der zu löschende Knoten. Rot-Schwarz-Baum Umkopieren der Werte verletzt keine der Eigenschaften. Muss also nur Fall betrachten, in dem m höchstens einen Kinderknoten hat, der kein Blattknoten ist (andere Fälle können darauf reduziert werden). Sei daher c das Kind von m (falls beide Kinder von m Blätter sind, wähle irgendeines aus). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 17 / 32 Balancierte Binärbäume Einfache Fälle Falls m rot ist, ersetze m durch c. c muss wegen Eigenschaft schwarz sein und die Ersetzung verletzt keine Eigenschaften. Falls m schwarz ist und c rot, färbe c schwarz und entferne m. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 18 / 32 Balancierte Binärbäume Komplexere Fälle m und c sind beide schwarz. Ersetze m durch c und bezeichne c in seiner neuen Position mit n. Sei s der Bruderknoten (mit Kindern sl und sr ) von n. Mit p sei der Vaterknoten von n bezeichnet. Warum gibt es sl und sr ? Wir haben angenommen, dass m und c beide schwarz sind. Der Teilbaum von p, der n enthält, hat mindestens zwei schwarze Knoten, nämlich n und einen Blattknoten. Also muss der Teilbaum von p, der s enthält, auch mindestens zwei schwarze Knoten haben. Dies kann aber nicht der Fall sein, wenn s ein Blattknoten ist. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 19 / 32 Balancierte Binärbäume Fall 1 n ist die neue Wurzel. Hier ist nichts zu tun, denn wir haben einen schwarzen Knoten von jedem Pfad entfernt und die neue Wurzel ist schwarz. Also gelten alle Eigenschaften weiterhin. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 20 / 32 Balancierte Binärbäume Fall 2 s ist rot und das linke Kind von p (sonst alle Bezeichnungen umdrehen). Tausche Färbung von p und s. Führe Linksrotation an p durch. Fahre mit Fall 3 fort für n. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 21 / 32 Balancierte Binärbäume Fall 3 p, s und die Kinderknoten von s sind schwarz. Färbe s rot. Alle Pfade, die durch s gehen, durchlaufen nun einen Knoten weniger. Aber alle Pfade, die durch n gehen, durchlaufen auch einen Knoten weniger, denn wir haben den Vaterknoten von n gelöscht. Durch das Löschen des Vaterknotens von n haben wir allerdings Eigenschaft 5 verletzt: Pfade, die durch p gehen, haben einen schwarzen Knoten weniger als Pfade, die nicht durch p gehen. Fahre daher mit Fall 1 fort für p. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 22 / 32 Balancierte Binärbäume Fall 4 s und seine Kinderknoten sind schwarz, aber p ist rot. Tausche die Farben von s und p. Dies ändert nichts an der Anzahl der schwarzen Knoten für Pfade, die durch s laufen (denn solche Pfade laufen auch durch p). Stattdessen durchlaufen Pfade, die durch n gehen, einen zusätzlichen schwarzen Knoten (nämlich p), sodass der gelöschte schwarze Knoten (der ursprüngliche Vaterknoten von n) ausgeglichen wird. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 23 / 32 Balancierte Binärbäume Fall 5 s ist schwarz, sl ist rot, sr ist schwarz und n ist das linke Kind seines Vaterknotens (falls n das rechte Kind ist, alle Richtungen umdrehen). Führe Rechtsrotation an s durch. Tausche dann die Farben von s und seinem neuen Vaterknoten. Dies ändert nichts an der Anzahl der scharzen Knoten. Fahre dann mit Fall 6 für n fort. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 24 / 32 Balancierte Binärbäume Fall 6 s ist schwarz, sr ist rot und n ist das linke Kind seines Vaterknotens (falls n das rechte Kind ist, alle Richtungen umdrehen). Führe Linksrotation an p durch. Tausche Farben von p und s. Färbe sr schwarz. Pfade durch n enthalten einen zusätzlichen schwarzen Knoten (entweder p oder s), der den fehlenden Knoten ausgleicht. Pfade, die nicht durch n gehen, ändern sich nicht. Quelle: Wikipedia B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 25 / 32 Balancierte Binärbäume Komplexität Lemma Sei m ein Knoten des Rot-Schwarz-Baumes. Sei bh die Anzahl der schwarzen Knoten ausgehend von m zu einem Blattknoten (ohne m zu zählen). Dann hat der Teilbaum, der bei m beginnt, mindestens 2bh − 1 interne Knoten. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 26 / 32 Balancierte Binärbäume Beweis Induktion über die Höhe von m. Für h = 0 ist m schwarz und ein Blattknoten. Es gibt also 20 − 1 = 0 interne Knoten. Für h = 1 ist entweder m schwarz und hat zwei schwarze Blattknoten oder m ist rot und hat somit wegen Eigenschaft 4 zwei schwarze Kinder. Es gibt also 21 − 1 = 1 interne Knoten. Angenommen, die Formel gelte für eine Höhe von h. Wir nehmen nun einen Knoten m mit Höhe h + 1 an und zeigen, dass die Formel gilt. m ist oBdA ein innerer Knoten. Er halt also zwei Kinderknoten mit entweder bh = bh (m) oder bh = bh (m) − 1. Nach der Induktionsannahme hat jedes Kind mindestens 2bh (m)−1 − 1 innere Knoten, also hat m mindestens 2bh (m)−1 − 1 + 2bh (m)−1 − 1 + 1 = 2bh (m) − 1 innere Knoten. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 27 / 32 Balancierte Binärbäume Theorem Ein Rot-Schwarz-Baum mit n internen Knoten hat eine Höhe h von höchstens 2 log(n + 1). Beweis Nach Eigenschaft 4 sind mindestens die Hälfte aller Knoten von der Wurzel zu einem Blatt schwarz. Es gilt also bh ≥ h2 . Unter Benutzung des Lemma erhalten wir: n ≥ 2h/2 − 1 h 2 ⇔ h ≤ 2 log(n + 1) ⇔ log(n + 1) ≥ Also ist h = O(log n). B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 28 / 32 Aufgaben Aufgaben zur konvexen Hülle Aufgabe 1.1 Zeigen Sie durch Angabe eines Gegenbeispiels, dass die Vereinigung von zwei konvexen Mengen im Allgemeinen nicht konvex ist. Zeigen Sie, dass der Schnitt von zwei konvexen Mengen wieder konvex ist. Aufgabe 1.2 Sei P ⊆ R2 eine Menge von Punkten. Zeigen Sie durch einen Widerspruchsbeweis, dass das Polygon P mit dem kleinsten Umfang, das P vollständig enthält, konvex ist. Eine Skizze zum Beweis ist ausreichend. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 29 / 32 Aufgaben Es sei eine gerichtete Strecke von p = (px , py ) nach q = (qx , qy ) gegeben. Weiterhin sei r = (rx , ry ) ein beliebiger Punkt. Aufgabe 2.1 Zeigen Sie, dass das Vorzeichen der Determinante 1 px py D = det 1 qx qy 1 rx ry angibt, auf welcher Seite der Strecke r liegt. Aufgabe 2.2 Zeigen Sie, dass |D| genau das Doppelte der Fläche des von p, q, r aufgespannten Dreiecks ist. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 30 / 32 Aufgaben Aufgabe 2.3 Begründen Sie, warum der in 2.1 vorgestellte Weg zur Entscheidung, auf welcher Seite r liegt, sich besonders gut implementieren lässt. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 31 / 32 Aufgaben Erweiterung des implementierten Rot-Schwarz-Baumes Aufgabe 3 Verwenden Sie den vorgestellten Rot-Schwarz-Baum in einem eigenen Projekt mit dem Datentyp double. Erzeugen Sie 10 Zufallszahlen und fügen Sie diese in den Baum ein. Passen Sie für den Streamingoperator die Anzahl der Nachkommastellen (5) sowie das Format (wissenschaftliche Notation) an. Verwenden Sie hierzu Templatespezialisierung von operator<<. B. Rieck (CoVis) Algorithmische Geometrie 8. Mai 2012 32 / 32