Bäume 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 1 Inhalt • Grundbegriffe: Baum, Binärbaum • Binäre Suchbäume (Definition) • Typische Aufgaben • Suchaufwand • Löschen allgemein, Methode „Schlüsseltransfer“ • Programmiertechnik 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 2 Baum: Grundbegriffe #1 • Graph: gerichtet, ungerichtet Komponenten: Knoten Elemente: Eigenschaften Kanten Beziehungen zwischen Elementen • Baum: 1. Spezielfall eines Graphen 2. Verallgemeinerung der Liste Liste: 1 Element: 1 Nachfolger Baum: 1 Element: ≥ 1 Nachfolger d t-ärer Baum, Baum der Ordnung t zu jedem Element sind höchstens t Nachfolger festgelegt t=1 Spezialfall: Liste; t=2 Binärbaum; t=3 Ternärbaum, ... 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 3 Baum: Grundbegriffe #2 • Knotensorten Wurzel Blatt=äußerer K. innerer Knoten Randknoten • • • • Vorgänger = Vater Nachfolger = Sohn = Kind Knoten ohne Vorgänger Knoten ohne Nachfolger Knoten mit Vorgänger und Nachfolger Knoten mit < t Nachfolger Pfad Weg von der Wurzel zu jedem Knoten Pfadlänge Anzahl von Knoten im Pfad Voller Baum alle Blätter haben die gleiche Pfadlänge Quasivoller Baum nur die unterste Ebene ist nicht voll besetzt 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 4 Varianten von Bäumen • Zahl der Nachfolger: fest oder beliebig • Sortierung: Ungeordneter Baum: Nachfolger unsortiert Geordneter Baum: 1., 2., ...,k-ter Nachfolger; beim Binärbaum: linker, rechter Nachfolger Ebene 1 W Ebene 2 Ebene 3 1. 1. 2 W 2. 3 4. 1. 2. Beide Beispielsbäume: Höhe h=3 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 3. 1. 2. L L R R L R Linker Teilbaum von W 5 Implementierung von Bäumen Einige Beispiele: • als 2 Felder 1 2 • 3 e(1,1)=0 e(1,2)=1 e(1,3)=1 Knoten: Kanten: v(1) v(2) v(3) e(2,1)=0 e(1,1)=0 e(2,2)=0 e(1,2)=0 e(2,3)=0 e(1,3)=0 e(3,1)=0 e(3,2)=0 e(3,3)=0 e[i][j]==1 g.d.w. e[j] Nachfolger von e[i] als Struktur (C++:Klasse) mit Zeigern ... natürlich Knoten-Nr.=1 Knoten-Nr.=2 1 Knoten-Daten Knoten-Daten 2 3 null 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume Knoten-Nr.=3 Knoten-Daten null null 6 null Zusammenhänge • Mit der Graphentheorie Ein Baum ist ein gerichteter zusammenhängender kreisfreier Graph mit einer speziellen Eigenschaft: Jeder Knoten hat bis auf einen (Wurzelknoten) genau einen Vorgänger. • Mit der linearen Algebra Baum kreisfrei zusammenhängend Kantenzahl ~ Basis ~ linear unabhängig ~ Erzeugendensystem ~ Dimension eines Vektorraumes 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 7 Bäume und lineare Algebra • Satz: Charakterisierung von Bäumen Es sei G = (V,E) ein endlicher Graph; V ... Knotenmenge, E ... Kantenmenge. Folgende Eigenschaften sind äquivalent: (1) G ist ein Baum (2) G ist kreisfrei, und das Hinzufügen einer beliebigen Kante zu E erzeugt einen Kreis (G ist maximal kreisfrei) (3) Zwischen je zwei Knoten gibt es genau einen einfachen Weg in G (4) G ist zusammenhängend, und die Wegnahme einer beliebigen Kante aus E zerstört den Zusammenhang von G (G ist minimal zusammenhängend) (5) G ist kreisfrei und seine Kantenzahl ist |E| = |V| - 1 (6) G ist zusammenhängend und |E| = |V| - 1 • analoge Eigenschaften in Vektorräumen (2) Eine Basis ist eine maximal linear unabhängige Menge, d.h. bei Hinzufügen eines Vektors wird die Unabhängigkeit zerstört (4) Eine Basis ist eine minimale Erzeugendenmenge, d.h. bei Wegnahme eines Vektors hat man kein Erzeugendensystem mehr (5),(6) In Vektorräumen haben alle Basen eines (endlichdimensionalen) Vektorraumes die gleiche Größe, nämlich die Dimension des Vektorraumes 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 8 Binärbaum: Grundbegriffe • • • • linker, rechter Nachfolger linker, rechter Teilbaum (Unterbaum) eines Knotens Ebenen Höhe des Baums: Anzahl der Ebenen; im Bild: h = 3 Ebene 1 W Ebene 2 Ebene 3 L L R R L R Linker Teilbaum von W 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 9 Abbildung • Datenstruktur, wobei jedes Datum = Wertepaar: Schlüssel: nach dem Schlüssel wird gesucht Wert: Zielinformation Beispiel: Telefonbuch: Namen = Schlüssel, Telefonnummer = Werte • Zusammenhang mit der Mathematik: A: S → W, A...partielle Abbildung , S...Schlüsselmenge, W...Wertemenge Partiell: i.d.R nur ein (geringer) Teil der Schlüssel hat einen zugeordneten Wert • Sonderform Wörterbuch Abbildung, bei der das gesamte zu speichernde Datum ein Schlüssel ist 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 10 Binäre Suchbäume • Besonders geeignet für Speicherung von Daten, nach denen später gesucht werden soll: Sie sind speziell auf Suchoperationen hin optimiert. • Definition: Ein binärer Suchbaum ist ein binärer Baum mit folgenden Eigenschaften: (1) Jedem Knoten ist ein Schlüssel key zugeordnet (2) Sei x ein beliebiger Knoten und y ein Knoten i seinem linken Unterbaum, so gilt key(y) < key(x) (3) Sei x ein beliebiger Knoten und y ein Knoten in seinem rechten Unterbaum, so gilt key(y) > key(x) • Wertepaare Schlüssel-Wert • Englisch: Binary Search Tree, BST 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 11 Typische Aufgaben Typische Operationen mit den Wertepaaren Schlüssel-Wert sind • Suchen Feststellen, ob ein angegebener Schlüssel im Baum enthalten ist, bzw. den zugehörigen Wert liefern. • Einfügen Ein Paar Schlüssel-Wert als einen neuen Knoten an geeignete Stelle im binären Suchbaum einfügen • Entfernen Einen Knoten entfernen, wobei der Baum muss auch nach dem Löschen die Eigenschaft beibehalten, binärer Suchbaum zu sein. 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 12 Suchaufwand #1 Annahme: alle Schlüssel haben die gleiche Wahrscheinlichkeit, dass sie gesucht werden. Dann: Der Suchaufwand ist minimal, wenn alle Knoten Pfade möglichst gleicher Länge haben (Vollbaum, quasivoller Baum) Beispiel 1: Mit einem vorhandenen (Schlüssel-) 23 Datenbestand ist ein binärer Suchbaum ausgehend vom leeren Baum 15 aufzubauen. Zuerst wird folgende Schlüsselreihenfolge gewählt: 30 57,23,37,15,30,27,79,33,45 Ergebnis: Pfadlängen-Differenz = 3 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 57 79 37 45 27 33 13 Suchaufwand #2 Beispiel 2: Eine andere Reihenfolge ergibt eine andere Suchbaum-Struktur: 33,23,45,15,27,30,37,57,79 15 Ergebnis: Pfadlängen-Differenz = 1 33 23 45 27 37 30 57 79 Die Baumstruktur ist von der Schlüsselreihenfolge abhängig. 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 14 BST programmieren:Löschen Für Knoten mit 0-1 Nachfolger ist das Löschen einfach: 31 31 25 7 39 27 25 45 27 45 Bei anderen Knoten ist es schwieriger. Z.B. 33 23 15 23 15 27 45 27 37 30 30 57 79 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 45 37 57 Funktioniert, aber... 79 15 BST programmieren:Löschen • Bessere Lösch-Methode: „Schlüsseltransfer“ 33 23 15 45 27 37 23 57 30 30 15 45 27 37 57 79 79 oder 33 37 23 15 45 27 37 30 23 57 79 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 15 45 27 57 30 16 79 Programmiertechnik 1 dK ...ist dieser Knoten 2 bereits drin? Ein_r(nS, nW, root) nS ... neuer Schlüssel nW... neuer Wert RET 1 LN ... linker Nachfolger Einf_r RN ... rechter Nachfolger 2 dK.S ... S.v. diesem Knoten 3 1 Beispiel: Einfügen Neuer Knoten: 25 Einf dK ex? 33 New Kn(nS,nW,NULL,NULL) 1 J 2 23 N 45 nS<dK.S? J 2 Ein_r(nS, nW, LN) N 15 27 37 57 3 25 nS>dK.S? 1 J Ein_r(nS, nW, RN) NULL,NULL) N RET 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume dK = 33 dK ex? J 25 < 33? J Ein_r(..., LN) dK = 23 dK ex? J 25 < 23? N 25 > 23? J Ein_r(..., RN) dK = 27 dK ex? J 25 < 27? J Ein_r(...,LN) dK = NULL dK ex? N New Kn (nS,nW, 17 BST: andere Aufgaben #1 Bisher: Suchen, Einfügen, Löschen. Was gibt es noch? • Durchlauf durch einen Binärbaum - In-Ordnungen LWR-Ordnung: aufgesucht wird: 1. linker Unterbaum, 2. Wurzel, 3. rechter Unterbaum RWL-Ordnung: aufgesucht wird: 1. rechter Unterbaum, 2. Wurzel, 3. linker Unterbaum - Prä-Ordnung: WLR, WRL - Post-Ordnung: LRW, RLW Aufgaben z.B.: - Bestimmen aller Blätter, der Anzahl aller Blätter, aller Knoten - Bestimmen der rechtesten Ecke im linken Unterbaum - Kopieren, Löschen des Baums 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 18 BST: andere Aufgaben #2 • Fädelung Beim Durchlauf eines Baums sind stets Rückläufe notwendig. Der Durchlauf kann beschleunigt werden, indem die Leerzeiger in den Blättern mit entsprechenden „Zieladressen“ belegt werden. 33 • Bsp: Fädelung bei LWR 23 15 45 27 37 30 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 19 57 79 Alternative graphische Darstellung von Bäumen 1 (1 (2 (4, 5 (9,10), 6), 3 (7, 8))) 2 4 3 5 6 1 2 4, 5 9, 10 , 6 , 3 7, 8 7 8 1 2 10 9 4 5 9 10 1 2 6 3 3 5 4 9 10 6 7 8 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 7 8 20 Ausgeglichenheit der Bäume Definition 1 (Classic): Binäre Baume sind vollständig ausgeglichen, wenn sich für jeden Knoten die ZAHL der Knoten in seinem linken und rechten Teilbaum um höchstens eins unterscheiden. Definition 2 (AVL-Bäume): Ein Baum ist genau dann ausgeglichen, wenn sich für jeden Knoten die HÖHE der Teibäume um höchstens eins unterscheiden 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 21 AVL-Bäume Adelson-Velski, Landis: Neudefinition der Ausgeglichenheit Länge des Suchpfades: O(log2 n) 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 22 Einfügen in AVL-Bäume Bsp: Einfügen im linken Teilbaum 3 Fälle: 1. H(lTb) = H(rTb) ⇒ H(lTb) > H(rTb), Baum bleibt ausgeglichen h l = 3. H(lTb) > H(rTb) ⇒ die Ausgeglichenheit wird zerstört, der Baum muß neu strukturiert werden hl < hr => hl hr < h r ausgeglichen Einfügen hl > hl hr >> hr unausgeglichen Einfügen 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume > ausgeglichen Einfügen hl 2. H(lTb) < H(rTb) ⇒ H(lTb) = H(rTb) Baum bleibt ausgeglichen => hr 23 Rotation bei AVL-Bäumen a Wiederherstellung der Ausgeglichenheit n b n+1 LR(b,a) Ziel: RR(b,a) Ebene(b)-Ebene(a)++ //höher //tiefer Dabei: (1) Falls Vater(a) vorhanden: Vater(a) abhängen, er wird zum Vater(b) (2) Falls LSohn(b) vorhanden: Falls RSohn(b) vorhanden: LSohn(b) abhängen und RSsohn(b) abhängen und als RSohn(a) anhängen als LSohn(a) anhängen DR=LR+RR 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 24 Rotationsbeispiele#1 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 25 Rotationsbeispiele#2 n+1 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 26 Rotationsbeispiele#3 4 a 4 < LR > na +7= 5 2 +1= a 5 7 4 1 5 RR => 2 DR => 4 7 3 5 RR LR 6 +6= 5 3 7 a 2 1 3 na 5 LR => LR 7 6 4 DR => 2 1 +3= a na 2 1 7 4 1 4 1 LR 4 na 3 2 a 7 4 > 2 RR < 1 +2= 7 5 7 2 RR 4 7 5 4 LR => 5 5 6 5 3 7 a na mit: a=ausgeglichen, na=nicht ausgeglichen 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 27 Vielweg-Bäume Anzahl Nachfolger eines Knotens: >2 4 Nachfolger Anwendung: Verwaltung großer Datenmengen Zeiger auf Knoten: Plattenadressen Abb. 29a statt Speicheradressen Zugriffszeiten: Platte: ca. 10 ms Speicher: 10 ns (Faktor 106) 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 28 Aufteilung eines Baumes in Seiten Seite = Teibaum entspricht: Abb. 30 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 29 Bayer-Bäume (B-Bäume) Eingeführt 1970 von Bayer und McCreight Eigenschaften von Bayer-Bäumen der Ordnung n: • Jeder Knoten (Seite) bis auf den Wurzelknoten enthält m Einträge (Schlüssel), mit n<=m<=2*n • Die Wurzel enthält 1<=m<=2*n Einträge • Jeder Knoten (Seite) hat 0 oder m+1 Nachfolger, d.h. Anzahl der Nachfolger = Anzahl der Einträge + 1 • Alle Blätter (Blattseiten) haben die gleiche Höhe h. 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 30 Beispiel für einen B-Baum Wurzel Ordnung n=2 25 10 20 m=2 Seite 30 40 m+1=3 2 5 7 8 10 13 14 15 18 20 22 24 25 26 27 28 30 32 35 38 40 41 42 45 Blattseiten 2n=4 n=2 n <= m <= 2n Abb.31 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 31 Suchen in einem B-Baum 1. Man lese eine Seite in den Hauptspeicher ein (falls existiert). Hat die angegebene Referenz (Zeiger) den Wert Null, dann existiert der Schlüssel S nicht. 2. Man prüfe, ob der gesuchte Schlüssel S vorhanden ist. Diese Suchzeit ist im allgemeinen kleiner als die Zeit zum Einlesen der Seite vom Hintergrundspeicher. 3. Hat die Suche keinen Erfolg, so liegen folgende Situationen vor: 3.1. Ki < S < Ki+1, für 0 <= i < m-1 mit Ki Schlüssel an der Stelle i. Dann setzen wir die Suche auf der Seite Pi fort. 3.2. Km-1 < S . Die Suche wird auf der Seite Pm fortgesetzt. 3.3. S < K1 . Die Suche wird auf der Seite P0 fortgesetzt. P0 K1 D1 P1 K2 D2 P2 …. x Pm-2 Km-1 Pm-1 Dm-1 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 32 Löschen aus dem B-Baum#1 Situation 1: Suchargument ist im Blatt: 1.1 Blatt hat mehr als n Elemente (normal): lösche Element n=2 20 30 zu löschen: 10 7 10 15 18 22 26 35 40 41 20 30 7 15 18 22 26 Abb. 33a 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume 35 40 41 33 Löschen aus dem B-Baum#2 1.2 Blatt hat genau n Elemente (Unterlauf): betrachte linken (rechten) Bruder 1.2.1 linker (rechter) Bruder hat mehr als n Elemente: dann ‘verschiebe’ Wurzel ins Blatt und Blatt in die Wurzel n=2 20 30 7 15 18 zu löschen: 22 22 26 35 40 41 löschen Unterlauf droht: Ein Knoten muss min. 2 Elemente haben 20 35 7 15 18 26 30 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume Abb. 33b 40 41 34 Löschen aus dem B-Baum#3 1.2.2 linker und rechter Bruder hat genau n Elemente: dann ‘verkette’ n=2 20 35 7 15 zu löschen: 26 26 30 40 41 20 7 15 30 35 40 41 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume Abb. 33c 35 Löschen aus dem B-Baum#4 Situation 2: Suchargument ist nicht im Blatt: rechtes Element im linken Teilbaum ‘hochziehen’ n=2 20 30 löschen zu löschen: 30 7 15 18 22 26 35 40 41 20 26 7 15 18 22 35 40 41 dann Unterlauf , weiter wie unter 2 18 26 7 15 20 22 2006 Jiri Spale, Algorithmen und Datenstrukturen - Bäume Abb. 33d 35 40 41 36