Übungsfolien 7 / Programmier-Wettbewerb (Stand: 12.6.2013)

Werbung
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
Herunterladen