View
2
Download
0
Category
Preview:
Citation preview
1 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS
7. Übung – Algorithmen ITimo Bingmann, Dennis Luxen
KIT – Universität des Landes Baden-Württemberg undnationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
2 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Balancierte binäre Suchbäume:Red-Black-Trees
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
3
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
5
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
5
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
5
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
5
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Warum balancierte Bäume?
3 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
5
3
4
Höhe: h ∈ O(n)Suchen: WC O(n)Löschen: WC O(n)Einfügen: WC O(n)Geht das besser?
Alle möglichen Pfade etwa gleich lang.Idee 1:
An jedem Knoten Entscheidung möglich,also idealerweise nutzen.
Idee 2:
Rot-Schwarz-Bäume mit O(n) Platz und O(log n) Höhe
Rot-Schwarz-Bäume
4 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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).
Rot-Schwarz-Bäume
4 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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).
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.
Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.
Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - I
5 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 mith(x) > 0.Wir bemerken:
bh(x1) ≤ bh(x) , und bh(x1) ≥ bh(x)− 1bh(x2) ≤ bh(x) , und bh(x2) ≥ bh(x)− 1
x1 x2
x
Nach Annahme haben x1, x2 wenigstens 2bh(x)−1 − 1 innere Knoten.Baum unterhalb von x hat also 2bh(x) − 1 innere Knoten.
Höhe von Rot-Schwarz-Bäumen - II
6 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Behauptung: h ≤ 2 log(n + 1) - FortsetzungNach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzelmindestens 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 derHöhe des Baums abhängt.
Höhe von Rot-Schwarz-Bäumen - II
6 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Behauptung: h ≤ 2 log(n + 1) - FortsetzungNach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzelmindestens 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 derHöhe des Baums abhängt.
Höhe von Rot-Schwarz-Bäumen - II
6 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Behauptung: h ≤ 2 log(n + 1) - FortsetzungNach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzelmindestens 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 derHöhe des Baums abhängt.
Höhe von Rot-Schwarz-Bäumen - II
6 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Behauptung: h ≤ 2 log(n + 1) - FortsetzungNach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzelmindestens 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 derHöhe des Baums abhängt.
Höhe von Rot-Schwarz-Bäumen - II
6 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Behauptung: h ≤ 2 log(n + 1) - FortsetzungNach Eigenschaft 4 sind auf allen Pfaden unterhalb der Wurzelmindestens 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 derHöhe des Baums abhängt.
Insert und Delete sind problematisch
7 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
EinfügenInsert wie in “normalen” binären SuchbaumEinfügen kann RB-Eigenschaften verletzen.Vorgehen: Roten Knoten in binären Suchbaum einfügen unddanach Eigenschaften reparieren
Reparatur durch zwei grundlegende Operationen:1 Umfärbung von Knoten2 Rotation von Teilbäumen
Insert und Delete sind problematisch
7 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
EinfügenInsert wie in “normalen” binären SuchbaumEinfügen kann RB-Eigenschaften verletzen.Vorgehen: Roten Knoten in binären Suchbaum einfügen unddanach Eigenschaften reparierenReparatur durch zwei grundlegende Operationen:
1 Umfärbung von Knoten2 Rotation von Teilbäumen
Was ist eine Rotation?
8 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Lokale Operation, die binäre Suchbaumeigenschaft erhält.“Umhängen” einer konstanten Zahl an Pointern pro Teilbaum
x
y
Linksrotation
Rechtsrotation
y
x
Was ist eine Rotation?
8 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Lokale Operation, die binäre Suchbaumeigenschaft erhält.“Umhängen” einer konstanten Zahl an Pointern pro Teilbaum
x
y
Linksrotation
Rechtsrotation
y
x
Pseudo-Code: Links-Rotation
9 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
leftrotate(T,x)
1: y ← right [x ]2: right [x ]← left [y ]3: p[left [y ]]← x4: p[y ]← p[x ]5: if p[x ] = nil [T ] then6: root [T ]← y7: else8: if x = left [p[x ]] then9: left [p[x ]]← y
10: else11: right [p[x ]]← y12: end if13: end if14: left [y ]← x15: p[x ]← y
x
y
Linksrotation y
x
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 1:
Situation: Baum ist leerErzeugen neuer WurzelRB-Eigenschaft 2 verletzt
Lösung: Umfärben der Wurzel
N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 1:
Situation: Baum ist leerErzeugen neuer WurzelRB-Eigenschaft 2 verletztLösung: Umfärben der Wurzel
N N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 2:
Situation: Vaterknoten schwarzPfade haben gleiche black heightAlle RB-Eigenschaften OK N
P
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 3:
Situation: Vater und Onkel rot
Lösung:1 Onkel und Vater schwärzen2 Großvater rot färben3 Rekursiv nach oben fortsetzen4 Großvater ist Wurzel? Dann wieder
schwärzen
P
G
U
N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 3:
Situation: Vater und Onkel rotLösung:
1 Onkel und Vater schwärzen2 Großvater rot färben3 Rekursiv nach oben fortsetzen4 Großvater ist Wurzel? Dann wieder
schwärzen
P
G
U
N
P
G
U
N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 4:Situation:
1 Keinen oder schwarzen Onkel2 Neuer Knoten rechts an rotem Vater3 Vater links an Großvater
Lösung:1 Linksrotation um Vater2 Problem: zwei rote Knoten auf Pfad
benachbart3 Lösung per Fall 5!
P
G
U
N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 4:Situation:
1 Keinen oder schwarzen Onkel2 Neuer Knoten rechts an rotem Vater3 Vater links an Großvater
Lösung:1 Linksrotation um Vater2 Problem: zwei rote Knoten auf Pfad
benachbart3 Lösung per Fall 5!
P
G
U N
G
U
PN
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 5:Situation:
1 Keinen oder schwarzen Onkel2 Neuer Knoten links an rotem Vater3 Vater links an Großvater
Lösung:1 Rechtsrotation um Großvater
Andere Richtungen AnalogLöschen nur etwas komplizierter
P
G
U
N
Inserts in Rot-Schwarz-Bäumen
10 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Fall 5:Situation:
1 Keinen oder schwarzen Onkel2 Neuer Knoten links an rotem Vater3 Vater links an Großvater
Lösung:1 Rechtsrotation um Großvater
Andere Richtungen AnalogLöschen nur etwas komplizierter
G
N
P
GP U
N U
Aufwandsabschätzung
11 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Speicher:1 Bit pro Knoten für Farbe
Zeit:Konstanter Aufwand pro Knoten Färben/RotierenMaximal O(log n) Rekursionstiefe
Ziel erreicht: O(n) Platz und Operationen alle in O(log n).
Aufwandsabschätzung
11 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Speicher:1 Bit pro Knoten für Farbe
Zeit:Konstanter Aufwand pro Knoten Färben/RotierenMaximal O(log n) Rekursionstiefe
Ziel erreicht: O(n) Platz und Operationen alle in O(log n).
12 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Die Zahl binärer Suchbäume
Alle binäre Suchbäume mit n = 1,2,3:
13 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
n = 1:
1
n = 2:
1
2
2
1
n = 3:
1
2
3
1
3
2
2
1 3
3
1
2
3
2
1
Alle binäre Suchbäume mit n = 4:
14 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
1
2
3
4
1
2
4
3
1
2
3 4
1
4
2
3
1
4
3
2
2
1 3
4
2
1 4
3
3
1 4
2
3
2 4
1
4
1
2
3
4
1
3
2
4
3
21
4
3
1
2
4
3
2
1
Die Anzahl binärer Suchbäume Cn
15 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
x
< x > x
Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14.
Durch Partitionieren der sortieren Folge:
Cn = C0Cn−1 + C1Cn−2 + · · ·+ Cn−2C1 + Cn−1C0 , n > 0.
Wende erzeugende Funktionen an:
Cn heißen die Catalan-Zahlen.
C(z) =∞∑
n=0
Czzn = C(z) · zC(z) + 1 . =⇒wie in 2. Übung
Cn =1
n + 1
(2nn
).
Die Anzahl binärer Suchbäume Cn
15 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
x
< x > x
Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14.
Durch Partitionieren der sortieren Folge:
Cn = C0Cn−1 + C1Cn−2 + · · ·+ Cn−2C1 + Cn−1C0 , n > 0.
Wende erzeugende Funktionen an:
Cn heißen die Catalan-Zahlen.
C(z) =∞∑
n=0
Czzn = C(z) · zC(z) + 1 . =⇒wie in 2. Übung
Cn =1
n + 1
(2nn
).
Die Anzahl binärer Suchbäume Cn
15 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
x
< x > x
Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14.
Durch Partitionieren der sortieren Folge:
Cn = C0Cn−1 + C1Cn−2 + · · ·+ Cn−2C1 + Cn−1C0 , n > 0.
Wende erzeugende Funktionen an:
Cn heißen die Catalan-Zahlen.
C(z) =∞∑
n=0
Czzn = C(z) · zC(z) + 1 .
=⇒wie in 2. Übung
Cn =1
n + 1
(2nn
).
Die Anzahl binärer Suchbäume Cn
15 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
x
< x > x
Bekannte Startwerte: C0 = 0, C1 = 1, C2 = 2, C3 = 5, C4 = 14.
Durch Partitionieren der sortieren Folge:
Cn = C0Cn−1 + C1Cn−2 + · · ·+ Cn−2C1 + Cn−1C0 , n > 0.
Wende erzeugende Funktionen an: Cn heißen die Catalan-Zahlen.
C(z) =∞∑
n=0
Czzn = C(z) · zC(z) + 1 . =⇒wie in 2. Übung
Cn =1
n + 1
(2nn
).
Notizen zu (a,b)-Bäumen
16 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
B-Bäume sind fast (m2 ,m)-Bäume
mit m = B ein Festplatten-Block.
Insert-Geschwindigkeit (Integer, C++)
17 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
26 28 210 212 214 216 218 220 222 224 2260
0.5
1
1.5
Anzahl von Elementen
Mic
rose
kund
enpr
oIn
sert
Red-Black Treeverkettete Hashtabelle(2,4)-Baum(16,32)-Baum(32,64)-Baum(64,128)-Baum
Locate-Geschwindigkeit (Integer, C++)
18 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
26 28 210 212 214 216 218 220 222 224 226
0
0.5
1
1.5
Anzahl von Elementen
Mic
rose
kund
enpr
oLo
cate
Red-Black Treeverkettete Hashtabelle(2,4)-Baum(16,32)-Baum(32,64)-Baum(64,128)-Baum
Speicherverbrauch (Integer, C++)
19 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
0
50
100
150
200
250
300
350
0 2 4 6 8 10 12
Mem
ory
Usa
ge [
MiB
]
Program Execution Time [s]
Memory Usage Profile - Insertion of 8192000 Integer Pairs
std::multimap__gnu_cxx::hash_multimap
std::tr1::unordered_multimapstx::btree_multimap
std::vectorstd::deque
20 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Programmier-Wettbewerb:Assemblierung von DNA-Fragmenten
Human Genome Project
21 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Photo: Steve Jurvetson (CC-BY via flickr)
Genom des Menschen: ≈ 3,3 G Basen
22 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
CGCAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAGTTTAAACGAGATTGCCAGCACCGGGTATCATTCACCATTTTTCTTTTCGTTAACTTGCCGTCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGACTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTTCATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCACTGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCATCTTCTGGCCCCTGTTGTCTGCATGTAACTTAATACCACAACCAGGCATAGGGGAAAGATTGGAGGAAAGATGAGTGAGAGCATCAACTTCTCTCACAACCTAGGCCAGTAAGTAGTGCTTGTGCTCATCTCCTTGGCTGTGATACGTGGCCGGCCCTCGCTCCAGCAGCTGGACCCCTACCTGCCGTCTGCTGCCATCGGAGCCCAAAGCCGGGCTGTGACTGCTCAGACCAGCCGGCTGGAGGGAGGGGCTCAGCAGGTCTGGCTTTGGCCCTGGGAGAGCAGGTGGAAGATCAGGCAGGCCATCGCTGCCACAGAACCCAGTGGATTGGCCTAGGTGGGATCTCTGAGCTCAACAAGCCCTCTCTG
Daten: Projekt Gutenberg, http://www.gutenberg.org/ebooks/11775oder UCSC Genome Browser, http://genome.ucsc.edu
Programmier-Wettbewerb
23 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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 desersten 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!
1Erhöhung der Größe wird vorbehalten.
Programmier-Wettbewerb
24 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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.
Wettbewerb: DNA-Assemblierung
25 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Bewertung des Wettbewerbs:Erstes Kriterium: Abweichung von der korrekten Patienten-DNA.Bei Abweichung ≤ 100 Basen: Rechenzeit entscheidet64 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 RAMLinux Ubuntu 12.04 LTS Server
Abgabe als buildable Sourcecode, Java jar oder ähnliches.Maximale Laufzeit: drei Stunden.Schlusstermin: Mittwoch 10.7.2013.
Wettbewerb: DNA-Assemblierung
26 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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.
27 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Hashing von Zeichenketten
Nicht: kryptographische Message Digests (MD5, SHA, etc)!
Hashing von Zeichenketten
28 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Gegeben Zeichenkette s = 〈x0, x1, . . . , xn−1〉.Ganz schlechte Hashfunktion:
h(s) =n−1∑i=0
xi mod 2k
Etwas weniger schlechte Hashfunktion:
h(s) = 1 · x0 + 3 · x1 + 5 · x2 + 7 · x3 + · · · mod 2k
Hashing von Zeichenketten
28 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
Gegeben Zeichenkette s = 〈x0, x1, . . . , xn−1〉.Ganz schlechte Hashfunktion:
h(s) =n−1∑i=0
xi mod 2k
Etwas weniger schlechte Hashfunktion:
h(s) = 1 · x0 + 3 · x1 + 5 · x2 + 7 · x3 + · · · mod 2k
Hashing von Zeichenketten
29 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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];
Moderne Hashfunktionen
30 Timo Bingmann, Dennis Luxen7. Übung – Algorithmen I
Fakultät für InformatikInstitut für Theoretische Informatik
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)
Recommended