Löschen in B-Bäumen Die B-Baum-Eigenschaft muss wieder hergestellt werden, wenn die Anzahl der Elemente in einem Knoten kleiner als k wird. Durch Ausgleich.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

8. Termin Teil B: Wiederholung Begriffe Baum
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Christian Scheideler SS 2009
Punkt-in-Polygon-Verfahren III (R/R+-Baum)
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Eine dynamische Menge, die diese Operationen unterstützt,
Vorlesung Programmieren II
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Christian Schindelhauer
7.2 B-Bäume / B*-Bäume als Hilfsmittel zur Indexorganisation
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Claudio Moraga; Gisbert Dittrich
Prof. Dr. W. Conen 15. November 2004
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (22 – B-Bäume)
FH-Hof Der B-Baum Richard Göbel. FH-Hof Wahl des Verzweigungsgrad Verzweigungsgrad kann größer als 2 sein v Nachfolger für einen Knoten v-1 Werte in einem.
Der B-Baum Richard Göbel.
B-Bäume.
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
Gewichtsbalancierte Suchbäume
Durchlaufen eines Binärbaumes
Suche in Texten (Stringsuche )
Kapitel 6. Suchverfahren
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Balancierte Bäume Effizienz der Wörterbuchoperationen auf Bäumen hängt direkt von der Baumhöhe ab. Baum mit n Knoten: Mindesthöhe: |_log2 n_|, maximale.
5. Sortier-Algorithmen Vorbemerkungen:
Synonyme: Stapel, Keller, LIFO-Liste usw.
Bäume • Kernidee: Speicherung von Daten in einer Baumstruktur
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Effizienz: Indexstrukturen
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Sortieren vorsortierter Daten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
WS03/041 Binomial Queues Prof. Dr. S. Albers Prof.Dr.Th Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
Kap. 6.2 Binäre B-Bäume Ullmann: (2, 3) - Bäume
Minimum Spanning Tree: MST
7.1 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte.
Einführung in die Programmierung
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Übung Datenbanksysteme II Index- strukturen
Algorithmen und Datenstrukturen Übungsmodul 11
Binärbäume.
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
 Präsentation transkript:

Löschen in B-Bäumen Die B-Baum-Eigenschaft muss wieder hergestellt werden, wenn die Anzahl der Elemente in einem Knoten kleiner als k wird. Durch Ausgleich mit Elementen aus einer Nachbarseite oder durch Mischen (Konkatenation) mit einer Nachbarseite wird dieses Problem gelöst. Maßnahme 1: Ausgleich durch Verschieben von Schlüsseln Voraussetzung: Nachbarseite P‘ hat mehr als k Elemente ( Seite P hat k-1 Elemente)

Ausgleich durch Verschieben von Schlüsseln . . . Kn-1 * Kn * Kn + 1 . . . P‘ P * K1‘ * . . . * Kb‘ * P1‘ P0‘ * K1 * . . . * Kk-1 * P1 P0 Pk-1 Pb‘ Ausgleich . . . Kn-1 * Kb‘ * Kn + 1 . . . P‘ P * K1‘ * . . . * Kb-1‘ * * Kn * K1 * . . . * Kk-1 * P0‘ P1‘ Pb-1‘ Pk - 1 Pb‘ P0 P1

Maßnahme 2: Mischen von Seiten . . . Kn-1 * Kn * Kn + 1 . . . P‘ P * K1‘ * . . . * Kk‘ * * K1 * . . . * Kk-1 * Pk-1 P0‘ P1‘ Pk‘ P0 P1 Mischen . . . Kn - 1 * Kn + 1 . . . P‘ * K1‘ * . . . * Kk‘ * Kn * K1 * . . * Kk - 1 * Pk-1 P0‘ P1‘ Pk‘ P0 P1

Löschalgorithmus 1) Löschen in Blattseite Suche x in Seite P Entferne x in P und wenn a) #Einträge  k in P : tue nichts b) #E = k - 1 in P und #E > k in P‘: gleiche Unterlauf in P über P‘ aus. c) #E = k - 1 in P und #E = k in P‘ : mische P und P‘ 2) Löschen in innerer Seite Suche x Ersetze x = Ki durch kleinsten Schlüssel y in B ( Pi) oder größten Schlüssel y in B(Pi - 1) (nächst größerer oder nächst kleinerer Schlüssel im Baum) Entferne y im Blatt P Behandle P wie unter 1

