Timo Bingmann, Dennis Luxen INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS Timo Bingmann, Dennis Luxen KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik
Balancierte binäre Suchbäume: Red-Black-Trees Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 4 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 4 5 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 Höhe: h O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? 4 5 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 4 Höhe: h O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? Idee : Alle möglichen Pfade etwa gleich lang. 5 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 4 Höhe: h O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? Idee : Alle möglichen Pfade etwa gleich lang. 5 Idee : An jedem Knoten Entscheidung möglich, also idealerweise nutzen. 3 Timo Bingmann, Dennis Luxen
Warum balancierte Bäume? 3 4 Höhe: h O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? Idee : Alle möglichen Pfade etwa gleich lang. 5 Idee : An jedem Knoten Entscheidung möglich, also idealerweise nutzen. Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe 3 Timo Bingmann, Dennis Luxen
Rot-Schwarz-Bäume Eigenschaften eines Rot-Schwarz-Baums: Jeder Knoten ist entweder rot oder schwarz. Die Wurzel ist schwarz. 3 Jedes Blatt (NIL) ist schwarz. 4 Ist ein Knoten rot, so sind beide Kinder schwarz. 5 Für jeden Knoten v gilt, alle Pfade von v zu einem Blatt enthalten dieselbe Zahl schwarzer Knoten, sog. Schwarzhöhe bh(v). 4 Timo Bingmann, Dennis Luxen
Rot-Schwarz-Bäume Eigenschaften eines Rot-Schwarz-Baums: Jeder Knoten ist entweder rot oder schwarz. Die Wurzel ist schwarz. 3 Jedes Blatt (NIL) ist schwarz. 4 Ist ein Knoten rot, so sind beide Kinder schwarz. 5 Für jeden Knoten v gilt, alle Pfade von v zu einem Blatt enthalten dieselbe Zahl schwarzer Knoten, sog. Schwarzhöhe bh(v). 4 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. Beweis(-skizze) per Induktion. bh(x) := 0 0 = 0. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. Beweis(-skizze) per Induktion. bh(x) := 0 0 = 0. Annahme: Aussage gilt für x, x, und x, x Kinder von x mit h(x) > 0. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. Beweis(-skizze) per Induktion. bh(x) := 0 0 = 0. Annahme: Aussage gilt für x, x, und x, x Kinder von x mit h(x) > 0. Wir bemerken: bh(x ) bh(x), und bh(x ) bh(x) bh(x ) bh(x), und bh(x ) bh(x) x x x 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. Beweis(-skizze) per Induktion. bh(x) := 0 0 = 0. Annahme: Aussage gilt für x, x, und x, x Kinder von x mit h(x) > 0. Wir bemerken: bh(x ) bh(x), und bh(x ) bh(x) bh(x ) bh(x), und bh(x ) bh(x) x x x Nach Annahme haben x, x wenigstens bh(x) innere Knoten. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - I Behauptung: h log(n + ) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens bh(x) innere Knoten. Beweis(-skizze) per Induktion. bh(x) := 0 0 = 0. Annahme: Aussage gilt für x, x, und x, x Kinder von x mit h(x) > 0. Wir bemerken: bh(x ) bh(x), und bh(x ) bh(x) bh(x ) bh(x), und bh(x ) bh(x) x x x Nach Annahme haben x, x wenigstens bh(x) innere Knoten. Baum unterhalb von x hat also bh(x) innere Knoten. 5 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - II Behauptung: h log(n + ) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. 6 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - II Behauptung: h log(n + ) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n h/ 6 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - II Behauptung: h log(n + ) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n h/ h log(n + ) h O(log n). 6 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - II Behauptung: h log(n + ) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n h/ h log(n + ) h O(log n). Höhe eines Rot-Schwarz-Baums ist logarithmisch in der Knotenzahl. 6 Timo Bingmann, Dennis Luxen
Höhe von Rot-Schwarz-Bäumen - II Behauptung: h log(n + ) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n h/ h log(n + ) h O(log n). Höhe eines Rot-Schwarz-Baums ist logarithmisch in der Knotenzahl. Suchen offensichtlich in O(log n). Einfügen, Löschen auch in O(log n), wenn Aufwand nur von der Höhe des Baums abhängt. 6 Timo Bingmann, Dennis Luxen
Insert und Delete sind problematisch Einfügen Insert wie in normalen binären Suchbaum Einfügen kann RB-Eigenschaften verletzen. Vorgehen: Roten Knoten in binären Suchbaum einfügen und danach Eigenschaften reparieren 7 Timo Bingmann, Dennis Luxen
Insert und Delete sind problematisch Einfügen Insert wie in normalen binären Suchbaum Einfügen kann RB-Eigenschaften verletzen. Vorgehen: Roten Knoten in binären Suchbaum einfügen und danach Eigenschaften reparieren Reparatur durch zwei grundlegende Operationen: Umfärbung von Knoten Rotation von Teilbäumen 7 Timo Bingmann, Dennis Luxen
Was ist eine Rotation? Lokale Operation, die binäre Suchbaumeigenschaft erhält. Umhängen einer konstanten Zahl an Pointern pro Teilbaum 8 Timo Bingmann, Dennis Luxen
Was ist eine Rotation? Lokale Operation, die binäre Suchbaumeigenschaft erhält. Umhängen einer konstanten Zahl an Pointern pro Teilbaum x y Linksrotation Rechtsrotation x y 8 Timo Bingmann, Dennis Luxen
Pseudo-Code: Links-Rotation leftrotate(t,x) : y right[x] : right[x] left[y] 3: p[left[y]] x 4: p[y] p[x] 5: if p[x] = nil[t ] then 6: root[t ] y 7: else 8: if x = left[p[x]] then 9: left[p[x]] y 0: else : right[p[x]] y : end if 3: end if 4: left[y] x 5: p[x] y x y Linksrotation x y 9 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall : Situation: Baum ist leer Erzeugen neuer Wurzel RB-Eigenschaft verletzt N 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall : Situation: Baum ist leer Erzeugen neuer Wurzel RB-Eigenschaft verletzt Lösung: Umfärben der Wurzel N N 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall : Situation: Vaterknoten schwarz Pfade haben gleiche black height Alle RB-Eigenschaften OK N P 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 3: Situation: Vater und Onkel rot P G U N 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 3: Situation: Vater und Onkel rot Lösung: Onkel und Vater schwärzen Großvater rot färben 3 Rekursiv nach oben fortsetzen 4 Großvater ist Wurzel? Dann wieder schwärzen N P G U N P G U 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 4: Situation: Keinen oder schwarzen Onkel Neuer Knoten rechts an rotem Vater 3 Vater links an Großvater P G N U 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 4: Situation: Keinen oder schwarzen Onkel Neuer Knoten rechts an rotem Vater 3 Vater links an Großvater G G Lösung: Linksrotation um Vater Problem: zwei rote Knoten auf Pfad benachbart 3 Lösung per Fall 5! P N U P N U 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 5: Situation: Keinen oder schwarzen Onkel Neuer Knoten links an rotem Vater 3 Vater links an Großvater P G U N 0 Timo Bingmann, Dennis Luxen
Inserts in Rot-Schwarz-Bäumen Fall 5: Situation: Keinen oder schwarzen Onkel Neuer Knoten links an rotem Vater 3 Vater links an Großvater Lösung: Rechtsrotation um Großvater Andere Richtungen Analog Löschen nur etwas komplizierter N P G U N P G U 0 Timo Bingmann, Dennis Luxen
Aufwandsabschätzung Speicher: Bit pro Knoten für Farbe Zeit: Konstanter Aufwand pro Knoten Färben/Rotieren Maximal O(log n) Rekursionstiefe Timo Bingmann, Dennis Luxen
Aufwandsabschätzung Speicher: Bit pro Knoten für Farbe Zeit: Konstanter Aufwand pro Knoten Färben/Rotieren Maximal O(log n) Rekursionstiefe Ziel erreicht: O(n) Platz und Operationen alle in O(log n). Timo Bingmann, Dennis Luxen
Die Zahl binärer Suchbäume Timo Bingmann, Dennis Luxen
Alle binäre Suchbäume mit n =,, 3: n = : n = : n = 3: 3 3 3 3 3 3 Timo Bingmann, Dennis Luxen
Alle binäre Suchbäume mit n = 4: 4 Timo Bingmann, Dennis Luxen 3 4 4 3 3 4 4 3 4 3 3 4 4 3 3 4 3 4 4 3 4 3 4 3 4 3 4 3
Die Anzahl binärer Suchbäume C n x < x > x Bekannte Startwerte: C 0 = 0, C =, C =, C 3 = 5, C 4 = 4. 5 Timo Bingmann, Dennis Luxen
Die Anzahl binärer Suchbäume C n x < x > x Bekannte Startwerte: C 0 = 0, C =, C =, C 3 = 5, C 4 = 4. Durch Partitionieren der sortieren Folge: C n = C 0 C n + C C n + + C n C + C n C 0, n > 0. 5 Timo Bingmann, Dennis Luxen
Die Anzahl binärer Suchbäume C n x < x > x Bekannte Startwerte: C 0 = 0, C =, C =, C 3 = 5, C 4 = 4. Durch Partitionieren der sortieren Folge: C n = C 0 C n + C C n + + C n C + C n C 0, n > 0. Wende erzeugende Funktionen an: C(z) = C z z n = C(z) zc(z) +. n=0 5 Timo Bingmann, Dennis Luxen
Die Anzahl binärer Suchbäume C n x < x > x Bekannte Startwerte: C 0 = 0, C =, C =, C 3 = 5, C 4 = 4. Durch Partitionieren der sortieren Folge: C n = C 0 C n + C C n + + C n C + C n C 0, n > 0. Wende erzeugende Funktionen an: C(z) = n=0 C n heißen die Catalan-Zahlen. C z z n = C(z) zc(z) +. = C n = ( ) n. wie in. Übung n + n 5 Timo Bingmann, Dennis Luxen
Notizen zu (a, b)-bäumen B-Bäume sind fast ( m, m)-bäume mit m = B ein Festplatten-Block. 6 Timo Bingmann, Dennis Luxen
Insert-Geschwindigkeit (Integer, C++) Microsekunden pro Insert.5 0.5 Red-Black Tree verkettete Hashtabelle (, 4)-Baum (6, 3)-Baum (3, 64)-Baum (64, 8)-Baum 0 6 8 0 4 6 8 0 4 6 Anzahl von Elementen 7 Timo Bingmann, Dennis Luxen
Locate-Geschwindigkeit (Integer, C++) Microsekunden pro Locate.5 0.5 0 Red-Black Tree verkettete Hashtabelle (, 4)-Baum (6, 3)-Baum (3, 64)-Baum (64, 8)-Baum 6 8 0 4 6 8 0 4 6 Anzahl von Elementen 8 Timo Bingmann, Dennis Luxen
Speicherverbrauch (Integer, C++) Memory Usage [MiB] 350 300 50 00 50 00 Memory Usage Profile - Insertion of 89000 Integer Pairs std::multimap gnu_cxx::hash_multimap std::tr::unordered_multimap stx::btree_multimap std::vector std::deque 50 0 0 4 6 8 0 Program Execution Time [s] 9 Timo Bingmann, Dennis Luxen
Programmier-Wettbewerb: Assemblierung von DNA-Fragmenten 0 Timo Bingmann, Dennis Luxen
Human Genome Project Photo: Steve Jurvetson (CC-BY via flickr) Timo Bingmann, Dennis Luxen
Genom des Menschen: 3,3 G Basen CGCAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGC ACCGGGTATCATTCACCATTTTTCTTTTCGTTAACTTGCCGTCAGCCTTTTCTTTGACC TCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCC ACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTG ACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTC CTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGT TGTCTGCATGTAACTTAATACCACAACCAGGCATAGGGGAAAGATTGGAGGAAAGATGA GTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCC TTGGCTGTGATACGTGGCCGGCCCTCGCTCCAGCAGCTGGACCCCTACCTGCCGTCTGC TGCCATCGGAGCCCAAAGCCGGGCTGTGACTGCTCAGACCAGCCGGCTGGAGGGAGGGG CTCAGCAGGTCTGGCTTTGGCCCTGGGAGAGCAGGTGGAAGATCAGGCAGGCCATCGCT GCCACAGAACCCAGTGGATTGGCCTAGGTGGGATCTCTGAGCTCAACAAGCCCTCTCTG Daten: Projekt Gutenberg, http://www.gutenberg.org/ebooks/775 oder UCSC Genome Browser, http://genome.ucsc.edu Timo Bingmann, Dennis Luxen
Programmier-Wettbewerb DNA-Assemblierung Gegeben: Referenzgenom und Patientengenom. Patientengenom nur als kurze Reads gegeben. Aufgabe: Assembliere das Patientengenome anhand der Referenz. Unser Wettbewerb: Vereinfachte Instanz: erste 50 Mi Basenpaare des ersten Chromosom des Menschen. Preise: Amazon Gutscheine (für Algorithmen-Bücher): 64 Euro, 3 Euro und 6 Euro für die schnellsten drei Assemblierer. Programmiersprache: egal, aber: Test-Platform ist Ubuntu Linux! Erhöhung der Größe wird vorbehalten. 3 Timo Bingmann, Dennis Luxen
Programmier-Wettbewerb DNA-Assemblierung Spezifikation der Eingabe: im aktuellen Verzeichnis liegen chr.txt 50 MiB des erste Chromosom des Referenz-Menschen. Datei enthält Zeichen {A, G, C, T, N}. Groß/klein und N ignorieren. reads.txt Reads von einem Patienten. Pro Zeile ein Read. Reads haben verschiedene Längen. Spezifikation der Ausgabe: Schreibe Datei patient.txt mit Chromosom DNA. Auf der Vorlesungs-Website liegen: Ein Beispieldatensatz mit Lösung und ein kleinerer Test-Datensatz. Der Wettbewerb läuft auf einem anderen Datensatz. 4 Timo Bingmann, Dennis Luxen
Wettbewerb: DNA-Assemblierung Bewertung des Wettbewerbs: Erstes Kriterium: Abweichung von der korrekten Patienten-DNA. Bei Abweichung 00 Basen: Rechenzeit entscheidet 64 Euro für beste/schnellste Lösung, 3 Euro und 6 Euro für zweiten und dritten Rang. Zeitmessung auf unseren Rechnern: Intel Xeon X5355.66 GHz (8 cores), 4 GiB RAM Linux Ubuntu.04 LTS Server Abgabe als buildable Sourcecode, Java jar oder ähnliches. Maximale Laufzeit: drei Stunden. Schlusstermin: Mittwoch 0.7.03. 5 Timo Bingmann, Dennis Luxen
Wettbewerb: DNA-Assemblierung Weitere bekannte Daten: Länge von Reads ungefähr 300 Basenpaare. Abweichung des Patienten vom Referenz-Genom circa 0, %. Reads sind fehlerbehaftet! Fehlerrate circa %. Reads enthalten 0 Kopien der Patienten-DNA. 6 Timo Bingmann, Dennis Luxen
Hashing von Zeichenketten Nicht: kryptographische Message Digests (MD5, SHA, etc)! 7 Timo Bingmann, Dennis Luxen
Hashing von Zeichenketten Gegeben Zeichenkette s = x 0, x,..., x n. Ganz schlechte Hashfunktion: n h(s) = i=0 x i mod k 8 Timo Bingmann, Dennis Luxen
Hashing von Zeichenketten Gegeben Zeichenkette s = x 0, x,..., x n. Ganz schlechte Hashfunktion: n h(s) = i=0 x i mod k Etwas weniger schlechte Hashfunktion: h(s) = x 0 + 3 x + 5 x + 7 x 3 + mod k 8 Timo Bingmann, Dennis Luxen
Hashing von Zeichenketten Hashfunktion aus frühen BerkeleyDB/SDBM: Als Bitoperationen: uint3 hash(string str) { uint3 h = 0; for (int i = 0; i < str.size(); ++i) h = h * 65599 + str[i]; return h; } h = (h << 6) + (h << 6) - h + str[i]; 9 Timo Bingmann, Dennis Luxen
Moderne Hashfunktionen Fowler Noll Vo Hashfunktion (DNS-Server, Databases) unsigned int hash(string str) { unsigned int h = offset; for (int i = 0; i < str.size(); ++i) { h = h * prime; h = h XOR str[i]; } return h; } Für 3-bit: offset = 66366, prime = 677769. Für 64-bit: offset = 469598039346656037, prime = 099568. Noch aktueller: MurmerHash (Perl, Hadoop, etc) 30 Timo Bingmann, Dennis Luxen