280 likes | 400 Views
7.2.3 B-Bäume (2/33). Definition (B-Baum) Ein B-Baum vom Typ ( k , h ), k 1, h 0, ist ein sortierter Schlüsselbaum T = ( W , U , <, Inhalt , P ) mit folgenden Eigenschaften ( w W ):.
E N D
7.2.3 B-Bäume (2/33) • Definition (B-Baum) Ein B-Baum vom Typ (k, h), k1, h 0, ist ein sortierter Schlüsselbaum T = (W,U, <, Inhalt, P)mit folgenden Eigenschaften (wW): Ó AIFB • (i) P(w) = {p(s) | s Inhalt(w)}, und verschiedene Knoten haben keinen Schlüssel gemeinsam: • "w'W, w'w: Inhalt(w) Inhalt(w' ) = Ø • (ii) Alle Blätter haben dieselbe Höhe h:w Blatt H(w) = h
7.2.3 B-Bäume(3/33) (iii) Die Wurzel enthält mindestens einen Schlüssel: I(w0) 1 Ó AIFB • (iv) Außer der Wurzel enthält jeder Knoten mindestens k Schlüssel: ww0I(w) k • (v)Ein Knoten w enthält höchstens 2k Schlüssel: I(w) 2k. • (vi)Für die Anzahl der Söhne eines Knotens w gilt: s(w) = 0 oder s(w) = I(w) +1
7.2.3 B-Bäume (4/33) Aus (iii) und (vi) folgt: Die Wurzel w0 hat niemals genau einen Sohn: • s(w0) 1 Ó AIFB (d.h. : Entweder s(w0) = 0 oder s(w0) 2)
7.2.3 B-Bäume (5/33) • Eigenschaften von B-Bäumen • Aus den Definitionen folgt für B-Bäume (wW): ww0 : s(w) = 0 oder k+1 s(w) 2k+1 w=w0 : s(w) = 0 oder 2 s(w0) 2k+1 Ó AIFB • Format von B-Baum-Knoten: • (Schlüssel in den Knoten seien sequentiell aufsteigend angeordnet)
7.2.3 B-Bäume (6/33) • w: Ó AIFB pw,0 Sw,1w,1 pw,1Sw,2w,2pw,2 ... S w,Iw,Ipw,I ... • sw,i Schlüssel, I = I(w) = #Inhalt(w) • pw,i = p(sw,i) (Satz-Information) • pw,i = Zeiger auf einen Sohn des Knotens.
7.2.3 B-Bäume (11/33) • class B_BAUM [SCHLÜSSELTYP <- COMPARABLE, SATZTYP] • feature • k : INTEGER wurzel : B_BAUM_KNOTEN • make (k0 : INTEGER; key : SCHLÜSSELTYP; info SATZTYP) is requirek0 1 and key Ø and info Ødok := k0 !!wurzel.make (k, key, info)ensurekey wurzel.s and info wurzel.pend … • invariantwurzel_hat_keinen_vater: wurzel.ist_wurzel • end – – class B_BAUM Ó AIFB
7.2.3 B-Bäume (12/33) • Höhe eines B-Baums vom Typ (k,h) in Abhängigkeit von der Anzahl Schlüssel in S (#S): • Obere Schranke für die Höhe h: Alle Knoten haben eine Mindestbelegung mit 1 Schlüssel (Wurzel) bzw. k Schlüsseln: Ó AIFB Höhe #Knoten #Söhne(proKnoten) h=0 1 2 h=1 2 k1 h=2 2(k1) k1 h=3 ... ... 1 k k .... .... k k1 k k k1 k
#S1 #S1 2 2 7.2.3 B-Bäume (13/33) • 1 + 2k + 2k(k + 1) + 2k(k + 1)2 + ... + 2k(k + 1)h -1#S • 1 + 2k (1 + (k + 1) + (k + 1)2 + ... + (k + 1)h -1) #S • 1 + 2k #S • 1 + 2((k + 1)h- 1) #S • (k + 1)h • h logk+1 • h ist ganze Zahl, also h logk+1 für #S 1. Ó AIFB
7.2.3 B-Bäume (14/33) • Untere Schrankefür die Höhe h: Alle Knoten haben eine Höchstbelegung mit 2k Schlüsseln: Ó AIFB Höhe #Knoten #Söhne h=0 1 2k1 h=1 2k1 2k1 h=2 (2k1)2 2k1 h=3 ... ... 2k .... 2k 2k1 2k .... .... 2k 2k1 2k 2k 2k1 2k
7.2.3 B-Bäume (15/33) • 2k + 2k(2k + 1) + 2k(2k + 1)2 + ... + 2k(2k + 1)h#S • 2k(1 +(2k + 1) + (2k + 1)2 + ... + (2k + 1)h ) #S • 2k #S • (2k + 1)h+1 #S + 1 • h log2k+1(#S + 1) - 1 • h ist eine ganze Zahl, also hlog2k+1(#S + 1) - 1. Ó AIFB
(2)#S = 24, k = 2, 1h 2log2k+1(#S + 1) - 1 h logk+1 7.2.3 B-Bäume (16/33) • Beispiele zur Höhe von B-Bäumen: (1)#S = 17, k = 2, 1 h 2 log2k+1(#S + 1) - 1 h logk+1 Ó AIFB • log5(18) = 1.80 (Abschätzung: 51 = 5, 52 = 25) log3(9) = 2 1 h 2 • log5(25) = 2 log3(12.5) = 2.30 1 h 2
7.2.3 B-Bäume (17/33) (3)Block: 2KB Schlüssel + Zeiger p + Zeiger p ca. 15-16 B 2k 128, k 64 h = 0: 1 - 128 Schlüssel h = 1: 129 - 16.640 Schlüssel h = 2: 8449 - 2.146.688 Schlüssel (!) Ó AIFB
7.2.3 B-Bäume (18/33) • B-Baum Algorithmen • Suche den Schlüssel s im B-Baum T: • SUCHE(s, T, w) • Vorgehensweise klar • Suche endet mit einem Knoten w = w(s), für den gilt: • s Inhalt(w) oder • w ist Blatt, das s enthalten müßte. • END SUCHE Ó AIFB
7.2.3 B-Bäume (19/33) • Beispiel: Suche nach s=10 Ó AIFB 7 • 4 • 9 • 12 • 1 • 3 • 6 • 8 • 10 • 11 • 13 • 14 •
7.2.3 B-Bäume (20/33) • Einfügen eines Schlüssels s in einen B-Baum T INSERT (s, T,w ) : • -- Schlüssel s in Baum T einfügen • Suche(s,T,w); • WENN s in w enthalten ist, DANN • Fehler • ANDERNFALLS • INSERT-IN-NODE ((nil, s, nil), w) • -- s ist in diesem Fall immer ein Blatt • END INSERT Ó AIFB
7.2.3 B-Bäume (21/33) INSERT-IN-NODE ((l, s, r), w) : • -- Schüssel s mit Zeiger auf linken und -- rechten Sohn (l, r) in Knoten w -- einfügen • FÜGE s in w sortiert ein • Wenn I(w) > 2k DANN -- Überlauf • SPLIT (w)END INSERT-IN-NODE Ó AIFB
7.2.3 B-Bäume (22/33) SPLIT (w) : • -- Spaltet den übervollen Knoten w in • -- zwei Knoten auf Erzeuge Knoten w‘; in w verbleiben die ersten k Schlüssel,w‘ wird mit den letzten k Schlüsseln von w gefüllt.sei s’ der (k+1)-te Schlüssel WENN Vater v von w nicht existiert (w ist also die Wurzel), DANN • v := neu erzeugte WurzelINSERT-IN-Node ((w, s’, w’), v) END SPLIT Ó AIFB
7.2.3 B-Bäume (23/33) • Vor Split w • Nach Split: ... 8 17 61 ... Ó AIFB v 17 w ... 8 61 ... w´
7.2.3 B-Bäume (24/33) • Einfügen der Schlüssel 0, 7, 22, 1, 20, 11, 3 S=0 Ó AIFB 0 S=7 0 7 S=22 split Neue Wurzel 7 0 22 S=1 S=20 7 0 1 20 22
7.2.3 B-Bäume (25/33) 7 20 Ó AIFB S=11 split 0 1 11 22 7 S=3 split neue Wurzel 1 20 0 3 11 22
7.2.3 B-Bäume (26/33) • Löschen eines Schüssels s aus einem B-Baum T DELETE (s, T) : -- Schlüssel s aus dem Baum T löschen SUCHE (s, T, u); WENN s nicht in u enthalten ist, DANN • Fehler ANDERNFALLS • DELETE-FROM-NODE (s, u) • END DELETE Ó AIFB
7.2.3 B-Bäume (27/33) • DELETE-FROM-NODE (s, u) : • -- Schlüssel s aus Knoten u löschen • WENN u kein Blatt ist, DANN Ersetze s in u durch den kleinsten Schl. s0 aus dem rechten Teilbaum von s. Sei b das Blatt, aus dem s0 entnommen wurde. • DELETE-FROM-NODE (s0, b) ANDERNFALLS • Entferne s aus u • UNTERLAUFBEHANDLUNG (u) • END DELETE–FROM-NODE Ó AIFB
7.2.3 B-Bäume (28/33) UNTERLAUFBEHANDLUNG (u) : -- Ausgleich oder Zusammenlegung mit -- einem Bruderknoten, falls u die erlaubte -- Schüsselzahl unterschreitet WENN u nicht Wurzel von T ist UND I(u) < k (Unterlauf), Ó AIFB • DANN • Sei w der Bruderknoten von u, s‘ der zu u und w gehörende Schlüssel in deren Vaterknoten vund S’ die Schlüsselliste {Schlüssel aus u, s‘, Schlüssel aus w} • WENN I(u) + I(w) 2k DANN • Verteile die Schlüssel aus S‘ gleichmäßig auf u und w;ersetze s‘ durch den mittleren Schlüssel aus S’ • ANDERNFALLS • Fasse S’ in einem Knoten zusammen; entferne s‘ aus v; • UNTERLAUFBEHANDLUNG (v) • END UNTERLAUFBEHANDLUNG
7.2.3 B-Bäume (29/33) Vor Zusammenfassen: v ... 1 17 61 ... Ó AIFB s u ... 2 4 18 19 ... w Nach Zusammenfassen: v ... 1 61 ... u ... 2 4 17 18 19 ...
7.2.3 B-Bäume (30/33) Beispiel: Löschen in Blattern (Schlüssel17.22)DELETE (s,T) 7 T Ó AIFB 1 20 0 3 5 11 17 22 7 S=17 1 20 0 3 5 11 22
7.2.3 B-Bäume (31/33) Beispiel: Löschen in Blattern (Schlüssel17.22)DELETE (s,T) 7 S=22, Zwischenschritt Ó AIFB 1 0 3 5 11 20 7 Ergebnis 0 3 5 11 20
7.2.3 B-Bäume (32/33) • Beispiel:Löschen aus inneren Knoten (Schlüssel 1, 20) DELETE(s,T) Ó AIFB T 7 1 20 0 3 5 11 17 22 7 S=1 3 20 0 5 11 17 22
7.2.3 B-Bäume (33/33) Beispiel:Löschen aus inneren Knoten (Schlüssel 1, 20) DELETE(s,T) 7 S=20, Zwischenschritt Ó AIFB 3 22 0 5 11 20 7 Ergebnis 3 17 0 5 11 22