Kostenanalyse für das Löschen Günstigster Fall: fmin = h ; wmin = 1 Obere Schranke für durchschnittliche Löschkosten drei Anteile: 1) Löschen, 2) Ausgleich, 3) anteilige Mischkosten 1k favg  f 1 + f2 + f3 < h + 1 + 1k 1k wavg  w1 + w2 + w3 < 2 + 2 + = 4 +

B* - Bäume Hauptunterschied zu B-Baum: In inneren Knoten wird nur die Wegweiser-Funktion ausgenutzt. Innere Knoten führen nur (Ki, Pi) als Einträge. Information ( Ki, Di) wird in den Blattknoten abgelegt. Für einige Ki ergibt sich eine redundante Speicherung. Die inneren Knoten bilden also einen Index, der einen schnellen direkten Zugriff zu den Schlüsseln gestattet. Der Verzweigungsgrad erhöht sich beträchtlich, was wiederum die Höhe des Baumes reduziert. Die Blätter enthalten alle Schlüssel mit ihren zugehörigen Daten in Sortierreihenfolge. Durch Verkettung aller Blattknoten lässt sich eine effiziente sequentielle Verarbeitung erreichen, die beim B-Baum einen umständlichen Durchlauf in symmetrischer Ordnung erforderte.

B*- Baum ist die für den praktischen Einsatz wichtigste Variante des B-Baums. Definition: Seien k, k* und h* ganze Zahlen, h*  0 , k, k* > 0. Ein B*-Baum B der Klasse  ( k, k* , h* ) ist entweder ein leerer Baum oder ein geordneter Baum für den gilt: 1) Jeder Pfad von der Wurzel zu einem Blatt besitzt die gleiche Länge h* . 2) Jeder Knoten außer der Wurzel und den Blättern hat mindestens k+1 Söhne, die Wurzel mindestens 2 Söhne, außer wenn sie ein Blatt ist. 3) Jeder innere Knoten hat höchstens 2k+1 Söhne. 4) Jeder Blattknoten mit Ausnahme der Wurzel als Blatt hat mindestens k* und höchstens 2k* Einträge. Bemerkung: Der so definierte Baum heißt in der Literatur gelegentlich auch B+ - Baum.

Unterscheidung von zwei Knotenformaten: B* - Bäume (2) Unterscheidung von zwei Knotenformaten: L innerer Knoten k  b  2k M * K1 * . . . Kb * freier Platz P0 P1 Pb Blattknoten k*  m  2k* M * * K1 D1 K2 D2 . . . Km Dm freier Platz PP PN Feld M enthalte die Kennung des Seitentyps sowie die Zahl der aktuellen Einträge.

Da die Seiten eine feste Länge L besitzen, lässt sich aufgrund der obigen Formate k und k* bestimmen: L - l M - l P L = l M + l P + 2 . k ( l K + l P) ; k = 2 * ( l K + l P ) L - l M - 2 l P L = lM + 2 . lP + 2 . k* ( lK + lD ); k* = 2 * ( l K + l D ) Höhe des B*-Baumes n 2k* n 2k* l + log2k + 1  h*  2 + logk + 1 für h*  2

B* - Bäume (3) B*-Baum lässt sich auffassen als eine gekettete sequentielle Datei von Blättern, die einen Indexteil besitzt, der selbst ein B-Baum ist. Im Indexteil werden insbesondere beim Splitt-Vorgang die Operationen des B-Baums eingesetzt. Indexteil: B-Baum von Schlüsseln . . . sequentielle sortierte Datei der Blätter

Grundoperationen beim B*-Baum 1) Direkte Suche: Da alle Schlüssel in den Blättern, kostet jede direkte Suche h* Zugriffe. h* ist jedoch im Mittel kleiner als h in B-Bäumen. Da favg beim B-Baum mit h abgeschätzt werden kann, erhält man also durch B*-Baum eine effizientere Lösung. 2) Sequentielle Suche: Erfolgt nach Aufsuchen des Linksaußen der Struktur unter Ausnutzung der Verkettung der Blattseiten. Es sind zwar ggf. mehr Blätter als beim B-Baum zu verarbeiten, doch da nur h*-1 innere Knoten aufzusuchen sind, wird die sequentielle Suche ebenfalls effizienter ablaufen.

