.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, 72) ( B für balanced oder auch Bayer ) -29
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) -30
Beispiel: B-Baum der Ordnung 5 Wurzel 50 Minimalfüllung! 20 30 12 22 26 34 38 Blätter Maximalfüllung! 60 70 80 90 52 54 56 30 62 64 66 68 72 74 86 88 92 94 96 99-31
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. -32
Verschiebung: Fallunterscheidung Fall Nur linker Nachbar vorhanden mit m links < t-1 Linker und rechter Nachbar vorhanden mit m links < t-1 und m rechts < t-1 und m links < m rechts Linker und rechter Nachbar vorhanden mit m links < t-1 und m rechts < t-1 und m links > m rechts Nur rechter Nachbar vorhanden mit m rechts < t-1 Art der Verschiebung Linksverschiebung Linksverschiebung Rechtsverschiebung Rechtsverschiebung -33
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 b7 Nachher: v1 b2 v3 v4 v5 v6 a1 a2 a3 v2 b1 b3 b4 b5 b6 b7-34
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 c1 c2 c3 c4 c5 c6-35
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. -36
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. -37
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 -38
Verschiebung von Werten beim Löschen Fall Art der Verschiebung Nur rechter Nachbar vorhanden mit m rechts > t 2 1 Linker und rechter Nachbar vorhanden mit m links > t 2 1 und m rechts > t 2 1 und m links m rechts Linker und rechter Nachbar vorhanden mit m links > t 2 1 und m rechts > t 2 1 und m links m rechts Nur linker Nachbar vorhanden mit m links > t 2 1 Linksverschiebung Linksverschiebung Rechtsverschiebung Rechtsverschiebung -39
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 v2 b1 b2 b3-40
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. -41
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? -42
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 n h = 1+ t + t 2 +L+t h = bzw. durch Logarithmieren h log t n h 1 h t i i=0 = th+1 1 t 1 th+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 ( h 1 ) = 1+ 2 t 2 n h = 1+ 21+ t 2 + t 2 2 +L+ t 2-43 h 1 t 2 1 1+ 2 t 2 h 1
oder n h 1 2 t 2 h 1 Logarithmieren ergibt h log t 2 n h 1 2 +1 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: log t n 1 h log t 2 n 1 2 +1 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 -44
Beispiel U.-P. Schroeder, Uni Paderborn Wachsen eines B-Baums der Ordnung t = 5 (Geordnetes Einfügen der Elemente 1,2,..,33) 10 12 10 11 10 11 13 15 16 10 11 12 13 10 11 12 13 10 11 12 15 16 17 12 10 11 13 10 11 12 13 15 16 17 18 12 17 10 11 13 15 10 11 12 13 15 16 18-45
17 22 10 11 12 13 15 16 18 20 10 11 12 13 15 16 17 18 20 21 23 17 22 10 11 12 13 15 16 18 20 21 10 11 12 13 15 16 17 18 20 21 23 18 22 10 11 12 13 15 16 17 20 21 22 10 11 12 13 15 16 17 18 20 21 23 26 23 10 11 12 13 15 16 17 18 20 21 22 23 10 11 12 13 15 16 17 18 20 21 22 26 27-46
10 11 12 13 15 16 17 18 20 21 22 23 26 27 28 27 10 11 12 13 15 16 17 18 20 21 22 23 26 28 29 27 10 11 12 13 15 16 17 18 20 21 22 23 26 28 29 30-47
27 10 11 12 13 15 16 17 18 20 21 22 23 26 28 29 30 31 28 10 11 12 13 15 16 17 18 20 21 22 23 26 27 29 30 31 32 29 10 11 12 13 15 16 17 18 20 21 22 23 26 27 28 30 31 32 33-48
Beispiel Schrumpfen eines B-Baums der Ordnung t = 5 ((Zufälliges Löschen der Elemente 1,2,..,33) U.-P. Schroeder, Uni Paderborn 29 10 11 12 13 15 16 17 18 20 21 22 23 26 27 28 30 31 32 33 29 11 12 13 15 16 17 18 20 21 22 23 26 27 28 30 31 32 33 28 11 12 13 15 16 17 18 20 21 22 23 26 27 30 31 32 33 28 11 12 13 15 16 17 20 21 22 23 26 27 30 31 32 33-49
28 11 12 13 15 16 17 20 21 22 23 27 30 31 32 33 17 28 11 12 13 15 16 20 21 22 23 27 30 31 32 33 17 28 11 12 13 15 16 20 21 22 23 27 30 31 32 17 28 11 12 13 15 16 20 21 23 27 30 31 32 13 16 28 11 12 15 20 21 23 27 30 31 32-50
13 20 28 11 12 16 21 23 27 30 31 32 13 28 11 12 16 20 23 27 30 31 32 13 30 11 12 16 20 23 27 31 32 30 12 13 16 20 23 27 31 32-51
16 30 12 20 23 27 31 32 30 12 27 30 32 12 20 23 27 31 32 30 12 27 32 12 20 27 31 32 27 32 27 32 12 20 27 30 32 32 12 27 30 32 32-52
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. -53
Beispiel Sozialversicherung in China mit ca. 10 9 Einträgen Bei 40 Byte / Eintrag und einer Blockgröße von 4096 Byte ergibt sich ein Auffächerungsgrad von t = 4096 40 10 2 10 2 10 4 10 6 10 8 10 10 Ein B-Baum der Höhe 4 reicht aus -54