14.3 B-Bäume

Werbung
© U.-P. Schroeder, Uni Paderborn
14.3 B-Bäume
•
t-äre Bäume können - wie Binärbäume - degenerieren, d.h. durch ungünstige
Einfügereihenfolge kann ein unausgewogener Baum mit großer Höhe entstehen.
•
Wird der t-äre Baum zur Verwaltung von Daten auf dem Hintergrundspeicher (Platte)
verwendet, so ist die Anzahl der Plattenzugriffe proportional zur Pfadlänge.
•
Da ein Plattenspeicherzugriff einige Größenordnungen langsamer ist als ein
Hauptspeicherzugriff, können sich lange Pfade verheerend auf die Leistung auswirken.
•
Es stellt sich daher auch hier die Frage nach einer dynamischen Optimierung mit dem Ziel,
möglichst ausgewogene Bäume geringer Höhe zu erhalten.
•
Zu diesem Zweck wurden die sogenannten B-Bäume entwickelt (R. Bayer, 1972)
(„B“ für „balanced“ oder auch „Bayer“)
14-29
© U.-P. Schroeder, Uni Paderborn
Definition
Ein B-Baum der Ordnung t ist ein t-ärer Intervallbaum (Suchbaum) mit den folgenden
Eigenschaften
(1) Alle Blätter liegen in derselben Schicht (haben dieselbe Pfadlänge zur Wurzel)
(2) Alle Knoten mit Ausnahme der Wurzel besitzen mindestens m = t / 2  -1 Werte.
(d.h. mindestens zur Hälfte gefüllt).
(3) Alle Knoten, die nicht Blätter sind und m Werte enthalten, besitzen m+1 Nachfolger
(alle Nachfolgerpositionen sind besetzt)
Zusätzlich gilt natürlich (t-ärer Intervallbaum)
(4) Die maximale Zahl der Werte m in einem Knoten ist t-1 (max. Knotengrad t)
(5) Bezüglich jedes Wertes gilt:
Alle Werte im linken Teilbaum sind kleiner, alle Werte im rechten Teilbaum größer
(Suchbaum-Eigenschaft)
14-30
© U.-P. Schroeder, Uni Paderborn
Beispiel: B-Baum der Ordnung 5
Wurzel
50
Minimalfüllung !
20 30
12 14
22 24 26
34 38
Blätter
Maximalfüllung !
60 70 80 90
52 54 56 30
62 64 66 68
72 74
86 88
14-31
92 94 96 99
© U.-P. Schroeder, Uni Paderborn
Einfügen
Die definierenden Eigenschaften des B-Baums müssen beim Einfügen und Löschen beachtet
werden.
Beim Einfügen muß zunächst wieder die Einfügestelle gesucht werden.
Diese ist auf Grund der B-Baum-Eigenschaft (3) immer in einem Blatt.
Das Einfügen kann folgendermaßen zusammengefaßt werden:
1.
Ist der Baum leer, so ist ein Blatt (gleichzeitig Wurzel) anzulegen und zu initialisieren
2.
Das Element in das Blatt einfügen, falls m < t-1. Der Vorgang ist dann beendet.
Andernfalls tritt ein Überlauf ein (m wird größer als t-1)
3.
Falls m = t wird (Überlauf), muß
a) ein Ausgleich mit einem nichtvollen Nachbarn erfolgen (Verschiebung) oder
b) wenn beide Nachbarn voll besetzt sind, das Blatt geteilt werden,
d.h. ein neues Blatt wird angelegt und die t Werte werden auf beide Blätter verteilt.
14-32
© U.-P. Schroeder, Uni Paderborn
Verschiebung: Fallunterscheidung
Fall
Art der Verschiebung
Nur linker Nachbar vorhanden
mit mlinks < t-1
Linksverschiebung
Linker und rechter Nachbar vorhanden
mit mlinks < t-1 und mrechts < t-1 und mlinks < mrechts
Linksverschiebung
Linker und rechter Nachbar vorhanden
mit mlinks < t-1 und mrechts < t-1 und mlinks > mrechts
Rechtsverschiebung
Nur rechter Nachbar vorhanden
mit mrechts < t-1
Rechtsverschiebung
14-33
© U.-P. Schroeder, Uni Paderborn
Beispiel Linksverschiebung (t=7)
Einfügen des Wertes b7
Vorher:
v1 v2 v3 v4 v5 v6
a1 a2 a3
b1 b2 b3 b4 b5 b6
Nachher:
v1 b2 v3 v4 v5 v6
a1 a2 a3 v 2 b 1
b3 b4 b5 b6 b7
14-34
b7
© U.-P. Schroeder, Uni Paderborn
Anlegen eines neuen Knotens
Einfügen von Wert b7
v1 v2 v3 v4 v5
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
b7
c1 c2 c3 c4 c5 c6
Situation nach Einfügen
v1 v2 b4 v3 v4 v5
a1 a2 a3 a4 a5 a6
b1 b2 b3
b5 b6 b7
14-35
c1 c2 c3 c4 c5 c6
© U.-P. Schroeder, Uni Paderborn
Fortgesetzter Überlauf
•
Das Anlegen eines neuen Knotens führt zum Einfügen eines Wertes beim Vorgänger.
•
Dadurch kann dort ebenfalls ein Überlauf auftreten, der in gleicher Weise zu behandeln ist.
•
Überläufe können sich also bis zur Wurzel fortsetzen.
•
Läuft der Wurzelknoten über, so wird die Wurzel geteilt und eine neue Wurzel angelegt.
•
Dies ist die einzige Situation, bei der ein B-Baum in der Höhe wächst.
14-36
© U.-P. Schroeder, Uni Paderborn
Löschen
•
Beim Löschen von Werten endet die Suche an einem beliebigen Knoten.
•
Ist der Knoten ein innerer Knoten, so besitzt der zu löschende Wert zwei Nachfolgerknoten.
•
Wie üblich wird der Wert dann durch den nächstgrößeren oder nächstkleineren ersetzt,
also durch das Minimum des rechten oder das Maximum des linken Teilbaums.
•
Dieser Ersatzwert liegt immer in einem Blatt.
•
Dadurch ist das Löschen in einem inneren Knoten auf das Löschen in einem Blattknoten
zurückgeführt.
•
Beim Löschen in einem Blatt ist nun wiederum die B-Baum-Eigenschaft zu beachten,
d.h. es kann zu einer Unterschreitung der Minimalfüllung kommen.
14-37
© U.-P. Schroeder, Uni Paderborn
Löschen
1.
Das Element aus dem Blatt entfernen.
Ist das Blatt die Wurzel und ist diese leer gewordenen, so kann die Wurzel gelöscht werden.
Der Baum ist dann leer.
2.
Ist das Blatt nicht die Wurzel und gilt für die Anzahl der Werte m ≥ t 2  −1
(Minimalfüllung bleibt erhalten), so ist das Löschen beendet.
3.
Gilt jedoch m = t 2  − 2, so muß die B-Baum-Eigenschaft wiederhergestellt werden:
•
Gibt es einen Nachbarn mit m > t 2  −1, so können Elemente zwischen den beiden
Knoten verschoben werden.
•
Gilt für beide Nachbarn jedoch m = t 2  −1, so müssen zwei Knoten vereinigt werden
14-38
© U.-P. Schroeder, Uni Paderborn
Verschiebung von Werten beim Löschen
Fall
Art der Verschiebung
Nur rechter Nachbar vorhanden
mit mrechts > t 2  −1
Linksverschiebung
Linker und rechter Nachbar vorhanden
mit mlinks > t 2  −1 und mrechts > t 2  −1 und mlinks mrechts
Linksverschiebung
Linker und rechter Nachbar vorhanden
mit mlinks > t 2  −1 und mrechts > t 2  −1 und mlinks mrechts
Rechtsverschiebung
Nur linker Nachbar vorhanden
mit mlinks > t 2  −1
Rechtsverschiebung
14-39
© U.-P. Schroeder, Uni Paderborn
Vereinigung von Knoten beim Löschen
Vereinigung mit rechtem Nachbarn nach Löschen von a3
v1 v2 v3 v4 v5 v6
a1 a2
b1 b2 b3
Zusammenfassen !
v1 v3 v4 v5 v6
a1 a2 v 2 b 1 b 2 b 3
14-40
© U.-P. Schroeder, Uni Paderborn
Fortgesetztes Vereinigen
•
Durch das Vereinigen von Knoten wird die Zahl der Werte m im Vorgängerknoten um eins
kleiner.
•
Daher kann dort wiederum ein Unterschreiten der Untergrenze stattfinden.
•
Vereinigungsvorgänge können sich daher bis zur Wurzel fortsetzen.
•
Die Wurzel selbst darf jedoch weniger als t 2  −1 Werte besitzen, so daß hier der Vorgang
endet.
14-41
© U.-P. Schroeder, Uni Paderborn
Komplexität der B-Baum-Operationen
•
Der Aufwand der Vorgänge in den Knoten hängt nur von t ab, nicht aber von der Größe des
Baumes.
•
Knotenoperationen können daher als Konstante gewertet werden.
•
Der Aufwand für die Operationen Suchen, Einfügen und Löschen ist offensichtlich
proportional zur Höhe des Baumes
•
Es stellt sich also die Frage: Wie hoch werden B-Bäume ?
14-42
© U.-P. Schroeder, Uni Paderborn
Abschätzung der Höhe von B-Bäumen
Die Höhe ist am geringsten, wenn der Baum vollbesetzt ist, d.h. jeder Knoten t Nachfolger
besitzt. Die Zahl der Knoten eines Baums der Höhe h ist dann
t h+1 −1 h+1
nh = 1 + t + t +L+t = ∑ t =
≤t
t
−1
i=0
2
h
h
i
bzw. durch Logarithmieren
h ≥ logt nh −1
Andererseits ist die Höhe am größten, wenn die Wurzel 2 und alle anderen inneren Knoten
jeweils t 2  Nachfolger besitzen.
In diesem Fall ist die Zahl der Knoten eines Baums der Höhe h
(
nh = 1 + 2 1 + t 2  + t 2  +L+ t 2 
2
h−1
)
h
t 2  −1
h−1