Grundoperationen beim B*-Baum (2) 3) Einfügen: Von Durchführung und Leistungsverhalten dem Einfügen in einem B-Baum sehr ähnlich. Bei inneren Knoten wird die Spaltung analog zum B-Baum durchgeführt. Beim Split-Vorgang einer Blattseite muss gewährleistet sein, dass jeweils die höchsten Schlüssel einer Seite als Wegweiser in den Vaterknoten kopiert werden. 4) Löschen: Datenelemente werden immer von einem Blatt entfernt (keine komplexe Fallunterscheidung wie beim B-Baum). Weiterhin muss beim Löschen eines Schlüssels aus einem Blatt dieser Schlüssel nicht aus dem Indexteil entfernt werden; er behält seine Funktion als Wegweiser.

Präfix - Suffix - Komprimierung ermöglicht beim B*-Baum weit höhere Anzahl von Einträgen pro Seite (Lauflängenkomprimierung) Gespeichert werden nur solche Zeichen eines Schlüssels, die sich vom Vorgänger und Nachfolger unterscheiden.

Allgemeine Zusammenhänge: B-Baum B*-Baum nmin 2 . ( k + 1 ) h - 1 -1 2k* . ( k + 1 ) h* - 2 nmax ( 2k + 1 ) h - 1 2k* . ( 2k + 1 ) h* - 1 B - Baum Datensätze separat (k=85) Datensätze eingebettet (k=12) h nmin nmax nmin nmax 1 1 170 1 24 2 171 29.240 25 624 3 14.791 5.000.210 337 15.624 4 1.272.112 855.036.083 4.393 390.624

B* - Baum Datensätze separat Datensätze eingebettet ( k = 127, k* = 127 ) ( k = 12, k* = 127 ) h nmin nmax nmin nmax 1 1 254 1 24 2 254 64.770 24 6.120 3 32.512 16.516.350 3.072 1.560.600 4 4.161.536 4.211.669.268 393.216 397.953.001

Konzept des Mehrwegbaumes: Aufbau sehr breiter Bäume von geringer Höhe Bezugsgröße: Seite als Transporteinheit zum Externspeicher Seiten werden immer größer, d. h. , das Fan-out wächst weiter. B- und B*-Baum gewährleisten eine balancierte Struktur unabhängig von der Schlüsselmenge unabhängig von ihrer Einfüge-Reihenfolge Standard-Zugriffspfadstruktur in DBS: B*-Baum

Wichtigste Unterschiede des B*-Baums zum B-Baum Strikte Trennung zwischen Datenteil und Indexteil. Datenelemente stehen nur in den Blättern des B*-Baums. Schlüssel innerer Knoten haben nur Wegweiserfunktion. Sie können auch durch beliebige Trenner ersetzt oder durch Komprimierungs-Algorithmen verkürzt werden. Kürzere Schlüssel oder Trenner in den inneren Knoten erhöhen den Verzweigungsgrad des Baums und verringern damit seine Höhe. Die redundant gespeicherten Schlüssel erhöhen den Speicherplatz-Bedarf nur geringfügig ( < 1 % ) Der Löschalgorithmus ist einfacher Verkettung der Blattseiten ergibt schnellere sequentielle Verarbeitung

Verbesserung der Baumbreite durch Schlüsselkomprimierung Präfix-Suffix-Komprimierung sehr effektiv Schlüssellängen von 20 - 40 Bytes werden im Mittel auf 1.3 bis 1.8 Bytes reduziert. Gibt es bessere Strukturen für die direkte Suche im Hauptspeicher und auf Externspeicher? AVL - Baum: O(log2 n) Vergleiche B*-Baum: E / A - Kosten O(logk* (n)), vielfach 3 Zugriffe Bisher: Allokation des Satzes als physikalischer Nachbar des „Vorgängers“ oder beliebige Allokation und Verknüpfung durch Zeiger Suche über Schlüsselvergleich

Gestreute Speicherungsstrukturen (Hashing) (Schlüsseltransformation, Adressberechnungs-Verfahren, key-to-address transformation, scatter-storage technique usw.) Berechnung der Satzadresse SA( i ) aus Satzschlüssel Ki ==> Schlüsseltransformation Speicherung des Satzes bei SA( i ) Ziele Schnelle direkte Suche: Schlüsseltransformation Gleichverteilung der Sätze (möglichst wenig Synonyme)

Definition: S sei Menge aller möglichen Schlüsselwerte eines Satztyps (Schlüsselraum) und A = { 0, 1, ... , m - 1} das Intervall der ganzen Zahlen von 0 bis m - 1. Eine Hash-Funktion h: S  A ordnet dann jedem möglichen Schlüssel s  S des Satztyps eine Zahl aus A als Adresse in einer Hash-Tabelle zu.

Abstrakte ADT-Definition Datentyp HASHTAB Basistyp { Schlüssel } , { Daten } Operationen: ERZEUGEN:  HASHTAB ; EINFÜGEN: HASHTAB x { Schlüssel } x {Daten}  HASHTAB ; LÖSCHEN: HASHTAB x { Schlüssel }  HASHTAB ; SUCHE: HASHTAB x { Schlüssel }  {Daten}  {error} Axiome  HT  HASHTAB,  K , K‘  {Schlüssel},  D  {Daten} : SUCHE ( ERZEUGEN, K) = error ; LÖSCHEN ( ERZEUGEN, K ) = ERZEUGEN; LÖSCHEN ( EINFÜGEN ( HT, K, D), K‘ ) = IF K = K‘ THEN HT ELSE EINFÜGEN ( LÖSCHEN ( HT, K‘ ) , K, D ) ; SUCHE ( EINFÜGEN ( HT, K, D ), K‘ ) = IF K = K‘ THEN D ELSE SUCHE ( HT, K‘ ) ;

Direkte Adressierung Einfachste Technik zur Umsetzung eines Satzschlüssels h ist eine injektive Funktion. Für jeden Schlüssel aus S muss Speicherplatz bereitgehalten werden, d. h. die Menge aller möglichen Schlüssel ist bekannt. Parameter l = Schlüssellänge, b = Basis, m = #Speicherplätze np = #S =b‘ mögliche Schlüssel na = #K = # vorhandene Schlüssel

Abbildung zur direkten Adressierung h na  np = #S m = #A = np

Wenn K bekannt ist und K fest bleibt, kann leicht eine injektive Abbildung h : K  { 0, ... , m - 1 } z. B. wie folgt berechnet werden: Die Schlüssel in K werden lexikographisch geordnet und auf ihre Ordnungsnummern abgebildet oder der Wert eines Schlüssels Ki oder eine einfache ordnungserhaltende Transformation dieses Wertes ( Division / Multiplikation mit einer Konstanten ) ergibt die Adresse: Ai = h ( Ki ) = K Perfektes Hashing

Hashing Annahmen: Die Menge der möglichen Schlüssel ist meist sehr viel größer als die Menge der verfügbaren Speicheradressen h ist nicht injektiv S h A m = #A  na na  np = #S

Der für das Hashing verfügbare Speicherplatz heißt Hash-Tabelle Definitionen: Zwei Schlüssel Ki und Kj  K kollidieren (bzgl. einer Hash-Funktion h ) gdw. h (Ki ) = h (Kj). Tritt für Ki und Kj eine Kollision auf, so heißen diese Schlüssel Synonyme. Die Menge der Synonyme bezüglich einer Speicheradresse Ai heißt Kollisionsklasse. Für die Hash-Funktion h gelten folgende Forderungen: Sie soll sich einfach und effizient berechnen lassen Sie soll eine möglichst gleichmäßige Belegung von HT erzeugen. Sie soll möglichst wenige Kollisionen verursachen.

Leistungsfähigkeit einer Hash-Funktion: Einflussgrößen und Parameter Belegungsgrad der Hash-Tabelle HT Anzahl der Sätze, die sich auf einer Adresse speichern lassen, ohne eine Kollision auszulösen (Bucket-Kapazität) Technik zur Kollisionsauflösung Verteilung der aktuell benutzten Schlüssel ggf. Reihenfolge der Speicherung der Sätze (auf Hausadresse zuerst !) Eine gute Hash-Funktion soll auch ungleich verteilte Schlüssel möglichst gleichmäßig auf die Adressen von HT verteilen.