Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens [email protected] Überblick Grundlagen Definitionen Elementare Datenstrukturen Rekursionen Bäume 2 1 Datenstruktur „Baum“ Definition eines Baumes Ein einzelner Knoten ist ein Baum. Wenn B1, B2, ..., Bn für n>=1 Bäume sind, dann ist auch das folgende Gebilde ein Baum: B1,...,Bn nennt man Teilbäume oder Unterbäume. 3 Beispiele für Bäume 4 2 Begriffe Wurzel Kante Blatt innerer Knoten 5 Begriffe Wurzel: Knoten ohne Vorgänger Innere Knoten: mit Vorgänger und Nachfolger Blätter: Knoten ohne Nachfolger 6 3 Listen & Bäume Listen und Bäume können beide zum Ablegen von Daten benutzt werden. Listen haben Nachteile z.B. beim Zugriff auf bestimmte Elemente, da kein Random Access möglich ist. Listen haben Vorteile wegen z.B. hoher Flexibilität bei Einfügungen und Löschungen. 7 Listen & Bäume Bäume bieten Kompromiß: flexibles Einfügen wie bei Listen dabei geringere Zahl von Zugriffsoperationen 8 4 Formale Definition Ein Baum ist ein ungerichteter Graph ohne geschlossene Wege, in dem zwischen je zwei Knoten genau ein Weg existiert (zyklenfreier, zusammenhängender, ungerichteter Graph) 9 geordnete Bäume Wenn die Teilbäume B1,...,Bn in einer festen Reihenfolge stehen sollen, so spricht man von geordneten Bäumen. 10 5 gerichteter Baum Ein gerichteter Graph ist dann ein gerichteter Baum, wenn er zyklenfrei und zusammenhängend ist und wenn jeder Knoten höchstens eine einlaufende Kante besitzt. 11 Wurzelbaum Ein Wurzelbaum ist ein gerichteter Baum mit genau einem Knoten w (Wurzel) ohne einlaufende Kante, von dem aus man jeden anderen Knoten des Baumes auf genau einem Weg erreichen kann. 12 6 Wurzelbaum In einem Wurzelbaum haben alle Knoten außer der Wurzel genau einen Vorgänger. Der nebenstehende Baum ist kein Wurzelbaum, da der Knoten n4 zwei Vorgänger hat. 13 Niveau eines Knotens In einem Wurzelbaum besitzt jeder Knoten ein sogenanntes Niveau. Leider gibt es für das Niveau zwei unterschiedliche Interpretationen. Variante 1 Variante 2 14 7 Niveau – Variante 1 Das Niveau ist der Abstand eines Knotens von der Wurzel, in Anzahl durchlaufener Kanten. 15 Niveau – Variante 2 Die Wurzel hat das Niveau 1 ein direkter Nachfolger hat das Niveau 2 usw. 16 8 Höhe des Baumes Als Höhe des Baumes bezeichnet man das größte auftretende Niveau des Baumes. Da das Niveau nach Variante 1 oder 2 angegeben werden kann, gibt es auch bei der Höhe zwei Varianten! 17 Vater, Sohn und Bruder Wenn im gerichteten Baum eine Kante vom Knoten u zum Knoten v existiert, dann ist u der Vater von v und v der Sohn von u. Wenn u eine weitere Kante zu v` hat, dann nennt man v und v` Brüder. 18 9 geordneter Wurzelbaum Haben die Nachfolger eines Knotens eine Ordnung (z.B. linker und rechter Nachfolger), dann spricht man von einem geordneten Wurzelbaum. 19 Grad des Knotens Die Anzahl der Nachfolger eines Knotens nennt man Grad (Ordnung) des Knotens. 20 10 Grad des Knotens Grad(u) = 2 Grad(v) = 3 Grad(w) = 0 21 Grad des Baumes Das Maximum der im Wurzelbaum vorkommenden Grade nennt man Grad (Ordnung) des Baumes. Der Grad des nebenstehenden Baumes ist 3. 22 11 Binärbaum Ein Binärbaum ist ein geordneter Wurzelbaum vom Grad 2, d.h. jeder Knoten hat maximal 2 Nachfolger. 23 Voller & vollständiger Binärbaum Ein voller Binärbaum ist ein Binärbaum, bei dem jedes Niveau komplett mit Knoten gefüllt ist. Ein vollständiger Binärbaum ist auf allen Ebenen gefüllt mit Ausnahme des zeichnerisch untersten Niveaus. (In der Literatur werden diese beiden Definitionen teilweise vertauscht.) 24 12 Voller Binärbaum 16 24 8 4 2 1 6 3 20 12 5 10 9 7 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 31 29 ALLE Ebenen sind komplett. 25 Vollständiger Binärbaum Nur unterste Ebene ist nicht komplett. 26 13 Anzahl Knoten Anzahl der Knoten in einem Binärbaum der Höhe k: voller Binärbaum: n = 2k+1 – 1 vollständiger Binärbaum: 2k <= n <= 2k+1 – 1 Höhe angegeben nach Variante 1, d.h. Wurzel hat Höhe 0 27 Binärer Suchbaum Ein binärer Suchbaum kann dazu genutzt werden, sortierte Daten für Suchzwecke bereitzuhalten. 28 14 Binärer Suchbaum bei aufsteigender Sortierung gilt: Alle Werteinträge im linken Teilbaum sind kleiner als der Eintrag in der Wurzel. Alle Werteinträge im rechten Teilbaum sind größer als der Eintrag in der Wurzel. Linker und rechter Teilbaum sind ebenfalls Suchbäume. 29 Binärer Suchbaum 20 14 17 8 3 33 11 26 39 30 30 15 Vorteil binärer Suchbaum effizienter Suchvorgang Beispiel: bei 216-1 = 65535 Knoten ist die minimale Baumhöhe h=15 (voller Baum) nach maximal 16 Vergleichen ist klar, ob der Wert enthalten ist oder nicht 31 Aufbau binärer Suchbaum Aufbau eines Knotens struct node { ItemType data; node *left; node *right; }; 32 16 Algorithmus binärer Suchbaum Beim leeren Baum wird der erste Wert in einen neu geschaffenen Knoten untergebracht und unter dem rootPointer eingehängt. 33 Algorithmus binärer Suchbaum Weitere Knoten wie folgt eingehängt: bei root beginnend im Baum absteigen wenn neuer Wert kleiner als aktueller Knotenwert, dann links absteigen wenn neuer Wert größer, dann rechts absteigen. Neuen Knoten anstelle des gefundenen Nullpointers einhängen. 34 17 Projekt Visualisierung von binären Bäumen mit Visual C++ Sascha Rother und Christoph Holst SS 2003 35 Nachteil Die Form des nach diesem Algorithmus entstehenden Baumes hängt stark ab von den eingegliederten Daten. Bei bereits sortierten Daten entsteht eine lineare Liste. 36 18 Ideal Ideal wäre es, wenn der binäre Suchbaum immer die minimale Höhe hat, da dann die Suchzeit minimiert wird. (Mehr dazu später.) 37 Durchlaufen von Binärbäumen Um z.B. alle Werte eines Binärbaumes auszugeben, muß dieser durchlaufen werden. Das Durchlaufen nennt man auch “traversieren”. 38 19 Durchlaufen von Binärbäumen Verschiedene Möglichkeiten: WLR – Wurzel-Links-Rechts WRL – Wurzel-Rechts-Links LWR – Links-Wurzel-Rechts LRW – Links-Rechts-Wurzel RWL – Rechts-Wurzel-Links RLW – Rechts-Links-Wurzel 1. 2. 3. 4. 5. 6. 39 Bedeutung WLR – Wurzel-Links-Rechts Gebe den Wert der Wurzel aus. Laufe in den linken Teilbaum. Laufe in den rechten Teilbaum. 40 20 Preorder, Inorder, Postorder Das WLR-Verfahren nennt man auch “Preorder”. Das LWR-Verfahren nennt man auch “Inorder”. Das LRW-Verfahren nennt man auch “Postorder”. 41 Beispiel 20 14 17 8 3 33 11 26 39 30 Wie sieht der WLR-Durchlauf aus? (Preorder) 42 21 Beispiel 20 14 17 8 3 33 26 39 30 11 WLR (Preorder): 20, 14, 8, 3, 11, 17, 33, 26, 30, 39 43 Beispiel 20 14 17 8 3 33 11 26 39 30 Wie sieht der LWR-Durchlauf aus? (Inorder) 44 22 Beispiel 20 14 17 8 3 33 26 39 30 11 LWR (Inorder): 3, 8, 11, 14, 17, 20, 26, 30, 33, 39 45 Beispiel 20 14 17 8 3 33 11 26 39 30 Wie sieht der LRW-Durchlauf aus? (Postorder) 46 23 Beispiel 20 14 17 8 3 33 11 26 39 30 LRW (Postorder): 3, 11, 8, 17, 14, 30, 26, 39, 33, 20 47 Auf einen Blick derselbe Baum, verschiedene Durchlaufvarianten: WLR: 20, 14, 8, 3, 11, 17, 33, 26, 30, 39 LWR: 3, 8, 11, 14, 17, 20, 26, 30, 33, 39 LRW: 3, 11, 8, 17, 14, 30, 26, 39, 33, 20 48 24 Klausuraufgabe SS 2004 Bei der aktuell in Portugal stattfindenden Fußball-EM sind außer den Gastgebern noch folgende 15 Nationen am Start: BG D ENG HR NL Bulgarien Deutschland England Kroatien Niederlande CH DK F I RUS Schweiz Dänemark Frankreich Italien Russland CZ E GR LV S Tschechien Spanien Griechenland Lettland Schweden Zeichnen Sie einen Binären Suchbaum mit optimaler (d.h. möglichst geringer) Höhe, der als Nutzdaten die oben angegebenen Kürzel der 15 Nationen (ohne Gastgeber Portugal) besitzt. Zeichnen Sie nur den fertigen Baum, keine einzelnen Entwicklungsschritte. 49 25