= 1+ 2
≥ 1 + 2 t 2 
t 2  −1
14-43
© U.-P. Schroeder, Uni Paderborn
oder
nh −1
h−1
≥ t 2 
2
Logarithmieren ergibt
n −1
h ≤ logt 2  h  + 1
 2 
Damit haben wir die Höhe eines B-Baums nach oben und unten abgeschätzt und erhalten:
Für die Höhe eines B-Baums der Ordnung t mit n Knoten gilt:
n −1
logt n −1 ≤ h ≤ logt 2 
+1
 2 
Da die Baumhöhe den Aufwand der Operationen bestimmt, ergibt sich für die drei
Operationen eine logarithmische Komplexität in der Anzahl der Knoten und damit auch der
Werte
14-44
© U.-P. Schroeder, Uni Paderborn
Beispiel
Wachsen eines B-Baums der Ordnung t = 5 (Geordnetes Einfügen der Elemente 1,2,..,33)
12
10
10 11
13 14 15 16
10 11
13
10 11 12
10 11 12
10 11 12 13
14 15 16 17
14
12
10 11
10 11 12 13
13 14
15 16 17 18
14 17
12
10 11
10 11 12 13
13 14 15
14-45
15 16
18 19
© U.-P. Schroeder, Uni Paderborn
14 17
10 11 12 13
15 16
18 19 20
14 19 22
10 11 12 13
15 16 17 18
14 17
10 11 12 13
15 16
18 19 20 21
15 16 17
19 20 21 22
10 11 12 13
15 16 17 18
15 16 17 18
20 21 22 23
20 21
23 24 25
14 19 22
10 11 12 13
15 16 17 18
20 21
23 24 25 26
14 19 23
14 19
10 11 12 13
23 24
14 19 22
14 18
10 11 12 13
20 21
10 11 12 13
14-46
15 16 17 18
20 21 22
24 25 26
27
© U.-P. Schroeder, Uni Paderborn
14 19 24
10 11 12 13
15 16 17 18
20 21 22 23
25 26 27 28
14 19 24 27
10 11 12 13
15 16 17 18
20 21 22 23
25 26
28
29
25 26
28 29
14 19 24 27
10 11 12 13
15 16 17 18
20 21 22 23
14-47
30
© U.-P. Schroeder, Uni Paderborn
14 19 24 27
10 11 12 13
15 16 17 18
20 21 22 23
25 26
28 29 30 31
14 19 24 28
10 11 12 13
15 16 17 18
20 21 22 23
25 26 27
29 30 31 32
25 26 27 28
30 31 32 33
14 19 24 29
10 11 12 13
15 16 17 18
20 21 22 23
14-48
© U.-P. Schroeder, Uni Paderborn
Beispiel
Schrumpfen eines B-Baums der Ordnung t = 5 ((Zufälliges Löschen der Elemente 1,2,..,33)
14 19 24 29
10 11 12 13
15 16 17 18
20 21 22 23
25 26 27 28
30 31 32 33
25 26 27 28
30 31 32 33
25 26 27
30 31 32 33
25 26 27
30 31 32 33
14 19 24 29
11 12 13
15 16 17 18
20 21 22 23
14 19 24 28
11 12 13
15 16 17 18
20 21 22 23
14 19 24 28
11 12 13
15 16 17
20 21 22 23
14-49
© U.-P. Schroeder, Uni Paderborn
14 19 24 28
11 12 13
15 16 17
20 21 22 23
25 27
30 31 32 33
25 27
30 31 32 33
25 27
30 31 32
25 27
30 31 32
25 27
30 31 32
14 17 24 28
11 12 13
15 16
20 21 22 23
14 17 24 28
11 12 13
15 16
20 21 22 23
14 17 24 28
11 12 13
15 16
20 21 23
13 16 24 28
11 12
14 15
20 21 23
14-50
© U.-P. Schroeder, Uni Paderborn
13 20 24 28
11 12
14 16
21
13
11 12
14 16 20
23
23
25 27
24 28
25 27
30 31 32
13 24 30
11 12
14 16 20
23
25 27
31 32
14 24 30
12 13
16 20
23
25 27
14-51
31
32
30 31 32
© U.-P. Schroeder, Uni Paderborn
16 24 30
12
14
20
23
25 27
31
24
32
12 14
27 30 32
24 30
12 14
20
23
25 27
31
24
32
12 14
27 32
24 30
12 14
20
25 27
31
32
24
12 14
20
14 24 27
24 27 32
25 27 30 32
24 32
24
32
12 14
25 27 30 32
14-52
32
© U.-P. Schroeder, Uni Paderborn
Einsatz von B-Bäumen
•
B-Bäume mit kleinem t können als Hauptspeicherdatenstrukturen verwendet werden,
bringen gegenüber ausgewogen Binärbäumen jedoch kaum Vorteile.
•
Haupteinsatzgebiet der B-Bäume ist daher die Verwaltung großer Datenmengen auf
Hintergrundspeicher (Dateisysteme und Datenbanksysteme)
•
Die Daten verfügen dabei über einen eindeutigen Schlüssel, der als Suchkriterium dient
•
Die Knotengröße wird so gewählt, daß sie einem Block (als Transporteinheit zwischen Platte
und Hauptspeicher) entspricht.
14-53
© U.-P. Schroeder, Uni Paderborn
Beispiel
Sozialversicherung in China mit ca. 109 Einträgen
Bei 40 Byte / Eintrag und einer Blockgröße von 4096 Byte ergibt sich ein Auffächerungsgrad
von t = 4096 40 ≈ 10 2
102
104
106
108
1010
Ein B-Baum der Höhe 4 reicht aus
14-54
Herunterladen