Datenstrukturen: Bäume 4 Bäume 4.1 Terminologie und Grundlagen: Modelle für Graphen und Bäume 4.2. Spezifikation und einfache Algorithmen 4.3 Anwendungen - 4.3.1 Auswertung von Operatorbäumen - 4.3.2 Huffman-Code 4.4 Objektorientierte Implementierung .... Suchbäume, Heaps hs / fub – alp3–11-Tree-1 1 4 Bäume Verallgemeinerung von Folgen: Verzweigung in jedem Knoten möglich Jeder Knoten genau auf einem Weg erreichbar o 1 o o 1 entspricht den Folgen: 1 o 1 1 000 001 01 101 11 hs / fub – alp3–11-Tree-1 2 1 Modellierung mit Bäumen Viele Beispiele - auch außerhalb der Informtik Organisationsdiagramm FUB FB Math&Inf FB Physik ..... Institut Math 1 AG Theorie Institut f. Informatik AG DB FB Germanistik ... .... Institut Math 2 AG VSYS .... AG Telematik hs / fub – alp3–11-Tree-1 3 Modellierung mit Bäumen Dokumentstruktur Buch Inhalt Übersicht Kapitel Hauptteil Index Zusammenfassung Abschnitt Hier: Aufbau eines Buches, nicht ein konkretes Buch Metadaten <-> Daten hs / fub – alp3–11-Tree-1 4 2 Modellierung mit Bäumen XML Textauszeichnung (Markup) <?xml version="1.0"?> <rezept> <zutaten anzahl="3"> <zutat>Ei</zutat> <zutat>Mehl</zutat> <zutat>Salz</zutat> </zutaten> <anleitung> Alles zusammenrühren und backen. </anleitung> </rezept> rezept { anzahl="3" } zutaten zutat Ei Textuelle Darstellung zutat Mehl anleitung zutat Salz Alles zusammenrühren und backen. Graphische Darstellung hs / fub – alp3–11-Tree-1 5 hs / fub – alp3–11-Tree-1 6 Modellierung mit Bäumen:XML Abstraktes Dokumentmodell: Baum mit Knoten des Typs: root, element, attribute, text. 3 Packages org.apache.tools.ant org.apache.tools.ant.taskdefs org.apache.tools.ant.taskdefs.compilers Klassenbibliothek org.apache.tools.ant.taskdefs.optional org.apache.tools.ant.taskdefs.optional.clearcase org.apache.tools.ant.taskdefs.optional.depend org.apache.tools.ant.taskdefs.optional.depend.constantpool org.apache.tools.ant.taskdefs.optional.dotnet org.apache.tools.ant.taskdefs.optional.ejb org.apache.tools.ant.taskdefs.optional.ide Symbolische IP-Adressierung org.apache.tools.ant.taskdefs.optional.javacc org.apache.tools.ant.taskdefs.optional.jlink org.apache.tools.ant.taskdefs.optional.jsp org org.apache.tools.ant.taskdefs.optional.junit org.apache.tools.ant.taskdefs.optional.metamata org.apache.tools.ant.taskdefs.optional.net apache sun org.apache.tools.ant.taskdefs.optional.perforce org.apache.tools.ant.taskdefs.optional.scm org.apache.tools.ant.taskdefs.optional.sound ... tools src org.apache.tools.ant.taskdefs.optional.vss org.apache.tools.ant.types org.apache.tools.ant.util taskdefs util org.apache.tools.ant.util.regexp org.apache.tools.mail org.apache.tools.tar Modellierung mit Bäumen: Sprache Syntax natürlicher Sprache Satz Nominalphrase Artikel Der Nomen Hund Verbalphrase Verb bellt Adverb laut ... und hs / fub – alp3–11-Tree-1 8 4 Modellierung mit Bäumen: Sprache ... Syntax von Programmiersprachen Methode Parameter Anweisung Typ Bezeichner float Bezeichner Lokale Anweisungen Vereinbarung square myVar ... ... hs / fub – alp3–11-Tree-1 9 Modellierung mit Bäumen ... Syntax arithmetischer Ausdrücke: Operatorbaum Infix: (a+b)*(c-d) * + a Postfix: a b + c d - * b c d Operatorbaum: Endknoten ("Blätter") sind Argumente (a,b,c), die anderen ("inneren") Knoten sind Operatoren hs / fub – alp3–11-Tree-1 10 5 Bäume: Spezialfall von Graphen 4.1 Modelle für Graphen und Bäume Siehe auch Math. für Informatiker, hier nur Wiederholung und Einführung der verwendeten Terminologie. Baum als Spezialfall von ungerichteten Graphen: Graph G = (V, K) , K ⊆ V X V gerichteter Graph oder K ⊆ {{x,y}| x,y ∈ V} ungerichteter Graph V : Knotenmenge ("vertex") K : Kantenmenge Schreibweise: auch für ungerichtete Graphen (x,y) ∈ K hs / fub – alp3–11-Tree-1 11 Bäume: Spezialfall von Graphen Weg (Pfad) p im Graphen G (V,K) von Knoten a nach Knoten b: p = (v1,v2,...,vn ) mit v1=a, vn=b und (vi, vi+1) ∈ K Schreibweise: p = a ->b Pfadlänge = Anzahl durchlaufener Kanten, Beispiel: Pfadlänge von p = n-1 p heißt einfach, wenn vi != vj für i != j Beispiel: einfacher Pfad der Länge 3 Beispiel: Pfad der Länge 4, nicht einfach hs / fub – alp3–11-Tree-1 12 6 Bäume: Spezialfall von Graphen G = (V,K), ungerichtet, heißt zusammenhängend, wenn es zu je zwei Knoten x, y einen Pfad (x->y) gibt G = (V, K) heißt azyklisch (kreisfrei), wenn für alle Knoten x gilt: es gibt keinen Pfad (x->x) Beispiel: azylischer Graph hs / fub – alp3–11-Tree-1 13 Bäume Def: Freier Baum azyklischer, ungerichteter, zusammenhängender Graph Beispiel: Beh.: Hinzufügen einer weiteren Kante erzeugt Zyklus hs / fub – alp3–11-Tree-1 14 7 Bäume Def: Wurzelbaum Freier Baum mit ausgezeichnetem Knoten: Wurzel 1 Beispiel: 7 8 4 4 6 5 1 9 9 6 3 5 8 10 7 10 2 1 2 3 2 4 9 3 6 5 10 7 8 hs / fub – alp3–11-Tree-1 15 Terminologie Vorgänger, Elternknoten • jeder Knoten außer der Wurzel hat genau einen direkten Vorgänger (Elternknoten) z.B.: Elternknoten von h ist c w b g c h d i e f j • Vorgänger von Knoten x sind - der direkte Vorgänger und - dessen Vorgänger oder: alle Knoten auf dem Pfad von der Wurzel w bis zum direkten Vorgänger von x z.B.: b und w sind Vorgänger von g Ein Pfad (w -> x) von der Wurzel nach x heißt Wurzelpfad. Eigenschaft: x,y Knoten eines Baumes => (x->y) existiert und ist eindeutig. hs / fub – alp3–11-Tree-1 16 8 Terminologie Kind, w Nachfolger b c h g d e f j i • ein Knoten hat null, einen oder mehrere direkte Nachfolger (Kinder). • y ist Nachfolger von x, wenn y direkter Nachfolger von x ist oder oder wenn y Nachfolger eines direkten Nachfolgers x' von x ist. Bsp: h, i sind Nachfolger von c; Alle Knoten bis auf w sind Nachfolger von w. Achtung: Manchmal wird die Nachfolgerrelation reflexiv definiert, so dass jeder Knoten Nachfolger (Nf) von sich selbst ist. Dann Nf und echte Nf unterscheiden. hs / fub – alp3–11-Tree-1 17 Terminologie Geschwister, w b g c h d i Blätter, innere Knoten e f j Sind x und y direkte Nachfolger von z, heißen sie Geschwisterknoten. Bsp.: h, i sind Geschwisterknoten. Ein Knoten ohne direkten Nachfolger heißt Blatt, alle anderen sind innere Knoten. Bsp.: g, h, i, j, f sind Blätter, w, b c, d, e sind innere Knoten. hs / fub – alp3–11-Tree-1 18 9 Terminologie Grad, b Höhe, Tiefe, Größe w c d h g e f j i Grad grad (x) eines Knotens x = Anzahl der Kinder von x. Bsp.: grad (c) = 2, grad (w) = 5, grad (f) = 0. Grad eines Baums = maximaler Grad seiner Knoten. hs / fub – alp3–11-Tree-1 Ebene 0: Knoten der Tiefe 0 w b g c h 19 d i e f j Ebene 1 Knoten der Tiefe 1 Ebene 2 Knoten der Tiefe 2 Tiefe d (x) von Knotens x = Anzahl der Kanten auf dem Wurzelpfad zu x. Bsp: d(c) = 1, d(w) = 0, d(h) = 2. Höhe h(t) eines Baums t = maximale Tiefe seiner Knoten. Ebene (level) i = Menge der Knoten der Tiefe i Größe s(x) eines Knotens x = Anzahl Nachfolger +1 (für x selbst) Größe S(t) eines Baums t = Anzahl der Knoten von t 10 Terminologie Def: Geordneter Baum T1 1 3 10 6 5 8 7 2 2 4 T2 1 9 4 5 9 3 6 10 7 8 Ein Wurzelbaum heißt geordnet, wenn für jeden Knoten die Menge der Kinder geordnet ist. Bsp: Die Bäume T1 und T2 sind als (ungeordnete) Wurzelbäume gleich, als geordnete jedoch nicht. hs / fub – alp3–11-Tree-1 21 Terminologie Def: Positionsbaum 1 2 4 1 T1 3 5 T2 2 6 4 3 5 6 Ein Wurzelbaum heißt n-ärer Positionsbaum (n>1), wenn jeder Knoten 0 <= k <= n Kinder hat, von denen jedes eine Position i, 0 <= i < n hat. Wichtigster Spezialfall n = 2 : Binärbaum Sprechweise: linkes Kind, rechtes Kind Beachte: T1 und T2 sind als geordnete Bäume gleich, aber nicht als Binärbäume. hs / fub – alp3–11-Tree-1 22 11 Terminologie Teilbaum Ist x ein Kind des Knotens y, dann heißt der von den Nachfolgern von x gebildete Baum mit Wurzel x Teilbaum von y. Ein Knoten eines Binärbaums besitzt einen linken und rechten Teilbaum. 1 T1 2 3 4 6 5 Die Wurzel 1 des Binärbaums T1 hat den linken Teilbaum mit Wurzel 2 und den Knoten 2,4,5 und den rechten mit Wurzel 3 und Knoten 3,6 . hs / fub – alp3–11-Tree-1 23 Binärbaum als Positionsbaum T1 = {1, a { (1, b { (1,d) (2, e { (1, g) } ) } ), (2, c { (2,f) } ) } a T1 b c d e g Positionsbäume praktisch immer nach Position geordnet. Damit geordnete Bäume. Rekursive Definition: Def: Ein binärer Baum T ist - leer - oder er besitzt eine Wurzel r, einen linken Teilbaum und einen rechten Teilbaum. hs / fub – alp3–11-Tree-1 24 12 Rekursive Definition Haskell type: > data BT1 t = Empty| BT1 (BT1 t) (BT1 t) > deriving (Show) Analog Mehrwegbäume (k-äre Bäume mit k > 2) : Ein k-ärer Baum (oder Mehrwegbaum vom Grad k) - ist leer - besteht aus einer Wurzel und k k-ärenTeilbäumen hs / fub – alp3–11-Tree-1 25 Terminologie Def: Volle binäre Bäume Manchmal technisch vorteilhaft: leeren Baum explizit darstellen. a T1 b c d e g f Def: Ein voller binärer Baum T ist ein binärer Baum, dessen Knoten - entweder externe Knoten sind - oder den Grad 2 haben Analog: volle k-äre Bäume Beachte: die externe Knoten sind nicht die Blätter nach obiger Definition ! Das sind die Knoten, die genau zwei externe Knoten als Kinder haben. hs / fub – alp3–11-Tree-1 26 13 Eigenschaften von Bäumen (E1) Für die Höhe h eines Mehrwegbaums (MW-Baum) vom Grad k mit n Knoten gilt: log k (n+1) -1 <= h < = n – 1 Extremfälle für k=2: a T1 entarteter Baum, Folge b c d e fast vollständiger Baum hs / fub – alp3–11-Tree-1 27 Vollständige Bäume Def: Ein vollständiger MW-Baum B vom Grad k und Höhe h ist ein Baum, dessen Blätter alle die gleiche Tiefe besitzen und alle inneren Knoten k Nachfolger haben. B heißt fast vollständig, wenn nur die letzte Ebene nicht voll besetzt ist. a vollständig T1 b d c e T1 b d fast vollständig a c e hs / fub – alp3–11-Tree-1 f 28 14 Eigenschaften (E2) Ein MWbaum vom Grad k der Höhe h enthält n <= kh+1-1 Knoten (E3) Ein vollständiger MW-Baum vom Grad k mit n Blattknoten hat n-1 innere Knoten. ... oder: Höhenwachstum eines vollständigen binären Baums um 1 verdoppelt die Anzahl möglicher Knoten. hs / fub – alp3–11-Tree-1 29 Markierte binäre Bäume Knoten oder Kanten eines Binärbaums enthalten meist Daten, z.B. Operatorbaum: * + a b c d Markierung: Abbildung von Werten auf Knoten oder Kanten hs / fub – alp3–11-Tree-1 30 15 Modelle markierter Bäume 1 a) jedem Knoten wird Wert aus Typ T zugeordnet: B T = {(b,m) | b ist Binärbaum mit Knotenmenge V, m:: V -> T} b) inneren Knoten wird Wert aus Typ T zugeordnet,Blättern aus T' : B T,T' = {(b,m,t) | b ist Binärbaum m:: Innere Knoten -> T, t:: Blätter -> T'} c) Kanten werden Werte aus T zugeordnet, Blättern Werte aus T' : MT,T' = {(b,k,t) | b Binärbaum, k::Kanten -> T, t:: Blätter in T'} o o T2 2 3 6 4 * + a 1 1 01 b o c d 1 11 1 101 000 001hs / fub – alp3–11-Tree-1 31 16