B-Baum

Werbung
5.6 Ausgeglichene MehrwegMehrweg-Suchbäume
Wünschenswerte
Eigenschaft von Suchbäumen
mit n Knoten:
Suchen, Einfügen, Löschen auch im
schlechtesten Fall O(log n)
Methoden:
lokale Transformationen (AVL-Baum)
Stochastische Algorithmen / Datenstrukturen
("Randomisierung"). Aber nur
Wahrscheinlichkeitsaussagen zu Laufzeit / Speicherplatz!
Vergrößern der Knoten: Mehrwegbäume mit geeigneten
Eigenschaften.
hs / fub – alp3-19-Bbaum-1 1
5.6.1 BB-Baum: Ausgeglichener MehrwegMehrweg-Suchbaum
30
20 25
10 15 18
22 23 24
35
27 29
Rudolf Bayer, Edward M. McCreight:
Organization and Maintenance of
Large Ordered Indices. Acta
Informatica Vol 1,173-189
1972
40 50
31 34
37,39
45 47
60
- Innere Knoten haben minimale und maximale
Anzahl Kinder k. Hier: 2 <= k <= 4
- Anzahl Werte(Schlüssel) eines Knotens mit k
Kindern: k-1
- Suchbaumeigenschaft: vi, vi+1 Werte im Knoten k ,
dann ist enthält Unterbaum, auf den zwischen vi und
vi+1 verwiesen wird, nur Werte v mit vi <= v < vj
1
Def. BB-Baum
- Mehrweg-Baum mit variablem Grad k,
t <= k <=2 t ,
t: Minimalgrad
Wurzel: 1 <= k <= 2t.
- Knoten mit vom Grad k enthalten k-1 Werte
(Werte und/oder Schlüssel ).
- Knoten (v1,v2,...,vk-1) ist Blatt oder
besitzt k Unterbäume t1,...,tk mit :
f. alle x ∈ ti, y ∈ ti+1: x <= vi < y, i = 1,..,k-1 (Suchbaum).
- Alle Blätter haben gleiche Tiefe (ausgeglichen).
t=2: (2,4)-Baum, manchmal (2,3,4)-Baum
Typische Verwendung: Hintergrundspeicherverwaltung,
großer Verzweigungsgrad "Fanout") => großes t (-> später).
hs / fub – alp3-19-Bbaum-1 3
Diskussion B-Baum
Ausgeglichenheit bei fester Anzahl Werte pro
Knoten nur aufwendig zu garantieren.
insert(5)
20 25
5
10 15
22 23
27
Alle Knoten betroffen bei Wiederherstellen der
Invarianten (!)
Lösung bei B-Bäumen:
a) Zulassen, dass Anzahl Werte pro Knoten variabel
b) Geschickte Änderungsalgorithmen.
hs / fub – alp3-19-Bbaum-1 4
2
Diskussion B-Baum: Höhe
Eigenschaft:
Die Höhe h eines B-Baums mit Minimalgrad t und n
Knoten ist durch
h <= log t ((n +1)/2)
beschränkt.
Asymptotische
Laufzeit wie binärer Suchbaum, aber...
Großes t macht Baum flacher.
Konstante wichtig für Externspeicherdatenstruktur.
Z.B. ist ausgeglichener binärer Suchbaum durchschnittlich
um Faktor 5.6 (= ln 50 / ln 2) höher als B-Baum mit
Minimalgrad t = 50.
hs / fub – alp3-19-Bbaum-1 5
Datenstruktur
public class BTreeN {
int T = 20, MAX_T = 2*T; // minimal degree
protected Comparable keys[];
// (t-1) <= values <= 2*t-1 in this node
protected BTreeN subtrees[];
// t < number of subtrees < 2*t
protected BTreeN parent;
// the parent node, null if root
protected boolean leaf=true;
// Leafnode?
protected int count=0;
// number of keys
public BTreeN ( ){
keys = new Comparable [MAX_T];
subtrees = BTreeN [MAX_T];
// DISK_WRITE the serialized node if used as an
//external index
}
hs / fub – alp3-19-Bbaum-1 6
3
5.6.2
(2,4)(2,4)-Bäume als Spezialfall von BB-Bäumen
Operationen
Suche in B-Baum
(fast) wie in binärem Suchbaum
12
search (9)
5 10
15
t=2: 2,4-Baum
3 4
6 8
11
1314
17
not found
Traversieren des durch den Suchschlüssel bestimmten
Pfades zu dem Knoten, der Schlüssel enthält (oder
nicht gefunden).
hs / fub – alp3-19-Bbaum-1 7
Operationen
Einfügen
- immer in dem Knoten am Ende des Suchpfades
einfügen
12
- das ist ein Blatt
insert(9)
5 10
3 4
Fall 1: Kein Problem für
Knoten mit weniger
als 2*t (hier: 4) Werten
6 8
15
11
1314
17
689
hs / fub – alp3-19-Bbaum-1 8
4
Operationen
Einfügen: der kritische Fall
Fall 2: Teilen eines Knotens mit
2*t-1 Werten (Split-Knoten).
=> Elternknoten hat ein
Kind mehr
=> ein Wert wandert in
Elternknoten.
12
insert(7)
5 10
3 4
15
?
68 9
12
11
13 14
17
5 8 10
8
6
15
9
3 4
67
9
11
1314
17
hs / fub – alp3-19-Bbaum-1 9
Invarianten nach Knotenspaltung
Baum nach Einfügen ausgeglichen ("Wächst zur
Wurzel hin"!).
Grad-Invariante bleibt erhalten:
Split-Knoten enthielt 2*t-1 Werte,
=> neue Knoten enthalten max.
(2*t-2) / 2 +1 Werte.
Suchbaum-Invariante erfüllt.
Alternativen
für Einfügealgorithmus:
a) Bottom-up-Split:
Suche Blatt, in das einzufügen ist,
Wenn es 2*t-1 Schlüssel (= Werte) enthält, spalten!
Rekursives Spalten bis zur Wurzel möglich.
hs / fub – alp3-19-Bbaum-1 10
5
Spalten beim Einfügen:
Einfügen: TopTop-Down
b)Top-Down-Split: Beim Einfügen jeden Knoten auf dem
Suchpfad spalten, der 2*t-1 Schlüssel enthält
insert(7)
12
34 5 10
2
4
6
9
5 12
11
13 14
17
2
4
15
10
3 4
15
6 79
11
13 14
17
- Einfacher Algorithmus (Eine Wurzel-Blatt-Traversierung)
- Gelegentlich vorzeitige Split-Operationen
hs / fub – alp3-19-Bbaum-1 11
Einfügen in (2,4)(2,4)-Baum schematisch
Spaltung
(Split)
a
a y
xyz
analog:
x
a <= x <= y<=z
z
ggf. rekursiv "nach oben" fortsetzen
a b
aby
xyz
x
z
hs / fub – alp3-19-Bbaum-1 12
6
Zusammenfassung:
Zusammenfassung: Einfügen in (2,4)(2,4)-Baum
Schritt
1: Suche des Knotens K, in den einzufügen
ist (Blattknoten!)
Schritt 2:
K enthält weniger als 2*t –1 Schlüssel
((2,4)-Baum: 3):
einfügen!
K enthält 2*t-1 Schlüssel x1,…x2t-1:
K spalten in K1, K2 mit je t-1 Schüsseln,
mittleren Schlüssel xt, x1 <= x2 <=… xt-1 <= xt<=…. <=x2t-1
in Elternknoten E von K übernehmen , K1 und K2 neue
Kinder von E anstelle von K .
Top-Down
Variante:
In Schritt 1 jeden traversierten Knoten mit 2*t-1
Knoten spalten.
hs / fub – alp3-19-Bbaum-1 13
Operationen:
Operationen: Löschen
- lösche in Blatt mit mindestens t Schlüsseln.
- lösche in innerem Knoten: analog binärem Suchbaum.
delete(6)
34 5 10
2
4
6
delete(5)
12
9
3 5 10
15
11
13 14
12
17
2
4
6 9
15
11
13 14
17
Einfach: Beide Fälle verletzen nicht die
Invariante für die Anzahl Schlüssel
hs / fub – alp3-19-Bbaum-1 14
7
Unterlauf durch Löschen
- Lösche in Blatt mit t-1 Schlüsseln.
delete(4)
12
34 5 10
2
4
6
9
12
34 6 10
15
11
13 14
17
2
5
15
11
9
17
13 14
Schlüssel auf Vaterknoten entnehmen
4 Unterbäume, nur 2 verbliebene Schlüssel:
=> Transfer aus Kind-Knoten.
hs / fub – alp3-19-Bbaum-1 15
Löschen:
Löschen: Unterlauf vermeiden
delete(12)
34 5 10
34 5 10
2
13
12
2
4
6
9
15
15
11
13 14
17
4
6 9
11
14
17
Führt zu Unterlauf!
hs / fub – alp3-19-Bbaum-1 16
8
Unterlauf durch Löschen (3)
delete(12)
11
12
34 5
34 5 10
2
4
6
9
15
15
2
14
11
4
17
14
6 9 10
17
Unterlauf nicht vermeidbar: Entfernen von
Vorgänger oder Nachfolger des Lösch-Schlüssels
führt zu Unterlauf.
hs / fub – alp3-19-Bbaum-1 17
TopTop-DownDown-Löschen mit Unterlauf
delete(14)
11
Innerer Knoten enthält
nur t-1 Schlüssel
34 5
2
4
15
6 9 10
14
Nachbar (.3.5.) besitzt t
Schlüssel => Transfer
17
5
5
10 15
43
43
11 15
2
2
4
6 9 10
14
4
6 9
11 14
17
17
hs / fub – alp3-19-Bbaum-1 18
9
TopTop-DownDown-Löschen mit Unterlauf und Höhenreduktion
delete(14)
11
43
1 2
15
4 5 6
14
17
3
11
15
4
1 2
4 5 6
14
17
Transfer + Löschen
hs / fub – alp3-19-Bbaum-1 19
Löschen in BB-Baum schematisch:
schematisch:
Löschen
x in Blatt mit k > t Schlüsseln: Invarianten
bleiben alle erfüllt.
a
xyz
Löschen
x in innerem Konten: Ersetze x durch
Vorgänger (immer in einem Blatt b), wenn b mehr
als t-1 Elemente hat, sonst durch den Nachfolger.
s
hier: Nachfolger
...
...
r
txy
hs / fub – alp3-19-Bbaum-1 20
10
Löschen in BB-Baum schematisch:
schematisch:
Unterlauf,
Transfer von Nachbar
Löschen r in Blatt b mit t-1 Schlüsseln,
Nachbar enthält k > t-1 Schlüssel
s
Transfer:
txy
r
Nachbar(b) -> Elternknoten(b) -> b
Keine Änderung der Anzahl Knoten.
hs / fub – alp3-19-Bbaum-1 21
Löschen B-Baum schematisch
Unterlauf,
Verschmelzen
Löschen
von r in Blatt b führt zu
Unterlauf, der nicht
durch Transfer zu
beheben ist.
Top-Down-Löschen:
..
q
q s..
Vorgänger hat mindestens
t Elemente (Sonderfall:
r
Vorgänger ist Wurzel):
b mit Nachbarn verschmelzen.
Teilungsschlüssel zwischen b
und Nachbarn in verschmolzenen Knoten
Höhe ändert sich nicht.
t
hs / fub – alp3-19-Bbaum-1 22
11
Löschen B-Baum schematisch
Unterlauf,
Verschmelzen, Höhenreduktion
(Top-Down-Löschen)
s
Wurzel enthält t-1 Schlüssel
Linker und rechter Nachfolger
des Trennschlüssels s
haben je t-1 Schlüssel
Kein Transfer möglich
Wurzel mit Nachfolgern
verschmelzen
r
t
…
Löschen im Unterbaum
hs / fub – alp3-19-Bbaum-1 23
Laufzeiteigenschaften
Suche
in einem B-Baum: O(log n)
Einfügen:
Einfügeknoten suchen: O(log n)
Split, Transfer: O(1)
-> O(log n)
Löschen:
Split, Transfer, Verschmelzung je O(1)
-> O(log n)
Warum
sind B-Bäume wichtig?
(2,4) Bäume sind (fast) Rot-Schwarz-Bäume.
Wichtigste Indexstruktur für sehr große Datenmengen.
hs / fub – alp3-19-Bbaum-1 24
12
Herunterladen