1 / 28

7.2.3 B-Bäume (2/33)

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 ):.

benard
Download Presentation

7.2.3 B-Bäume (2/33)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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): Ó 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

  2. 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: ww0I(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

  3. 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)

  4. 7.2.3 B-Bäume (5/33) • Eigenschaften von B-Bäumen • Aus den Definitionen folgt für B-Bäume (wW): ww0 : 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)

  5. 7.2.3 B-Bäume (6/33) • w: Ó AIFB pw,0 Sw,1w,1 pw,1Sw,2w,2pw,2 ... S w,Iw,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.

  6. 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. 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 k1 h=2 2(k1) k1 h=3 ... ... 1 k k .... .... k k1 k k k1 k

  8. #S1 #S1 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

  9. 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 2k1 h=1 2k1 2k1 h=2 (2k1)2 2k1 h=3 ... ... 2k .... 2k 2k1 2k .... .... 2k 2k1 2k 2k 2k1 2k

  10. 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 hlog2k+1(#S + 1)  - 1. Ó AIFB

  11. (2)#S = 24, k = 2, 1h 2log2k+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

  12. 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

  13. 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

  14. 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 •

  15. 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

  16. 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

  17. 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

  18. 7.2.3 B-Bäume (23/33) • Vor Split w • Nach Split: ... 8 17 61 ... Ó AIFB v 17 w ... 8 61 ... w´

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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 ...

  25. 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

  26. 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

  27. 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

  28. 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

More Related