© 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 ≤ logt 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 ≤ logt 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