DS Vorlesung - TU Chemnitz

Werbung
Vorlesung Datenstrukturen
B-Baum
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 422
Mehrwegsuchbäume
Einordnung
Wir hatten den Binärbaum als Spezialfall eines M-ären Baumes, dessen Knoten genau M
Nachfolger haben, kennengelernt.
Binäre Suchbäume deklarierten wir als Binärbäume, die einem Ordnungskriterium unterworfen
sind, das die Anordnung der beiden Teilbäume eines Knotens in Abhängigkeit vom Wert einer
Schlüsselkomponente gestaltete.
Analog der Betrachtung eines Binärbaums als M-ärer Baum mit M=2 können wir auf
umgekehrtem Wege binäre Suchbäume zu M-ären bzw. M-Wege-Suchbäumen verallgemeinern.
M-Wege-Suchbaum (M-ärer Suchbaum)
• ist ein Baum, dessen Knoten jeweils genau M Kinder und M–1 Schlüssel besitzen
• Die M–1 Schlüssel eines Knotens sind aufsteigend sortiert
• Die Schlüssel in den ersten i Kindknoten sind kleiner als der i-te Schlüssel
• Die Schlüssel in den letzten M–i Kindknoten sind größer als der i-te Schlüssel
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 423
Mehrwegsuchbäume
Anwendung
Mehrwegsuchbäume dienen dem selben Zweck wie binäre Suchbäume: Bereitstellung einer
schnellen Zugriffsmethode auf geordnete Datenmengen.
Warum mehr als zwei Wege?
Zur Organisation sehr großer Datenmengen, z.B. bei Datenbanken reicht der Hauptspeicher
eines Rechners oft nicht aus und man muss auf den Sekundärspeicher (z.B. Festplatte, SSD)
zurückgreifen.
Da die benötigte Zeit für den Zugriff auf den Sekundärspeicher um Größenordnungen höher
liegt als beim Hauptspeicherzugriff, spielt die Tiefe eines Baumes (die zur Anzahl der Zugriffe
auf den Sekundärspeicher korrespondiert) eine wesentliche Rolle bei der Verarbeitung
großer Datenmengen.
Vergleich bei hundert Millionen Elementen
Tiefe eines perfekt balancierten binären Suchbaums: log2108 = 27
Tiefe eines perfekt balancierten 100-Wege Suchbaums: log100108 = 4
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 424
Mehrwegsuchbäume
Nachteile allgemeiner Mehrwegsuchbäume
Leider weisen Mehrwegsuchbäume prinzipiell die selben Schwächen wie binäre Suchbäume
auf, da sie auch degenerieren können.
Insbesondere bei langsamen Sekundärspeicheroperationen wirkt sich der Grad der
Unbalanciertheit eklatant aus.
Abhilfe
B-Bäume (Bayer und McCreight, 1972) stellen einen für Sekundärspeicher optimierten
Mehrwegsuchbaum dar.
Die Größe eines B-Baumknotens kann hier so gewählt werden, dass sie zur Blockgröße des
Sekundärspeichers korrespondiert.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 425
B-Baum
B-Baum der Ordnung M
• die Wurzel besitzt mindestens zwei Teilbäume, sofern sie kein Blatt ist
• alle Nichtwurzel- und alle Nichtblattknoten enthalten k–1 Schlüssel und
k Verweise auf ihre Teilbäume
• jeder Blattknoten enthält k–1 Schlüssel
• alle Blätter befinden sich auf einer Ebene
• für k gilt: !" M 2 #$ < k ≤ M
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 426
Struktur eines B-Baum-Knotens
Knoteninhalt eines B-Baumknotens
Meist dienen B-Bäume als Zugriffsstrukturen (z.B. für Datensätze einer Datenbank oder Dateien
einer Festplatte). Demzufolge benötigen wir für jeden Schlüssel zwei Verweise, einen auf den
Teilbaum mit dem nächst größeren Schlüssel und einen auf den zugehörigen Datensatz. Zusätzlich
brauchen wir je B-Baumknoten noch einen Verweis auf den Teilbaum mit den kleineren Elementen.
Beispiel für M=5
struct keyNode {
int
key;
data* info;
bNode* right;
};
//
//
//
//
Schlüssel-Knoten für jeden Schlüssel eines B-Baumknotens
Schlüssel
Zeiger auf eigentliche Daten
rechter Teilbaum mit größeren Elementen als key
struct bNode {
// eigentlicher B-Baumknoten
bNode* left;
// linker Teilbaum
keyNode iNod[4];// ein B-Baumknoten enthält vier Schlüssel-Knoten
};
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 427
Eigenschaften eines B-Baums
Eigenschaften
Nach der gegebenen Definition ist sichergestellt, dass
• B-Bäume immer mindestens zur Hälfte gefüllt sind
• eine geringe Höhe besitzen (in Abhängigkeit von M)
• perfekt balanciert sind
Weganzahl eines B-Baums
Da ein B-Baumknoten oft der Größe eines Blocks des Sekundärspeichers entspricht, ergibt
sich die Anzahl der Wege M des Baums aus dieser Größe, d.h. aus der Anzahl der Knoten
des Typs keyNode, die sich in einem Sekundärspeicherblock unterbringen lassen.
Damit determiniert neben der Blockgröße hauptsächlich der Speicherbedarf der Schlüsselkomponente die Anzahl der Wege eines B-Baums.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 428
Suchen im B-Baum
B-Baumknoten enthalten in der Regel mehrere Schlüssel ➔ zweistufige Suche nötig:
1. Suchen im B-Baum: Verfolgen der Verzeigerung wie im binären Suchbaum
2. Suchen innerhalb eines B-Baumknotens: sequentielle Suche bei kleinem M, sonst binäre Suche
Fallunterscheidung bei Suche nach Schlüssel w
• w liegt zwischen den direkt benachbarten Schlüsselwerten a und b ➔ Verfolgen der Referenz des Schlüsselknotens mit Schlüssel a
• w ist größer als der Schlüsselwert des letzten ((M–1)-ten) Schlüsselknotens
➔ Verfolgen der Referenz des letzten Schlüsselknotens
• w ist kleiner als der erste Schlüssel des B-Baumknotens
➔ Verfolgen des Zeigers auf den linken Teilbaum des B-Baumknotens
• w wird gefunden
➔ Bearbeitung des referenzierten Datensatzes
• Falls irgendwo der Nullzeiger bei Zeigerverfolgung auftritt, wird die Suche abgebrochen.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 429
Einfügen in einen B-Baum (1)
Hauptproblem
Der Einfügealgorithmus muss sicherstellen, dass sich nach dem Einfügen weiterhin
alle Blätter des Baumes auf einer Ebene befinden.
Strategie
Das Einfügen eines neuen Elements e erfolgt immer auf der Blattebene, dadurch
wächst der Baum von unten nach oben und wird somit in perfekter Balance gehalten.
Situationsbehandlung
1. Der für e geeignete Blattknoten besitzt noch freie Kapazitäten:
➔ Einordnen von e an der richtigen Stelle im Knoten
2. Einzig vorhandener Knoten ist die Wurzel und diese ist voll: ➔ siehe nächste Folie
3. Der zu e passende Blattknoten ist voll: ➔ siehe übernächste Folie
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 430
Einfügen in einen B-Baum (2)
Situation
Einfügen eines Elements e in eine volle Wurzel A.
Ablauf
• (virtuelles) sortiertes Einfügen von e in A, wobei die Verletzung des Füllkriteriums ignoriert wird
• Bestimmen des Mittelelements d (an Position M/2) von A
• alle Elemente mit kleinerem Schlüssel als d verbleiben in A
• alle Elemente mit größerem Schlüssel als d werden in einen neuen Knoten B einsortiert
• d wird in einen neuen Knoten R (die neue Wurzel) eingefügt
• der (linke) Verweis von R muss dann auf A gesetzt werden
• der (rechte) Verweis von d muss auf B gesetzt werden
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 431
Einfügen in einen B-Baum (3)
Situation
Einfügen eines Elements e in einen vollen Blattknoten A.
Ablauf
• (virtuelles) sortiertes Einfügen von e in A, wobei die Verletzung des Füllkriteriums ignoriert wird
• Bestimmen des Mittelelements d (an Position M/2) von A
• alle Elemente mit kleinerem Schlüssel als d verbleiben in A
• alle Elemente mit größerem Schlüssel als d werden in einen neuen Blattknoten B einsortiert
• (sortiertes) Einfügen von d in den Vater von A. Setzen des rechten Teilbaumverweises von d auf B
Beachte
Wenn der Vater von A ebenfalls voll ist, führt dies zu einem weiteren Aufruf des Einfügealgorithmus.
Prinzipiell kann sich die Rekursion auf diese Weise bis zur Wurzel des B-Baums fortsetzen.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 432
Löschen im B-Baum (1)
Hauptproblem
Der Löschalgorithmus muss sicherstellen, dass sich nach dem Löschen weiterhin alle Blätter
des Baumes auf einer Ebene befinden.
Strategie
Wir verwenden die Löschstrategie Löschen durch Kopieren, die sichergestellt, dass wir
immer auf der Blattebene löschen (da sich alle Blätter in einer Ebene befinden, ist der zu
löschende Knoten nach der Kopieraktion definitiv ein Blatt).
Allgemeiner Ablauf
1. Löschen des Elements mittels Löschen durch Kopieren aus einem B-Baum-Blattknoten Y
2. Wiederherstellen der Ordnung in Y (z.B. durch Verschieben aller Elemente „rechts“ des
gelöschten Elements um eine Position nach links bei Feldorganisation).
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 433
Löschen im B-Baum (2)
Situationsbehandlung
Wir müssen nach der eigentlichen Löschoperation noch untersuchen, ob Y den Kriterien eines
B-Baumknotens weiterhin genügt oder anderenfalls geeignete Korrekturen durchführen.
Situation 1
Y genügt den Füllkriterien eines B-Baumknotens ➔ keine weiteren Maßnahmen
Situation 2
Y unterschreitet die Mindestelementanzahl eines B-Baumknotens. Hierbei unterscheiden wir
zwei weitere Situationen in Abhängigkeit des Füllgrads der Geschwisterknoten von Y (X sei der
linke und Z der rechte Geschwisterknoten)
•
Situation 2.1: Die Elementanzahl von X oder Z (oder beiden) ist größer als die minimal
zulässige Elementanzahl
•
Situation 2.2: Die Elementanzahl von X und Z beträgt genau die minimal zulässige
Elementanzahl. Dies beinhaltet sinngemäß auch den Fall, dass X oder Z nicht existieren.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 434
Löschen im B-Baum (3)
Situation 2.1
Die Elementanzahl von X oder Z ist größer als die zulässige Mindestanzahl.
Behandlung von Situation 2.1
Wir unterscheiden zwei Möglichkeiten:
1. Wenn X mehr Elemente als die notwendige Mindestanzahl enthält, dann wird das
Elternelement von X in Y einsortiert und das größte Element von X wandert an die
Stelle des entnommenen Elternelements. Dort wird auch der Verweis auf Y eingetragen.
2. Wenn Z mehr Elemente als die notwendige Mindestanzahl enthält, dann wird das
Elternelement von Z in Y einsortiert und das kleinste Element von Z wandert an die
Stelle des entnommenen Elternelements. Dort wird auch der Verweis auf Z eingetragen.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 435
Löschen im B-Baum (4)
Situation 2.2:
Die Elementanzahl von X und Z entspricht genau der Mindestanzahl.
Behandlung von Situation 2.2
Wir können uns generell für eine der beiden folgenden zwei Möglichkeiten
entscheiden (es sei denn, dass X nicht existiert oder Z nicht existiert):
1. Wir fügen die Elemente von Z und das Elternelement von Z in Y ein und
löschen Z und das (ehemalige) Elternelement von Z
2. Wir fügen die Elemente von X und das Elternelement von X in Y ein und
löschen X und das (ehemalige) Elternelement von X
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 436
Löschen im B-Baum (5)
Beachte
Bei Löschsituation 2.2 sinkt durch das Entfernen von X oder Z die Anzahl der Elemente im
übergeordneten B-Baumknoten um Eins, wobei das Füllkriterium des übergeordneten BBaumknotens verletzt werden kann, was gegebenenfalls in der rekursiven Durchführung des
Löschalgorithmus bis zur Wurzel resultiert.
Sonderfall
Es besteht die Möglichkeit, dass die zwei als Folge der Löschoperation zu verschmelzenden
Knoten die Entnahme des letzten verbliebenen Elements der Wurzel bewirken.
Lösung
Der verschmolzene Blattknoten wird die neue Wurzel (und damit der einzige Knoten) des B-Baums.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 437
Weiterentwicklungen des B-Baums
B*-Baum
Um den teuren (zeitintensiven) Zugriff auf Sekundärspeicher zu minimieren, versucht
der B*-Baum durch eine weitere Verschärfung des Füllkriteriums die Knotenanzahl des
B-Baums noch weiter zu reduzieren.
Maßnahmen
Alle Knoten (außer der Wurzel) müssen zu mindestens 2/3 gefüllt sein.
Bevor ein Knoten gesplittet wird, versucht man zunächst, dessen Elemente auf seine
Geschwister zu verteilen.
Ergebnis
Insgesamt ergibt sich ein durchschnittlicher Füllgrad von etwa 81% (vgl. B-Baum: 69%).
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 438
Weiterentwicklungen des B-Baums
B+-Baum (Wedekind, 1974)
Verweise auf die Daten erfolgen nur in den Blättern des B+-Baums, die i.d.R. auch untereinander verbunden sind (d.h. ein Blatt „kennt“ seine direkt benachbarten Geschwister).
Vorteil
Daten können z.B. effizient sortiert ausgegeben werden, ohne eine (wesentlich
kostenintensivere) Inorder-Baumtraversierung durchführen zu müssen.
Alle Nichtblattknoten kann man somit als Zugriffsoptimierung (Index) der eigentlichen
Daten ansehen.
Dieses Konzept ist für viele Anwendungen, z.B. Datenbanken von wesentlicher
Bedeutung und wird Ihnen im weiteren Studienverlauf sicher noch häufiger begegnen.
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 439
Ende der Vorlesung
Dr. Frank Seifert
Vorlesung Datenstrukturen - Sommersemester 2016
Folie 440
Herunterladen