Kapitel 4: Ausgewählte Datenstrukturen Gliederung 1. Grundlagen 2

Werbung
Kapitel 4: Ausgewählte Datenstrukturen
Gliederung
1.
2.
3.
4.
5.
6.
7.
8.
9.
4/2, Folie 1
Grundlagen
Zahlentheoretische Algorithmen
Sortierverfahren
Ausgewählte Datenstrukturen
Dynamisches Programmieren
Graphalgorithmen
String-Matching
Kombinatorische Algorithmen
Lineare Programmierung
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
Einordnung
 zur Erinnerung
... effiziente Realisierung der zur Verwaltung von sich dynamisch
ändernden Datenbeständen typischen Operationen
•
•
Verwendung von binären Suchbäumen, um die Idee der binären
Suche zu realisieren (/* Suchen, Löschen und Einfügen gehen in
O(tiefe(B)) */)
Einschränkung auf höhenbalancierte binäre Suchbäume, um die
Operationen effizienter zu realisieren (/* tiefe(B) ∈ O(log(n)), wobei
n die Anzahl der Knoten in B bezeichnet */)
... die Operationen Suchen, Einfügen und Löschen benötigen im
„worst case“ jeweils die Zeit O(log(n))
4/2, Folie 2
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
Einordnung
 prominente Beispiele
•
•
•
AVL-Bäume
B-Bäume
...
•
•
4/2, Folie 3
Anforderungen an die Struktur festlegen, damit sicher gestellt
ist, daß tiefe(B) ∈ O(log(n)) gilt
die Operationen Einfügen und Löschen so realisieren, daß die
Anforderungen an die Struktur auch nach Ausführung der
Operation erfüllt sind (/* Invariante 1 */) und die Anforderungen
an die Ordnung erfüllt sind (/* Invariante 2 */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume
 informelle Beschreibung
Ein binärer Suchbaum heißt AVL-Baum, wenn für jeden Knoten gilt,
daß sich die Tiefe seines linken und seines rechten Teilbaums um
maximal 1 unterscheiden.
 Begriff - Balancegrad
k
TBL
4/2, Folie 4
© 2013 Prof. Steffen Lange
b(k) = tiefe(TBL) - tiefe(TBR)
TBR
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume
 Anmerkung zur Repräsentation
•
4/2, Folie 5
jeder Knoten enthält maximal fünf Informationen
•
einen Schlüssel
•
seinen Balancegrad (/* für die Operationen Einfügen und Löschen
wichtig */)
•
max. einen Verweis auf den Vater (/* fehlt für die Wurzel */)
•
max. zwei Verweise auf die Söhne (/* diese können auch fehlen */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume
 Beispiel
5/-1
3/0
1/0
8/1
4/0
6/-1
9/0
7/0
4/2, Folie 6
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume
 Anmerkung zur Operation Suchen
... die Operation Suchen wird wie üblich in binären Suchbäumen realisiert
4/2, Folie 7
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 zugrunde liegende Idee
•
•
•
4/2, Folie 8
findet in 2 Phasen statt
Phase 1
•
Operation Einfügen, wie man sie für normale binäre
Suchbäume kennt, ausführen (/* es wird auf „Blattebene“
eingefügt; Invariante 2 erfüllt */)
Phase 2
•
dem Pfad von dem neuen Blatt zur Wurzel folgen
•
im aktuell besuchten Knoten ist der Balancegrad anzupassen
(/* dazu muß man die Balancegrad der Söhne kennen */)
•
falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der
Baum erst zu modifizieren und dann wird gestoppt
•
sonst wird der nächste Knoten auf dem Weg zur Wurzel
besucht (/* falls es keinen nächsten Knoten gibt, wird
gestoppt */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration
x = 1 in den leeren Baum einfügen
1/0
4/2, Folie 9
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
x = 2 in den linken Baum einfügen
1/0
1/-1
2/0
4/2, Folie 10
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
1/-2
x = 3 in den linken Baum einfügen
2/-1
1/-1
3/0
2/0
2/0
1/0
4/2, Folie 11
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
3/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
x = 5 in den linken Baum einfügen
2/-1
2/0
1/0
1/0
3/0
3/-1
5/0
4/2, Folie 12
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
x = 6 in den linken Baum einfügen
2/-1
2/-1
1/0
1/0
3/-1
3/-2
5/-1
5/0
6/0
4/2, Folie 13
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
LinksRotation
2/-1
1/0
2/-1
3/-2
1/0
5/-1
3/0
6/0
4/2, Folie 14
© 2013 Prof. Steffen Lange
-
HDa/FbI
5/0
-
Effiziente Algorithmen
6/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
x = 4 in den linken Baum einfügen
2/-1
1/0
2/-2
1/0
5/0
3/0
6/0
5/1
3/-1
6/0
4/0
4/2, Folie 15
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
... nicht wirklich gut !!!
5/2
2/-2
1/0
2/-2
5/1
3/-1
1/0
6/0
© 2013 Prof. Steffen Lange
-
3/-1
4/0
4/0
4/2, Folie 16
6/0
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
RechtsRotation
2/-2
1/0
2/-2
1/0
5/1
3/-1
6/0
5/0
4/0
4/2, Folie 17
© 2013 Prof. Steffen Lange
3/-2
-
4/0
HDa/FbI
-
Effiziente Algorithmen
6/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Illustration (cont.)
anschließende LinksRotation
2/-2
1/0
3/0
3/-2
2/1
1/0
5/0
6/0
4/0
4/2, Folie 18
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
5/0
4/0
6/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 allgemein zu den Rotationen (/* auch fürs Löschen wichtig */)
•
•
4/2, Folie 19
falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der Baum lokal
zu modifizieren (/* welche und wie viele Rotationen durchzuführen
sind, ist durch den Balancegrade der Söhne determiniert */)
bei der Rotation müssen die Balancegrade der Söhne und ggf. der
Enkel angepaßt werden
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Linksrotation - Version 1 (/* gibt es auch als Rechtsrotation */)
LinksRotation
k/-2
k‘/-1
k‘/0
k/0
k‘‘/-1
4/2, Folie 20
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
k‘‘/-1
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Linksrotation - Version 2 (/* gibt es auch als Rechtsrotation */)
LinksRotation
k/-2
k‘/-1
k‘/0
k/0
k‘‘/1
4/2, Folie 21
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
k‘‘/1
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Doppelrotation - Version 1 (/* gibt es auch mit einer Linksrotation beginnend */)
RechtsRotation
k/-2
k‘‘/-2
k‘/1
k‘/0
k‘‘/-1
4/2, Folie 22
© 2013 Prof. Steffen Lange
k/-2
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Doppelrotation - Version 1 (/* cont. */)
LinksRotation
k/-2
k‘‘/-2
k‘‘/0
k/1
k‘/0
4/2, Folie 23
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
k‘/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Doppelrotation - Version 2 (/* gibt es auch mit einer Linksrotation beginnend */)
RechtsRotation
k/-2
k‘‘/-1
k‘/1
k‘/0
k‘‘/1
4/2, Folie 24
© 2013 Prof. Steffen Lange
k/-2
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Doppelrotation - Version 2 (/* cont. */)
LinksRotation
k‘‘/0
k/-2
k/1
k‘‘/-1
k‘/0
4/2, Folie 25
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
k‘/-1
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Einfügen
 Anmerkungen zum Einfügen
•
•
Phase 1
•
wie in üblichen Suchbäumen (/* geht in Zeit O(tiefe(B)) */)
Phase 2
•
Balancegrade anpassen, bis Wurzel erreicht oder bis der
Balancegrad auf 2 bzw. -2 geändert wurde (/* geht in Zeit
O(tiefe(B)) */)
•
falls Balancegrad auf 2 bzw. -2 geändert wird, sind im „worst
case“ 2 Rotationen fällig (/* geht in Zeit O(1), da nur lokale
Änderungen nötig sind */)
... die Operation Einfügen benötigt im „worst case“ die Zeit O(log(n)),
wobei n die Anzahl der Knoten im Baum B bezeichnet (/* es gilt
tiefe(B) ∈ O(log(n)) */)
4/2, Folie 26
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 zugrunde liegende Idee
•
•
•
4/2, Folie 27
findet in 2 Phasen statt
Phase 1
•
Operation Löschen, wie man sie für normale binäre Suchbäume
kennt, ausführen (/* die Idee der symmetrischen Nachfolger
berücksichtigen; Invariante 2 erfüllt */)
Phase 2
•
dem Pfad vom Vater des gestrichenen Knotens zur Wurzel folgen
•
im aktuell besuchten Knoten ist der Balancegrad anzupassen
(/* dazu muß man die Balancegrad der Söhne kennen */)
•
falls der Balancegrad auf 2 bzw. -2 geändert wird, ist der
Baum zu modifizieren (/* analog zum Einfügen */) und der
nächste Knoten auf dem Weg zur Wurzel ist zu besuchen
(/* anders als beim Einfügen */)
•
sonst wird gleich der nächste Knoten auf dem Weg zur
Wurzel besucht (/* falls es keinen nächsten Knoten gibt,
wird gestoppt */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Illustration (/* Löschen von x = 5 */)
9/-1
6/-1
5/0
18/1
8/1
14/0
7/0
11/0
19/-1
16/-1
20/0
17/0
4/2, Folie 28
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Illustration (/* Löschen von x = 5, cont. */)
9/-1
6/-2
18/1
8/1
14/0
7/0
11/0
19/-1
16/-1
20/0
17/0
4/2, Folie 29
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Illustration (/* Löschen von x = 5, cont. */)
9/-2
7/0
6/0
18/1
8/0
14/0
11/0
19/-1
16/-1
20/0
17/0
4/2, Folie 30
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Illustration (/* Löschen von x = 5, cont. */)
9/-2
7/0
6/0
14/-1
8/0
11/0
18/0
16/-1
19/-1
17/0
4/2, Folie 31
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
20/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Illustration (/* Löschen von x = 5, cont. */)
14/0
9/1
7/0
6/0
4/2, Folie 32
18/0
11/0
16/-1
8/0
© 2013 Prof. Steffen Lange
19/-1
17/0
-
HDa/FbI
-
Effiziente Algorithmen
20/0
Kapitel 4: Ausgewählte Datenstrukturen
AVL-Bäume - Operation Löschen
 Anmerkungen zum Löschen
•
•
Phase 1
•
wie in üblichen Suchbäumen (/* geht in Zeit O(tiefe(B)) */)
Phase 2
•
insgesamt müssen die Balancegrade aller Knoten auf dem
Weg zur Wurzel angepaßt werden und im „worst case“ je
besuchten Knoten zwei Rotationen ausgeführt werden
•
Balancegrade anpassen (/* geht in Zeit O(1), da nur
lokale Änderungen nötig sind */)
•
falls Balancegrad auf 2 bzw. -2 geändert wird, sind im
worst case 2 Rotationen fällig (/* geht in Zeit O(1), da
nur lokale Änderungen nötig sind */)
... die Operation Löschen benötigt im „worst case“ die Zeit O(log(n)),
wobei n die Anzahl der Knoten im Baum B bezeichnet (/* es gilt
tiefe(B) ∈ O(log(n)) */)
4/2, Folie 33
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Effiziente Algorithmen
Herunterladen