2-3-Bäume

Werbung
Kapitel 4: Bäume / Graphen
Gliederung
1.
2.
3.
4.
5.
6.
4/3, Folie 1
Motivation / Grundlagen
Sortierverfahren
Elementare Datenstrukturen / Anwendungen
Bäume / Graphen
Hashing
Algorithmische Geometrie
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
Suchbäume und Blattsuchbäume
 Suchbäume (/* ein „etwas“ anderer Blick */)
... Schlüssel befinden sich in den inneren Knoten
... Ordnungsprinzip
3
5
7
9
10
12
18
9
5
3
4/3, Folie 2
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
12
7
Datenstrukturen
10
18
Kapitel 4: Bäume / Graphen
Suchbäume und Blattsuchbäume
 Blattsuchbäume
... Schlüssel befinden sich in den Blättern
... innere Knoten enthalten nur „Wegweiser“
... Ordnungsprinzip
3
5
7
9
10
12
18
18
9
18
5
3
4/3, Folie 3
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
9
5
Datenstrukturen
7
18
12
9
10
12
Kapitel 4: Bäume / Graphen
Suchbäume und Blattsuchbäume
 zugrunde liegende Idee der unterschiedlichen Ansätze
•
man verwendet (/* nicht notwendigerweise binäre !!! */) so genannte
höhenbalancierte Suchbäume bzw. Blattsuchbäume, d.h. Such- bzw.
Blattsuchbäume, für die a) oder b) gilt:
a)
b)
4/3, Folie 4
alle Blätter haben dieselbe Tiefe
die Tiefe aller Blätter unterscheidet sich nur unwesentlich
(/* üblicherweise: +/- 1 */)
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
Suchbäume und Blattsuchbäume
 Beispiele für höhenbalancierte Suchbäume
•
•
•
AVL-Bäume
B-Bäume
...
 Beispiele für höhenbalancierte Blattsuchbäume
•
•
2-3-Bäume
...
... Blattsuchbäume haben den Vorteil, daß neben den üblichen
Dictionary-Operationen auch so genannte Bereichsanfragen
„effizient“ realisiert werden können (/* man sucht alle verwalteten
Schlüssel, die in einem interessierenden Bereich liegen */)
4/3, Folie 5
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Grundidee
•
eine Art von höhenbalancierten Blattsuchbäumen, wobei
sicher gestellt wird, daß alle Blätter dieselbe Tiefe haben
(/* damit können 2-3-Bäume keine Binärbäume sein */)
14
5
3
4/3, Folie 6
© 2010 Prof. Steffen Lange
-
9
5
HDa/FbI
7
-
14
9
10
Datenstrukturen
12
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Eigenschaften von 2-3-Bäumen
a)
b)
c)
d)
jeder innere Knoten hat mindestens zwei und höchstens drei Söhne
alle Blätter haben dieselbe Tiefe
jedes Blatt enthält einen Schlüssel, wobei die Schlüssel den
Blättern in aufsteigender Reihenfolge von links nach rechts
zugewiesen sind
jeder innere Knoten enthält den Schlüssel, der im rechtesten Blatt
des an diesem Knoten beginnenden Teilbaums gespeichert ist
14
5
3
9
5
7
14
9
10
12
14
... c) und d) sind üblich; a) und b) sind spezifisch
4/3, Folie 7
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Konsequenz
da alle inneren Knoten in einem 2-3-Baum B mindestens zwei Söhne
haben gilt ...
Jeder 2-3-Baum B mit n Blättern hat eine Tiefe ≤ log(n).
4/3, Folie 8
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Suchen
-
beginne bei der Wurzel
es seien y1, y2 und y3 die in den Söhnen gespeicherten Schlüssel
falls die Söhne Blätter sind, so prüfe, ob x = y1, x = y2 bzw.
x = y3 gilt
falls ja, stoppe und gib „gefunden“ zurück (/* falls nein,
so stoppe beim Sohn mit dem Schlüssel y1 (/* y1 > x */),
beim Sohn mit dem Schlüssel y2, (/* y2 > x */), bzw.
y3 (/* sonst */) und gib „nicht gefunden“ zurück */)
falls die Söhne keine Blätter sind, gehe wie folgt vor:
falls x ≤ y1, so suche rekursiv im linken Teilbaum weiter
falls y1 < x ≤ y2, so suche im mittleren Teilbaum weiter
falls y2 < x, so suche im rechten Teilbaum weiter
... falls nur zwei Söhne vorhanden sind analog
... komplizierter als nötig; das ist für die anderen Operationen wichtig
4/3, Folie 9
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* Beispiel */)
Einfügen von 14 ...
12
5
3
12
9
5
7
12
9
10
5
12
9
5
3
7
12
9
10
12
14
5
3
4/3, Folie 10
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
9
5
7
14
9
10
12
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* Beispiel */)
Einfügen von 13 ...
14
14
5
3
9
5
7
5
14
9
10
12
14
9
5
3
14
7
9
10
14
12
14
5
3
4/3, Folie 11
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
9
5
Datenstrukturen
7
14
9
10
12
13
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* Beispiel */)
Einfügen von 13 ...
14
5
3
14
9
5
7
14
9
10
12
5
14
9
5
3
14
7
9
10
12
14
13
14
5
3
4/3, Folie 12
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
9
5
Datenstrukturen
7
12
9
10
14
12
13
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* Beispiel */)
Einfügen von 13 ...
14
5
3
14
9
5
7
5
14
9
10
12
14
5
3
12
9
7
9
10
14
9
14
5
3
Hinweis: Einfügen
von 13
© 2010 Prof. Steffen Lange
4/3, Folie 13
-
HDa/FbI
-
12
9
5
Datenstrukturen
14
13
12
7
9
10
14
12
13
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* Beispiel */)
Einfügen von 13 ...
9
14
5
3
9
5
7
5
14
9
10
12
14
14
3
9
5
12
9
7
14
12
10
14
13
14
9
14
5
3
4/3, Folie 14
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
9
5
Datenstrukturen
7
12
9
10
14
12
13
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Einfügen (/* allgemein */)
-
4/3, Folie 15
suche den Schlüssel x und markiere die besuchten inneren Knoten
bestimme den Vater v des Blatts, bei dem bei der Suche gestoppt
wurde, und füge links bzw. rechts davon ein Blatt mit dem Schlüssel x
ein
falls v drei Söhne hat, so folge dem Weg zur Wurzel und passe
die Schlüssel an
falls v vier Söhne hat, so spalte v in zwei innere Knoten, passe
die Schlüssel dieser neuen Knoten an und mache beide Knoten
zu Söhnen des Vaters v‘ von v; anschließend gehe zu v‘ (/* falls
v‘ gar nicht existiert, neue Wurzel erzeugen */)
falls v‘ drei Söhne hat, folge dem Weg zur Wurzel und passe
die Schlüssel an
falls v‘ vier Söhne hat, setze rekursiv fort
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* Beispiel */)
Löschen von 9 ...
14
5
3
14
9
5
7
14
9
10
12
5
14
9
5
3
7
14
9
10
12
14
14
5
3
4/3, Folie 16
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
10
5
7
14
10
12
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* Beispiel */)
Löschen von 5 ...
14
14
5
3
10
5
7
5
14
10
12
3
14
10
5
14
10
7
14
12
14
10
3
4/3, Folie 17
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
7
Datenstrukturen
14
10
12
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* Beispiel */)
Löschen von 10 ...
14
14
10
3
7
10
14
10
12
14
3
7
14
10
14
12
14
7
3
4/3, Folie 18
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
14
7
12
14
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* Beispiel */)
Löschen von 14 ...
14
14
7
3
7
14
7
12
3
14
14
7
14
12
14
12
3
4/3, Folie 19
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
7
12
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* Beispiel */)
Löschen von 14 ...
14
14
7
3
12
14
7
12
3
14
7
12
12
3
4/3, Folie 20
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
7
12
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Operation – Löschen (/* allgemein */)
-
4/3, Folie 21
suche den Schlüssel x und markiere die besuchten inneren Knoten
bestimme den Vater v des Blatts mit dem Schlüssel x und lösche dieses
Blatt
falls v zwei Söhne hat, so folge dem Weg zur Wurzel und passe die
Schlüssel an
falls v einen Sohn hat, prüfe ob ein Bruder von v drei Söhne hat
falls ja, stehle einen Sohn vom Bruder, mache ihn zu einem
Sohn von v, folge dem Weg zur Wurzel und passe die
Schlüssel an
falls nein, verschmelze v mit einem seiner Brüder, passe den
Schlüssel von v an und gehe zum Vater v‘ von v
falls v‘ zwei Söhne hat, folge dem Weg zur Wurzel und
passe die Schlüssel an
falls v‘ einen Sohn hat, setze rekursiv fort (/* falls v‘ die
Wurzel ist, so lösche v‘ */)
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume
 Zusammenfassung
•
•
jede der Operation Suchen, Einfügen und Löschen benötigt im „worst
case“ in einem 2-3-Baum die Zeit O(t), wobei t die Tiefe des Baums
angibt
jeder 2-3 Baum B mit n Blättern hat eine Tiefe t ≤ log(n)
... also gehen alle Operationen im „worst case“ in Zeit O(log(n))
4/3, Folie 22
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Kapitel 4: Bäume / Graphen
2-3-Bäume und Bereichsanfragen
 Aufgabenstellung
•
in bestimmte Anwendungen von 2-3-Bäumen (/* siehe später */)
ist es interessant zu wissen, welche Schlüssel eines gegebenen
Intervalls [a,e] im Baum B gespeichert sind
 Lösungsansatz
... „organisiere“ die Blätter als doppelt verkettete Liste
16
9
16
5
3
4/3, Folie 23
9
5
© 2010 Prof. Steffen Lange
7
-
12
9
HDa/FbI
10
-
16
12
Datenstrukturen
14
15
16
Kapitel 4: Bäume / Graphen
2-3-Bäume und Bereichsanfragen
 Realisierung einer Bereichsanfrage
1.
2.
3.
suche nach x = a (/* bei Blatt ba stoppt die Suche */)
suche nach x = e (/* bei Blatt be stoppt die Suche */)
gib „alle“ Schlüssel in der Liste aus, die in ba beginnt und in be endet
(/* für den Schlüssel be wird separat geprüft, ob e = be gilt */)
17
a = 6, b = 14
9
17
5
3
12
9
5
7
9
10
17
12
13
15
17
... geht im „worst case“ in Zeit O(t+k), wobei t die Tiefe des Baums
und k die Anzahl der gefundenen Schlüssel ist
4/3, Folie 24
© 2010 Prof. Steffen Lange
-
HDa/FbI
-
Datenstrukturen
Herunterladen