2.5 Bäume 2.5.1 Binäre Suchbäume 2.5.2 Optimale Suchbäume 2.5.3 Balancierte Bäume 2.5.4 Skip-Listen 2.5.5 Union-Find-Strukturen 1 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Balancierte Bäume • Nachteil bei normalen Suchbäumen: Worst-case Aufwand ist O(n) • Tritt bei degenerierten Bäumen auf • Kann durch Balancierung verhindert werden • Problem: Stelle Balance in O(log n) wieder her 2 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Balancierte Bäume • Gewichtsbalance: Für jeden Knoten unterscheidet sich die Anzahl der Knoten im linken und rechten Teilbaum um maximal eins. • Höhenbalance: Für jeden Knoten unterscheidet sich die Höhe des linken und rechten Teilbaums um maximal eins. 3 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Balancierte Bäume • Zur Erinnerung: – Maximale Zahl von Knoten in einem Baum der Höhe h ist O(2h) – Minimale Zahl von Knoten in einem Baum der Höhe h ist ΩΩ(h) – Minimale Zahl von Knoten in einem balancierten Baum der Höhe h ist ΩΩ(2h/2) 4 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Balancierte Bäume • Zur Erinnerung: – Minimale Höhe eines Baums mit n Knoten ist ΩΩ(log n) – Maximale Höhe eines Baums mit n Knoten ist O(n) – Maximale Höhe eines balancierten Baums mit n Knoten ist O(2×log n)=O(log n) 5 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 2.5 Bäume 2.5.1 Binäre Suchbäume 2.5.2 Optimale Suchbäume 2.5.3 Balancierte Bäume 2.5.3.1 AVL-Bäume 2.5.3.2 Rot-Schwarz-Bäume 2.5.3.3 B-Bäume 2.5.4 Skip-Listen 2.5.5 Union-Find-Strukturen 6 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume • Werden wie normale binäre Suchbäume behandelt • Jeder Knoten speichert sein Ungleichgewicht (+1,0,−1) • Nach Insert() oder Delete() Wiederherstellung der Balance durch Rotation 7 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume h h 8 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume h h 9 h+1 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Einfache Rotation h 10 h h+1 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Einfache Rotation h 11 h h+1 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Einfache Rotation h 12 h h+1 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume h h 13 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume h h+1 14 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume h h h 15 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h h 16 h h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h h 17 h h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h h h 18 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h h h 19 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h h h 20 h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume Doppelte Rotation h 21 h h h Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer AVL-Bäume • Rotationen müssen ggf. nach oben propagiert werden • Im schlechtesten Fall O(log n) Rotationen bei Delete() • Nur praktikabel, wenn gesamte Datenstruktur im Hauptspeicher 22 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 2.5 Bäume 2.5.1 Binäre Suchbäume 2.5.2 Optimale Suchbäume 2.5.3 Balancierte Bäume 2.5.3.1 AVL-Bäume 2.5.3.2 Rot-Schwarz-Bäume 2.5.3.3 B-Bäume 2.5.4 Skip-Listen 2.5.5 Union-Find-Strukturen 23 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Binärer Suchbaum, jeder Knoten hat zwei Söhne oder keinen • Rote und schwarze Knoten • Re-Balancing durch Rotationen und Umfärben 24 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Konsistenzregeln 1. Jeder Knoten ist rot oder schwarz 2. Die Wurzel ist schwarz 3. Die Blätter sind schwarz 4. Die Söhne eines roten Knotens sind schwarz. 5. Alle Pfade von einem Knoten zu den nachfolgenden Blättern haben gleich viele schwarze Knoten 25 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 7 2 8 1 5 4 9 6 Blätter werden im Folgenden nicht mehr dargestellt. 26 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Eigenschaften – Maximales Pfadlängenverhältnis 2:1 – Pfadlängen Θ(log n) 27 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Lemma: Die Höhe eines Rot-Schwarz-Baums mit n inneren Knoten ist höchstens 2×ld(n+1) 28 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Die Zahl der schwarzen Knoten auf einem (dann jeden) Pfad von einem Knoten x (ausschließlich) bis zu einem Blatt (einschließlich) sei bh(x) 29 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 7 bh( 2 ) = 2 1 bh( 5 ) = 1 4 30 8 9 6 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Der Baum unter einem Knoten x enthält mindestens 2bh(x)−1 innere Knoten I.A. x ist ein Blatt → 2bh(x)−1=20−1=0 I.V. Die Beh. gelte für alle y mit height(y) < height(x) I.S. x sei ein innerer Knoten mit Söhnen x1,x2 ➡ bh(x1), bh(x2) ≥ bh(x)−1 ➡ der Baum unter x enthält mindestens (2bh(x)−1−1)+(2bh(x)−1−1)+1 = 2bh(x)−1 innere Knoten 31 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Es sei h = height(root) die Höhe des Baumes – Mindestens die Hälfte der Knoten auf einem Pfad von der Wurzel zu einem Blatt müssen schwarz sein. ➡ bh(root) ≥ h ∕ 2 ➡ n ≥ 2h/2−1 ➡ h ≤ 2×ld(n+1) 32 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume • Insert(), Delete() – Wie bei normalen binären Suchbäumen mit anschließender Wiederherstellung der Konsistenzbedingungen – Insert() → drei verschiedene Fälle – Delete() → vier verschiedene Fälle – Pseudo-Code: siehe Cormen et al. 33 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() • Jeder eingefügte Knoten wird zunächst rot gefärbt • Bei Wiederherstellung durch Umfärben oder Rotation kann genau eine weitere Konsistenzverletzung auftreten. • Propagiere Modifikation nach oben. 34 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() • Mögliche Konsistenzverletzungen – Neuer Knoten ist Wurzel – Neuer Knoten ist Nachfolger eines roten Knotens • Fallunterscheidung nach der Farbe des Onkels • Konsistenzregeln 1. 2. 3. 4. 5. 35 Jeder Knoten ist rot oder schwarz. Die Wurzel ist schwarz. Die Blätter sind schwarz. Die Söhne eines roten Knotens sind schwarz. Alle Pfade von einem Knoten zu den nachfolgenden Blättern haben gleich viele schwarze Knoten. Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Großvater Vater X Onkel Bruder Neffen 36 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() 7 2 8 1 5 4 37 9 6 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume Insert – Scheme 0 Onkel up Rot Vorgänger schwarz à nichts zu tun Schwarz 1 umfärben Innen 2 Rotation 38 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Außen 3 Rotation & Umfärben Rot-Schwarz-Bäume: Insert() Einfügen zunächst wie bei normalen binären Suchbäumen 7 2 8 1 5 4 9 6 3 39 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 1: Der Onkel ist rot → umfärben und weiter mit Großvater 7 2 8 1 5 4 9 6 3 40 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 1: Der Onkel ist rot → umfärben und weiter mit Großvater 7 2 8 1 5 4 9 6 3 41 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 1: Der Onkel ist rot → umfärben und weiter mit Großvater 7 2 8 1 5 4 9 6 3 42 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 1: Der Onkel ist rot → umfärben und weiter mit Großvater 7 7 2 8 1 5 4 2 9 43 1 5 6 3 8 4 9 6 3 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() 7 2 8 1 5 4 9 6 3 44 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 2 8 1 5 4 9 6 3 45 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 2 8 1 5 4 9 6 3 46 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 2 1 8 5 4 6 9 3 47 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 2 1 8 5 4 6 9 3 48 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 5 2 1 8 6 9 4 3 49 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 5 2 1 8 6 9 4 3 50 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 2: Der Onkel ist schwarz und ist ein innerer Sohn → Rotation nach außen und weiter mit äußeren Sohn (Fall 3) 7 7 2 8 1 5 4 5 9 6 3 51 2 1 8 6 4 3 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 9 Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 7 5 2 1 8 6 9 4 3 52 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 7 5 2 1 8 6 9 4 3 53 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 5 2 1 7 6 8 4 3 54 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 9 Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 5 2 1 7 6 8 4 3 55 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 9 Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 5 2 1 7 4 6 8 3 56 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 9 Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 5 2 1 7 4 6 8 3 57 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 9 Rot-Schwarz-Bäume: Insert() Fall 3: Der Onkel ist schwarz und ist ein äußerer Sohn → Rotation nach innen und umfärben 7 5 2 1 5 8 6 4 2 9 1 7 4 3 3 58 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 6 8 9 Fallunterscheidung Insert() 1. Onkel ist rot – Umfärben, Rekursion nach oben 2. Sohn < Vater > Großvater oder Sohn > Vater < Großvater – Rotation, weiter mit Fall 3 3. Sohn < Vater < Großvater oder Sohn > Vater > Großvater – Rotation, Umfärben, Fertig 59 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Aufwand Insert() • Suchen der Einfügestelle O(log n) • Einfügen O(1) • Konsistenzwiederherstellung – Umfärbe-Schritte O(log n) (Schritt vom Enkel zum Großvater) – Rotationen O(1) (maximal zwei) • Insgesamt: O(log n) 60 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Wie bei normalen binären Suchbäumen wird der Knoten entweder direkt gelöscht oder sein Successor wird gelöscht und der Inhalt wird kopiert. • Konsistenzwiederherstellung – Wenn der Knoten rot war, ist nichts zu tun – Wenn der Knoten schwarz war, gibt es 4 Fälle 61 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Falls der tatsächlich entfernte Knoten schwarz ist, fehlt auf allen Pfaden innerhalb des entsprechenden TeilBaums eine schwarze Marke • Weise diese schwarze Marke dem (einen) Nachfolger des gelöschten Knotens zu. Dadurch wird dieser schwarz-rot oder doppel-schwarz. 62 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) D α B C γ β 63 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) D α Succ( A ) = B C γ β 64 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) D α B C γ β 65 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) α D B C γ β 66 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) D B α C γ β 67 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung Del( A ) B D α C γ β 68 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung B D α C γ β 69 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung B D α C β 70 γ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung B D α C β 71 γ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Erinnerung B D α C β C 72 oder γ C Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() • Umfärben und Rotationen – Erhalte die Zahl schwarzer Marken der Sub-Bäume • Abbruchbedingungen – Ein schwarz-roter Knoten wird schwarz gefärbt – Ein Wurzelknoten wird erreicht (doppel-schwarz kann einfach wegfallen, da die Wurzel auf allen Pfaden liegt) 73 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume – Delete - Scheme Bruder Up 74 0 rot 1 schwarz Rot. und umfärben Neffen beide schwarz 2 innen rot, außen schwarz 3 Umfärben Rot. und umfärben : rot-­‐schwarz à schwarz (nichts weiter zu tun) außen rot 4 Rot. und umfärben Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben B A D C α β γ 75 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben B A D C α β γ 76 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben B D A α 77 C β γ E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben B D A α 78 C β γ E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben D B E A C ε α 79 β γ ζ δ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben D B E A C ε α 80 β γ ζ δ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() Fall 1: Der Bruder ist rot → Rotation nach links und umfärben B D A α D B C β γ E δ ε E A ζ α C β γ ε δ weiter mit Fall 2,3,4: der Bruder ist nicht rot 81 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz → umfärben und Marke nach oben weitergeben (Ende, falls “B” rot war, sonst weiter mit “B”) B A D C α β γ 82 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz → umfärben und Marke nach oben weitergeben (Ende, falls “B” rot war, sonst weiterNun mit “B”) fehlt in diesem Teilbaum auch ein schwarzer Knoten! B A D C α β γ 83 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz → umfärben und Marke nach oben weitergeben (Ende, falls “B” rot war, sonst weiter mit “B”) B A D C α β γ 84 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 2: Der Bruder ist schwarz und dessen Söhne sind beide schwarz → umfärben und Marke nach oben weitergeben (Ende, falls “B” rot war, sonst weiter mit “B”) B B A α D C β γ 85 A E δ ε α ζ D C β γ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer E δ ε ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A D C α β γ 86 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A D C α β γ 87 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A α C β D E γ δ ε 88 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A α C β D E γ δ ε 89 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A C D α β γ E δ ε 90 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B A C D α β γ E δ ε 91 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 3: Bruder ist schwarz, dessen innerer Sohn ist rot und dessen äußerer Sohn ist schwarz → Rotation nach außen und umfärben B B A α A D C β γ E δ ε α C β γ ζ … weiter mit Fall 4 92 D Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer E δ ε ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 93 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 94 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 95 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 96 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 97 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B A D C α β γ 98 E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B D A α 99 C β γ E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B D A α 100 C β γ E δ ε Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ζ Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen D B E A C ε α 101 β γ ζ δ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume: Delete() Fall 4: Der Bruder ist schwarz, dessen äußerer Sohn ist rot → umfärben und Rotation nach innen B D A α D C β γ 102 B E δ ε E A ζ α C β γ Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer ε δ ζ Aufwand Delete() • Suchen des Löschknotens O(log n) • Löschen O(1) • Konsistenzwiederherstellung – Umfärbe-Schritte O(log n) – Rotationen O(1) (maximal drei) • Insgesamt: O(log n) 103 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer 2.5 Bäume 2.5.1 Binäre Suchbäume 2.5.2 Optimale Suchbäume 2.5.3 Balancierte Bäume 2.5.3.1 AVL-Bäume 2.5.3.2 Rot-Schwarz-Bäume 2.5.3.3 B-Bäume 2.5.4 Skip-Listen 2.5.5 Union-Find-Strukturen 104 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume • Alternative Interpretation/Implementierung der Rot-Schwarz-Bäume führt auf 2,4-Bäume • Diese sind ein Spezialfall des allgemeineren Konzepts von B-Bäumen • Vorteil: größere Mengen von Knoten werden zusammengefasst und passen dadurch besser in einen Festplatten-Block • Hysterese: Nicht in jedem Schritt muss rebalanciert werden. 105 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie • Mit zunehmendem Abstand vom Prozessor ... – ... steigt die Speicherkapzität – ... wächst die zugreifbare Blockgröße – ... sinkt die Zugriffsgeschwindigkeit 106 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie • Effiziente Algorithmen ... – ... führen häufige Berechnungen auf kleinen Datenmengen durch (“innere Schleife”) – ... minimieren die Zugriffe auf externe Speicherebenen – ... passen die Größe der Datenstrukturen an die jeweiligen Blockgrößen an 107 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie • Bei der Suche in externen Binärbaumstrukturen hängt die Zugriffszeit im Wesentlichen von der Verteilung der Knoten auf Festplatten-Sektoren ab. • Fasse Teilbäume in Sektoren zusammen 108 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie 109 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie 110 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Speicherhierarchie 111 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Definition : B-Bäume • Jeder Knoten x hat die folgenden Felder – Die Zahl n[x] der aktuell im Knoten gespeicherten Schlüssel (“Füllgrad”) – n[x] Schlüssel key1[x] ≤ ... ≤ keyn[x][x] – n[x]+1 Zeiger auf die Söhne c0[x], c1[x], ... , cn[x][x] – Der Bool-Wert leaf[x] zeigt an, ob x ein Blatt ist 112 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Definition : B-Bäume • Bedingungen – Ist ki ein Schlüssel im Unterbaum mit Wurzel ci[x] so ist k0 ≤ key1[x] ≤ k1 ≤ key2[x] ≤ ... ≤ keyn[x][x] ≤ kn[x] – Alle Blätter haben dieselbe Tiefe h 113 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Definition : B-Bäume • Bedingungen (Fortsetzung) – Es gibt eine feste Zahl t ≥ 2, den minimalen Grad, mit • Jeder Knoten außer der Wurzel enthält mindestens t−1 Schlüssel • Jeder Knoten enthält höchstens 2×t−1 Schlüssel 114 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Definition : B-Bäume • Bedingungen (Fortsetzung, alternativ) – Es gibt eine feste Zahl t ≥ 2, den minimalen Grad, mit • Jeder Knoten außer der Wurzel hat mindestens t Söhne • Jeder Knoten hat höchstens 2×t Söhne 115 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume • Für die Höhe h eines B-Baums mit n Schlüsseln gilt #Knoten Tiefe t 116 t t t t t 0 1 1 ≥2 2 ≥2t 3 ≥2t2 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume • Halte den Wurzelknoten immer im Hauptspeicher (da für jeden Zugriff notwendig) • Erwartete Zugriffe ≈ logt n • Beispiel – 108 Telefonnummern in Deutschland – Blockgröße 512 – maximal 2 Festplattenzugriffe 117 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume • Zusammenhang mit Rot-SchwarzBäumen – Jeder schwarze Knoten absorbiert seine roten Söhne – Minimaler Füllgrad: t = 2 Söhne – Maximaler Füllgrad: 2t = 4 Söhne – (2,4)-Bäume 118 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 119 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 120 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 121 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 122 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 123 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 124 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 125 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 126 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 127 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rot-Schwarz-Bäume 128 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume • Operationen – Search() – Insert() – Delete() • In den meisten Fällen kommen die Operationen ohne Restrukturierung des Baums aus • Sonst: O(1) verallgemeinerte Rotationen 129 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Zugriff auf externen Speicher • DiskRead(x), DiskWrite(x) • x ← pointer to some object DiskRead(x); access/modify the contents of x DiskWrite(x) // only if modified access but don’t modify the contents of x 130 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Create() • Create() x ← AllocateNode() leaf[x] ← true n[x] ← 0 DiskWrite(x) 131 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Search() • SEARCH( x, k ) i←1 while i ≤ n[x] and k > keyi[x] i←i+1 if i ≤ n[x] and k = keyi[x] then return (x,i) if leaf[x] then return NIL else DiskRead( ci−1[x] ) Search( ci−1[x], k ) 132 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Insert() • Bei Binärbäumen wird immer ein neuer Blattknoten eingefügt • Bei B-Bäumen ist kein neuer Knoten nötig, solange der Blattknoten noch nicht voll ist • Steigt die Zahl der Schlüssel über 2×t−1, so wird das Blatt geteilt 133 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Insert() • Naiver Ansatz – Suche das entsprechende Blatt – Split() falls überfüllt – Propagiere nach oben, falls Vaterknoten ebenfalls überläuft – Problem: Auf die Knoten entlang des Pfades wird jeweils zweimal zugegriffen 134 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Insert() • One-Pass Algorithmus – Teile die Knoten entlang des Suchpfades bereits auf dem Hinweg wenn diese schon voll sind – Evtl. unnötige Split-Operationen amortisieren sich durch den schnelleren Average-Case 135 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • SplitChild(x,i) // x : Vaterknoten // i : Index des Sohns // Vorbedingung: ci[x] ist voll 136 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Beispiel t = 4 x ci[x] 137 ... K S ... L M N O P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Beispiel t = 4 x ... K S ... L M N 138 O P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Beispiel t = 4 x ... K S ... O L M N 139 P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Beispiel t = 4 x ci[x] 140 ... K O S ... L M N P Q R ci+1[x] Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Spezialfall: Wurzel L M N O P Q R 141 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Spezialfall: Wurzel Erzeuge zuerst einen leeren Knoten ... L M N O P Q R 142 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Spezialfall: Wurzel Erzeuge zuerst einen leeren Knoten ... dann SplitChild() L M N 143 O P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Spezialfall: Wurzel Erzeuge zuerst einen leeren Knoten ... dann SplitChild() O L M N 144 P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer SplitChild() • Spezialfall: Wurzel • B-Bäume wachsen an der Wurzel O L M N 145 P Q R Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Insert() • Insert(T,k) r ← root[T] if n[r] = 2×t−1 then s ← AllocateNode() root[T] ← s leaf[s] ← false n[s] ← 0 c0[s] ← r SplitChild(s,0) InsertNonFull(s,k) else InsertNonFull(r,k) 146 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer InsertNonfull() • InsertNonFull(x,k) if leaf[x] then find correct position for k and insert DiskWrite(x) else find correct subtree ci[x] DiskRead(ci[x]) if n[ci[x]] = 2×t−1 then SplitChild(x,i) if k > keyi[x] then i←i+1 InsertNonFull(ci[x],k) 147 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Beispiel t=3 G M P X A C D E 148 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(B) G M P X A C D E 149 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(B) G M P X A C D E 150 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(B) G M P X A C D E 151 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(B) G M P X A B C D E 152 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P X A B C D E 153 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P X A B C D E 154 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P X A B C D E 155 J K N O R S T U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P X T A B C D E 156 J K N O R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P T X A B C D E 157 J K N O R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P T X A B C D E 158 J K N O R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(Q) G M P T X A B C D E 159 J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) G M P T X A B C D E 160 J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) G M P T X A B C D E 161 J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) G M P T X A B C D E 162 J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) P G M A B C D E 163 T X J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) P G M A B C D E 164 T X J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) P G M A B C D E 165 T X J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) P G M A B C D E 166 T X J K N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(L) P G M A B C D E 167 J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P G M A B C D E 168 J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P G M A B C D E 169 J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P G M T X C A B 170 D E J K L N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P C G M A B 171 D E J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P C G M A B 172 D E J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Beispiel • Insert(F) P C G M A B 173 D E F J K L T X N O Q R S U V Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Y Z Delete() • Unkritisch für Blattknoten mit hinreichendem Füllgrad (häufigster Fall) • Bei Unterlauf müssen Knoten verschmolzen werden • Kann/muss nach oben propagiert werden • One-Pass-Formulierung? 174 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Delete() • Delete() sucht den Schlüssel entlang eines Pfades • Eine Verschmelzung findet nur statt, wenn die entsprechenden Knoten beide einen Füllgrad ≤ t−1 haben. • Teste vor dem Abstieg, ob der Nachfolger Füllgrad ≥ t hat (dann ist Verschmelzung ausgeschlossen) • Falls dies nicht der Fall ist, erzwinge dies durch direkte Umstrukturierung 175 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Delete() • Wie bei Insert() sorgen wir dafür, dass der aktuelle Knoten hinreichend gefüllt ist, so dass keine Verschmelzung notwendig wird (Schleifeninvariante) • Falls ein Knoten nicht hinreichend gefüllt wäre, hätten wir das bereits bei der Bearbeitung des Vaterknotens bemerkt und behoben. 176 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Delete() • Hilfsoperationen – Steal() – Merge() – Rotate() 177 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Steal() • Lösche Element aus aktuellem Knoten t=3 C H M A B D E F J K N O P mehr als t−1 Knoten → rekursiver Abstieg möglich 178 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Steal() C H M A B D E F J K N O P ... G 179 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Steal() C H M A B D E F J K ... 180 N O P G Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Steal() C G M A B D E F J K N O P ... 181 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Merge() • Lösche Element aus aktuellem Knoten C G M A B D E J K N O nur t−1 Knoten → rekursiver Abstieg nicht möglich 182 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Merge() C M G A B 183 D E J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Merge() C M A B 184 D E G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Merge() • Lösche Element aus aktuellem Knoten C M A B 185 D E G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() • Lösche Element aus rechtem Teilbaum C G M A B D E F J K N O nur t−1 Knoten → rekursiver Abstieg nicht möglich 186 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() • Lösche Element aus rechtem Teilbaum C G M A B D E F J K N O nur t−1 Knoten → rekursiver Abstieg nicht möglich 187 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() C A B 188 D E F M G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() A B 189 D E C M F G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() A B 190 D E C M F G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() C A B 191 D E F M G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Rotate() C F M A B 192 D E G J K N O Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Delete() • Standardfall: Schlüssel nicht im Knoten, Rekursion in den entsprechenden Teilbaum • Nur in Knoten absteigen, die hinreichend gefüllt sind → wenn nicht, vorher den Baum mit Merge(), Steal(), Rotate() umstrukturieren. • Nicht-Standardfälle: 1, 2a, 2b, 3a, 3b (s. Cormen) 193 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer B-Bäume – Delete – Scheme Blatt Kein Blatt 1 Rekursion This 194 L. oder R. ≥t Beide <t 2ab 2c 3a 3b Steal Merge Rotate Merge L. oder R. ≥t Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Beide <t Delete() • Fall 1: Schlüssel in einem Blatt Del(F, P ) C G M A B 195 D E F J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 1: Schlüssel in einem Blatt P Del(F, C G M ) A B 196 D E F J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 1: Schlüssel in einem Blatt P C G M Del(F, D E F ) J K L 197 T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 1: Schlüssel in einem Blatt • Schlüssel wird gelöscht P C G M A B 198 D E J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum Del(M, P ) C G M A B 199 D E J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum P Del(M, C G M ) A B 200 D E J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum P Del(M, C G M ) A B 201 D E J K L T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum P Del(M, C G M ) A B 202 Del(L, J K L ) N O T X Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum P Del(M, C G M ) A B 203 D E J K T X L N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2a: Schlüssel in innerem Knoten, linker Sohn hat ≥ t Schlüssel • Stehle Vorgänger aus linkem Teilbaum P C G L A B 204 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2b: Schlüssel in innerem Knoten, rechter Sohn hat ≥ t Schlüssel → analog zu Fall 2a 205 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel Del(G, P ) C G L A B 206 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel P Del(G, C G L ) A B 207 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() P Del(G, C G L ) A B 208 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() P Del(G, C L ) T X G A B 209 D E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() P Del(G, C L ) A B 210 D E G J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() P Del(G, C L ) A B 211 D E G J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() • Rekursion P C L Del(G, D E G B 212 T X J K ) N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 2c: Schlüssel in innerem Knoten, beide Söhne haben t−1 Schlüssel • Stehlen nicht möglich → Merge() • Rekursion P C L A B 213 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel C L P T X A B 214 E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel Del(B, C L P T X ) A B 215 E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate() Del(B, C L P T X ) A B 216 E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate() Del(B, C A B 217 E J K L P T X ) N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate() Del(B, C A B 218 L P T X ) E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate() Del(B, E L P T X ) C A B 219 J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate() Del(B, E L P T X ) A B C 220 J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate(), Rekursion E L P T X Del(B, A B C ) 221 J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3a: Schlüssel nicht im aktuellen Knoten, der entspr. Unterbaum hat nur t−1 Schlüssel, sein Bruder aber t Schlüssel • Rotate(), Rekursion E L P T X A C 222 J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel P C L A B 223 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel Del(D, P ) C L A B 224 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel Abstieg nicht möglich! Del(D, P ) C L A B 225 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel • Merge zwei der Unterbäume Abstieg nicht möglich! Del(D, P ) C L A B 226 D E J K T X N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel • Merge zwei der Unterbäume Del(D, ) C L P T X A B 227 D E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel • Merge zwei der Unterbäume Del(D, C L P T X ) A B 228 D E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel • Merge zwei der Unterbäume C L P T X Del(D, D E 229 J K ) N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Delete() • Fall 3b: Schlüssel nicht im aktuellen Knoten, sowohl der entspr. Unterbaum als auch dessen Brüder haben t−1 Schlüssel • Merge zwei der Unterbäume C L P T X A B 230 E J K N O Q R S Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer U V Y Z Zusammenfassung • B-Bäume – Optimierter Zugriff auf externen Speicher durch Blockung mehrerer Schlüssel – Minimaler/maximaler Füllgrad – Garantierte Balancierung – Hysterese bei der Umstrukturierung – Steal(), Merge(), Rotate() 231 Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer