7. Übung – Algorithmen I Timo Bingmann, Dennis Luxen I NSTITUT FÜR T HEORETISCHE I NFORMATIK , P ROF. S ANDERS Bingmann, Luxenund 1 KITTimo – Universität des Landes Dennis Baden-Württemberg nationales Forschungszentrum in der Helmholtz-Gemeinschaft 7. Übung – Algorithmen I Fakultät für Informatik www.kit.edu Institut für Theoretische Informatik Balancierte binäre Suchbäume: Red-Black-Trees 2 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 2 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 2 3 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 2 3 4 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 2 3 4 5 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 Höhe: h ∈ O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? 2 3 4 5 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 Höhe: h ∈ O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? 2 3 Idee 1: Alle möglichen Pfade etwa gleich lang. 4 5 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 Höhe: h ∈ O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? 2 3 Idee 1: Alle möglichen Pfade etwa gleich lang. 4 5 3 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Idee 2: An jedem Knoten Entscheidung möglich, also idealerweise nutzen. Fakultät für Informatik Institut für Theoretische Informatik Warum balancierte Bäume? 1 Höhe: h ∈ O(n) Suchen: WC O(n) Löschen: WC O(n) Einfügen: WC O(n) Geht das besser? 2 3 Idee 1: Alle möglichen Pfade etwa gleich lang. 4 5 Idee 2: 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Rot-Schwarz-Bäume Eigenschaften eines Rot-Schwarz-Baums: 1 Jeder Knoten ist entweder rot oder schwarz. 2 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Rot-Schwarz-Bäume Eigenschaften eines Rot-Schwarz-Baums: 1 Jeder Knoten ist entweder rot oder schwarz. 2 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. √ Beweis(-skizze) per Induktion. bh(x ) := 0 → 20 − 1 = 0. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. √ Beweis(-skizze) per Induktion. bh(x ) := 0 → 20 − 1 = 0. Annahme: Aussage gilt für x1 , x2 , und x1 , x2 Kinder von x mit h(x ) > 0. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. √ Beweis(-skizze) per Induktion. bh(x ) := 0 → 20 − 1 = 0. Annahme: Aussage gilt für x1 , x2 , und x1 , x2 Kinder von x mit h(x ) > 0. Wir bemerken: x x1 x2 bh(x1 ) ≤ bh(x ) , und bh(x1 ) ≥ bh(x ) − 1 bh(x2 ) ≤ bh(x ) , und bh(x2 ) ≥ bh(x ) − 1 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. √ Beweis(-skizze) per Induktion. bh(x ) := 0 → 20 − 1 = 0. Annahme: Aussage gilt für x1 , x2 , und x1 , x2 Kinder von x mit h(x ) > 0. Wir bemerken: x x1 x2 bh(x1 ) ≤ bh(x ) , und bh(x1 ) ≥ bh(x ) − 1 bh(x2 ) ≤ bh(x ) , und bh(x2 ) ≥ bh(x ) − 1 Nach Annahme haben x1 , x2 wenigstens 2bh(x )−1 − 1 innere Knoten. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - I Behauptung: h ≤ 2 log(n + 1) Betrachte Knoten x und den darunter liegenden Teilbaum. Hilfssatz: Teilbaum unter x hat wenigstens 2bh(x ) − 1 innere Knoten. √ Beweis(-skizze) per Induktion. bh(x ) := 0 → 20 − 1 = 0. Annahme: Aussage gilt für x1 , x2 , und x1 , x2 Kinder von x mit h(x ) > 0. Wir bemerken: x x1 x2 bh(x1 ) ≤ bh(x ) , und bh(x1 ) ≥ bh(x ) − 1 bh(x2 ) ≤ bh(x ) , und bh(x2 ) ≥ bh(x ) − 1 Nach Annahme haben x1 , x2 wenigstens 2bh(x )−1 − 1 innere Knoten. Baum unterhalb von x hat also 2bh(x ) − 1 innere Knoten. 5 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - II Behauptung: h ≤ 2 log(n + 1) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. 6 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - II Behauptung: h ≤ 2 log(n + 1) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n ≥ 2h/2 − 1 6 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - II Behauptung: h ≤ 2 log(n + 1) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n ≥ 2h/2 − 1 ⇔ h ≤ 2 log(n + 1) ⇒ h ∈ O(log n). 6 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - II Behauptung: h ≤ 2 log(n + 1) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n ≥ 2h/2 − 1 ⇔ h ≤ 2 log(n + 1) ⇒ h ∈ O(log n). Höhe eines Rot-Schwarz-Baums ist logarithmisch in der Knotenzahl. 6 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Höhe von Rot-Schwarz-Bäumen - II Behauptung: h ≤ 2 log(n + 1) - Fortsetzung Nach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzel mindestens die Hälfte der Knoten schwarz. Einsetzen in vorheriges Ergebnis: n ≥ 2h/2 − 1 ⇔ h ≤ 2 log(n + 1) ⇒ 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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: 1 2 Umfärbung von Knoten Rotation von Teilbäumen 7 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Was ist eine Rotation? Lokale Operation, die binäre Suchbaumeigenschaft erhält. “Umhängen” einer konstanten Zahl an Pointern pro Teilbaum x y Linksrotation y 8 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Rechtsrotation x Fakultät für Informatik Institut für Theoretische Informatik Pseudo-Code: Links-Rotation leftrotate(T,x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: y ← right [x ] right [x ] ← left [y ] p[left [y ]] ← x p[y ] ← p[x ] if p[x ] = nil [T ] then root [T ] ← y else if x = left [p[x ]] then left [p[x ]] ← y else right [p[x ]] ← y end if end if left [y ] ← x p[x ] ← y 9 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I x y Linksrotation y x Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 1: Situation: Baum ist leer Erzeugen neuer Wurzel RB-Eigenschaft 2 verletzt 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I N Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 1: Situation: Baum ist leer Erzeugen neuer Wurzel RB-Eigenschaft 2 verletzt Lösung: Umfärben der Wurzel 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I N N Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 2: Situation: Vaterknoten schwarz Pfade haben gleiche black height Alle RB-Eigenschaften OK 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I P N Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 3: Situation: Vater und Onkel rot G P U N 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 3: Situation: Vater und Onkel rot Lösung: 1 2 3 4 Onkel und Vater schwärzen Großvater rot färben Rekursiv nach oben fortsetzen Großvater ist Wurzel? Dann wieder schwärzen 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I G P N G U P U N Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 4: Situation: 1 2 3 Keinen oder schwarzen Onkel Neuer Knoten rechts an rotem Vater Vater links an Großvater G P U N 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 4: Situation: 1 2 3 Keinen oder schwarzen Onkel Neuer Knoten rechts an rotem Vater Vater links an Großvater Lösung: 1 2 3 Linksrotation um Vater Problem: zwei rote Knoten auf Pfad benachbart Lösung per Fall 5! 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I G P G U N N U P Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 5: Situation: 1 2 3 Keinen oder schwarzen Onkel Neuer Knoten links an rotem Vater Vater links an Großvater G P U N 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Inserts in Rot-Schwarz-Bäumen Fall 5: Situation: 1 2 3 Keinen oder schwarzen Onkel Neuer Knoten links an rotem Vater Vater links an Großvater G P Lösung: 1 Rechtsrotation um Großvater Andere Richtungen Analog Löschen nur etwas komplizierter 10 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I N P U N G U Fakultät für Informatik Institut für Theoretische Informatik Aufwandsabschätzung Speicher: 1 Bit pro Knoten für Farbe Zeit: Konstanter Aufwand pro Knoten Färben/Rotieren Maximal O(log n) Rekursionstiefe 11 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Aufwandsabschätzung Speicher: 1 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). 11 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Die Zahl binärer Suchbäume 12 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Alle binäre Suchbäume mit n = 1, 2, 3: n = 1: n = 2: 1 1 2 2 1 n = 3: 1 1 3 2 3 2 13 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I 3 2 1 3 3 1 2 2 1 Fakultät für Informatik Institut für Theoretische Informatik Alle binäre Suchbäume mit n = 4: 1 1 2 1 2 3 2 3 4 2 4 4 1 3 4 2 14 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I 2 1 1 4 3 2 4 4 3 3 3 4 4 1 2 2 3 2 4 1 3 2 3 1 4 4 3 2 3 1 4 3 4 1 1 3 1 2 2 1 Fakultät für Informatik Institut für Theoretische Informatik Die Anzahl binärer Suchbäume Cn x <x >x Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14. 15 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Die Anzahl binärer Suchbäume Cn x <x >x Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14. Durch Partitionieren der sortieren Folge: Cn = C0 Cn−1 + C1 Cn−2 + · · · + Cn−2 C1 + Cn−1 C0 , 15 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I n > 0. Fakultät für Informatik Institut für Theoretische Informatik Die Anzahl binärer Suchbäume Cn x <x >x Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14. Durch Partitionieren der sortieren Folge: Cn = C0 Cn−1 + C1 Cn−2 + · · · + Cn−2 C1 + Cn−1 C0 , n > 0. Wende erzeugende Funktionen an: C (z ) = ∞ X Cz z n = C (z ) · zC (z ) + 1 . n =0 15 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Die Anzahl binärer Suchbäume Cn x <x >x Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14. Durch Partitionieren der sortieren Folge: Cn = C0 Cn−1 + C1 Cn−2 + · · · + Cn−2 C1 + Cn−1 C0 , Cn heißen die Catalan-Zahlen. Wende erzeugende Funktionen an: C (z ) = ∞ X Cz z n = C (z ) · zC (z ) + 1 . n =0 15 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I n > 0. =⇒ Cn = wie in 2. Übung 1 2n . n+1 n Fakultät für Informatik Institut für Theoretische Informatik Notizen zu (a, b)-Bäumen B-Bäume sind fast ( m2 , m)-Bäume mit m = B ein Festplatten-Block. 16 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Microsekunden pro Insert Insert-Geschwindigkeit (Integer, C++) Red-Black Tree verkettete Hashtabelle (2, 4)-Baum (16, 32)-Baum (32, 64)-Baum (64, 128)-Baum 1.5 1 0.5 0 26 28 210 17 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I 212 214 216 218 220 Anzahl von Elementen 222 224 226 Fakultät für Informatik Institut für Theoretische Informatik Locate-Geschwindigkeit (Integer, C++) Microsekunden pro Locate 1.5 Red-Black Tree verkettete Hashtabelle (2, 4)-Baum (16, 32)-Baum (32, 64)-Baum (64, 128)-Baum 1 0.5 0 26 28 210 18 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I 212 214 216 218 220 Anzahl von Elementen 222 224 226 Fakultät für Informatik Institut für Theoretische Informatik Speicherverbrauch (Integer, C++) Memory Usage Profile - Insertion of 8192000 Integer Pairs 350 std::multimap __gnu_cxx::hash_multimap std::tr1::unordered_multimap stx::btree_multimap std::vector std::deque Memory Usage [MiB] 300 250 200 150 100 50 0 0 2 4 6 8 10 12 Program Execution Time [s] 19 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Programmier-Wettbewerb: Assemblierung von DNA-Fragmenten 20 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Human Genome Project Photo: Steve Jurvetson (CC-BY via flickr) 21 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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/11775 oder UCSC Genome Browser, http://genome.ucsc.edu 22 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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 Mi1 Basenpaare des ersten Chromosom des Menschen. Preise: Amazon Gutscheine (für Algorithmen-Bücher): 64 Euro, 32 Euro und 16 Euro für die schnellsten drei Assemblierer. Programmiersprache: egal, aber: Test-Platform ist Ubuntu Linux! 1 Erhöhung der Größe wird vorbehalten. 23 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Programmier-Wettbewerb DNA-Assemblierung Spezifikation der Eingabe: im aktuellen Verzeichnis liegen chr1.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. 24 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Wettbewerb: DNA-Assemblierung Bewertung des Wettbewerbs: Erstes Kriterium: Abweichung von der korrekten Patienten-DNA. Bei Abweichung ≤ 100 Basen: Rechenzeit entscheidet 64 Euro für beste/schnellste Lösung, 32 Euro und 16 Euro für zweiten und dritten Rang. Zeitmessung auf unseren Rechnern: Intel Xeon X5355 2.66 GHz (8 cores), 24 GiB RAM Linux Ubuntu 12.04 LTS Server Abgabe als buildable Sourcecode, Java jar oder ähnliches. Maximale Laufzeit: drei Stunden. Schlusstermin: Mittwoch 10.7.2013. 25 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Wettbewerb: DNA-Assemblierung Weitere bekannte Daten: Länge von Reads ungefähr 300 Basenpaare. Abweichung des Patienten vom Referenz-Genom circa 0,1 %. Reads sind fehlerbehaftet! Fehlerrate circa 2 %. Reads enthalten 10 Kopien der Patienten-DNA. 26 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Hashing von Zeichenketten Nicht: kryptographische Message Digests (MD5, SHA, etc)! 27 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Hashing von Zeichenketten Gegeben Zeichenkette s = hx0 , x1 , . . . , xn−1 i. Ganz schlechte Hashfunktion: h(s) = n −1 X xi mod 2k i =0 28 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Hashing von Zeichenketten Gegeben Zeichenkette s = hx0 , x1 , . . . , xn−1 i. Ganz schlechte Hashfunktion: h(s) = n −1 X xi mod 2k i =0 Etwas weniger schlechte Hashfunktion: h(s) = 1 · x0 + 3 · x1 + 5 · x2 + 7 · x3 + · · · 28 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I mod 2k Fakultät für Informatik Institut für Theoretische Informatik Hashing von Zeichenketten Hashfunktion aus frühen BerkeleyDB/SDBM: uint32 hash(String str) { uint32 h = 0; for (int i = 0; i < str.size(); ++i) h = h * 65599 + str[i]; return h; } Als Bitoperationen: h = (h << 6) + (h << 16) - h + str[i]; 29 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik 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 32-bit: offset = 2166136261, prime = 16777619. Für 64-bit: offset = 14695981039346656037, prime = 1099511628211. Noch aktueller: MurmerHash (Perl, Hadoop, etc) 30 Timo Bingmann, Dennis Luxen 7. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik