Datenstrukturen: Bäume 4 Bäume 4. Terminologie und Grundlagen: Modelle für Graphen und Bäume 4.. Spezifikation und einfahe Algorithmen 4. Anwendungen - 4.. Auswertung von Operatoräumen - 4.. Huffman-Code 4.4 Ojektorientierte Implementierung... Suhäume, Heaps hs / fu alp -Tree- 4 Bäume Verallgemeinerung von Folgen: Verzweigung in jedem Knoten möglih Jeder Knoten genau auf einem Weg erreihar o entspriht den Folgen: o o o 000 00 0 0 hs / fu alp -Tree-
Modellierung mit Bäumen Viele Beispiele - auh außerhal der Informtik Organisationsdiagramm FUB FB Physik FB Math&Inf... FB Germanistik Institut Math Institut f. Informatik Institut Math...... AG Theorie AG DB AG VSYS... AG Telematik hs / fu alp -Tree- Modellierung mit Bäumen Dokumentstruktur Buh Inhalt Kapitel Index Üersiht Hauptteil Zusammenfassung Ashnitt Hier: Aufau eines Buhes, niht ein konkretes Buh Metadaten <-> Daten hs / fu alp -Tree- 4
Modellierung mit Bäumen XML Textauszeihnung (Markup) <?xml version=".0"?> <rezept> <zutaten anzahl=""> <zutat>ei</zutat> <zutat>mehl</zutat> <zutat>salz</zutat> </zutaten> <anleitung> Alles zusammenrühren und aken. </anleitung> </rezept> { anzahl="" } zutaten zutat zutat zutat rezept anleitung Ei Mehl Salz Alles zusammenrühren und aken. Textuelle Darstellung Graphishe Darstellung hs / fu alp -Tree- 5 Modellierung mit Bäumen:XML Astraktes Dokumentmodell: Baum mit Knoten des Typs: root, element, attriute, text. hs / fu alp -Tree-
Pakages org.apahe.tools.ant org.apahe.tools.ant.taskdefs org.apahe.tools.ant.taskdefs.ompilers org.apahe.tools.ant.taskdefs.optional Klasseniliothek org.apahe.tools.ant.taskdefs.optional.learase org.apahe.tools.ant.taskdefs.optional.depend org.apahe.tools.ant.taskdefs.optional.depend.onstantpool org.apahe.tools.ant.taskdefs.optional.dotnet org.apahe.tools.ant.taskdefs.optional.ej org.apahe.tools.ant.taskdefs.optional.ide org.apahe.tools.ant.taskdefs.optional.java org.apahe.tools.ant.taskdefs.optional.jlink org.apahe.tools.ant.taskdefs.optional.jsp org.apahe.tools.ant.taskdefs.optional.junit org org.apahe.tools.ant.taskdefs.optional.metamata org.apahe.tools.ant.taskdefs.optional.net org.apahe.tools.ant.taskdefs.optional.perfore org.apahe.tools.ant.taskdefs.optional.sm org.apahe.tools.ant.taskdefs.optional.sound org.apahe.tools.ant.taskdefs.optional.vss org.apahe.tools.ant.types apahe tools sr sun... org.apahe.tools.ant.util org.apahe.tools.ant.util.regexp org.apahe.tools.mail org.apahe.tools.tar taskdefs util Symolishe IP-Adressierung Modellierung mit Bäumen: Sprahe Syntax natürliher Sprahe Satz Nominalphrase Veralphrase Artikel Nomen Ver Der Hund ellt Adver laut... und hs / fu alp -Tree- 8 4
Modellierung mit Bäumen: Sprahe... Syntax von Programmiersprahen Methode Parameter Anweisung Bezeihner Typ Bezeihner float myvar Lokale Vereinarung... Anweisungen... square hs / fu alp -Tree- 9 Modellierung mit Bäumen... Syntax arithmetisher Ausdrüke: Operatoraum * + - Infix: (a+)*(-d) Postfix: a + d - * a d Operatoraum: Endknoten ("Blätter") sind Argumente (a,,), die anderen ("inneren") Knoten sind Operatoren hs / fu alp -Tree- 0 5
Bäume: Spezialfall von Graphen 4. Modelle für Graphen und Bäume Siehe auh Math. für Informatiker, hier nur Wiederholung und Einführung der verwendeten Terminologie. Baum als Spezialfall von ungerihteten Graphen: Graph G = (V, K), K V X V gerihteter Graph oder K {{x,y} x,y V} ungerihteter Graph V : Knotenmenge ("vertex") K : Kantenmenge Shreiweise: auh für ungerihtete Graphen (x,y) K hs / fu alp -Tree- Bäume: Spezialfall von Graphen Weg (Pfad) p im Graphen G (V,K) von Knoten a nah Knoten : p = (v,v,...,v n ) mit v =a, v n = und (v i, v i+ ) K Shreiweise: p = a -> Pfadlänge = Anzahl durhlaufener Kanten, Beispiel: Pfadlänge von p = n- p heißt einfah, wenn v i!= v j für i!= j Beispiel: einfaher Pfad der Länge Beispiel: Pfad der Länge 4, niht einfah hs / fu alp -Tree-
Bäume: Spezialfall von Graphen G = (V,K), ungerihtet, heißt zusammenhängend, wenn es zu je zwei Knoten x, y einen Pfad (x->y) git G = (V, K) heißt azyklish (kreisfrei), wenn für alle Knoten x gilt: es git keinen Pfad (x->x) Beispiel: azylisher Graph hs / fu alp -Tree- Bäume Def: Freier Baum azyklisher, ungerihteter, zusammenhängender Graph Beispiel: Beh.: Hinzufügen einer weiteren Kante erzeugt Zyklus hs / fu alp -Tree- 4 7
Bäume Def: Wurzelaum Freier Baum mit ausgezeihnetem Knoten: Wurzel Beispiel: 8 7 4 4 5 5 0 9 9 8 7 0 9 4 5 7 8 0 hs / fu alp -Tree- 5 Terminologie Vorgänger, Elternknoten w jeder Knoten außer der Wurzel hat genau einen direkten Vorgänger (Elternknoten) z.b.: Elternknoten von h ist d e f Vorgänger von Knoten x sind - der direkte Vorgänger und - dessen Vorgänger g h i j oder: alle Knoten auf dem Pfad von der Wurzel w is zum direkten Vorgänger von x z.b.: und w sind Vorgänger von g Ein Pfad (w -> x) von der Wurzel nah x heißt Wurzelpfad. Eigenshaft: x,y Knoten eines Baumes => (x->y) existiert und ist eindeutig. hs / fu alp -Tree- 8
Terminologie Kind, Nahfolger w d e f g h i j ein Knoten hat null, einen oder mehrere direkte Nahfolger (Kinder). y ist Nahfolger von x, wenn y direkter Nahfolger von x ist oder oder wenn y Nahfolger eines direkten Nahfolgers x' von x ist. Bsp: h, i sind Nahfolger von ; Alle Knoten is auf w sind Nahfolger von w. Ahtung: Manhmal wird die Nahfolgerrelation reflexiv definiert, so dass jeder Knoten Nahfolger (Nf) von sih selst ist. Dann Nf und ehte Nf untersheiden. hs / fu alp -Tree- 7 Terminologie Geshwister, Blätter, innere Knoten w d e f g h i j Sind x und y direkte Nahfolger von z, heißen sie Geshwisterknoten. Bsp.: h, i sind Geshwisterknoten. Ein Knoten ohne direkten Nahfolger heißt Blatt, alle anderen sind innere Knoten. Bsp.: g, h, i, j, f sind Blätter, w,, d, e sind innere Knoten. hs / fu alp -Tree- 8 9
Terminologie Grad, Höhe, Tiefe, Größe w d e f g h i j Grad grad (x) eines Knotens x = Anzahl der Kinder von x. Bsp.: grad () =, grad (w) = 5, grad (f) = 0. Grad eines Baums = maximaler Grad seiner Knoten. hs / fu alp -Tree- 9 w Eene 0: Knoten der Tiefe 0 d e f Eene Knoten der Tiefe g h i j Eene Knoten der Tiefe Tiefe d (x) von Knotens x = Anzahl der Kanten auf dem Wurzelpfad zu x. Bsp: d() =, d(w) = 0, d(h) =. Höhe h(t) eines Baums t = maximale Tiefe seiner Knoten. Eene (level) i = Menge der Knoten der Tiefe i Größe s(x) eines Knotens x = Anzahl Nahfolger + (für x selst) Größe S(t) eines Baums t = Anzahl der Knoten von t 0
Terminologie Def: Geordneter Baum 0 4 5 7 8 T 9 9 4 5 7 8 T 0 Ein Wurzelaum heißt geordnet, wenn für jeden Knoten die Menge der Kinder geordnet ist. Bsp: Die Bäume T und T sind als (ungeordnete) Wurzeläume gleih, als geordnete jedoh niht. hs / fu alp -Tree- Terminologie Def: Positionsaum T T 4 5 Ein Wurzelaum heißt n-ärer Positionsaum (n>), wenn jeder Knoten 0 <= k <= n Kinder hat, von denen jedes eine Position i, 0 <= i < n hat. Wihtigster Spezialfall n = : Binäraum Sprehweise: linkes Kind, rehtes Kind Beahte: T und T sind als geordnete Bäume gleih, aer niht als Binäräume. 4 5 hs / fu alp -Tree-
Terminologie Teilaum Ist x ein Kind des Knotens y, dann heißt der von den Nahfolgern von x geildete Baum mit Wurzel x Teilaum von y. Ein Knoten eines Binäraums esitzt einen linken und rehten Teilaum. 4 5 T Die Wurzel des Binäraums T hat den linken Teilaum mit Wurzel und den Knoten,4,5 und den rehten mit Wurzel und Knoten,. hs / fu alp -Tree- Binäraum als Positionsaum a T = {, a { (, { (,d) (, e { (, g) } ) } ), (, { (,f) } ) } T Positionsäume praktish immer nah Position geordnet. Damit geordnete Bäume. d g e Rekursive Definition: Def: Ein inärer Baum T ist - leer - oder er esitzt eine Wurzel r, einen linken Teilaum und einen rehten Teilaum. hs / fu alp -Tree- 4
Rekursive Definition Haskell type: > data BT t = Empty BT (BT t) (BT t) > deriving (Show) Analog Mehrwegäume (k-äre Bäume mit k > ) : Ein k-ärer Baum (oder Mehrwegaum vom Grad k) -ist leer - esteht aus einer Wurzel und k k-ärenteiläumen hs / fu alp -Tree- 5 Terminologie Def: Volle inäre Bäume a Manhmal tehnish vorteilhaft: leeren Baum explizit darstellen. d g e T f Def: Ein voller inärer Baum T ist ein inärer Baum, dessen Knoten - entweder externe Knoten sind - oder den Grad haen Analog: volle k-äre Bäume Beahte: die externe Knoten sind niht die Blätter nah oiger Definition! Das sind die Knoten, die genau zwei externe Knoten als Kinder haen. hs / fu alp -Tree-
Eigenshaften von Bäumen (E) Für die Höhe h eines Mehrwegaums (MW-Baum) vom Grad k mit n Knoten gilt: log k (n+) - <= h < = n Extremfälle für k=: entarteter Baum, Folge d a T e fast vollständiger Baum hs / fu alp -Tree- 7 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 gleihe Tiefe esitzen und alle inneren Knoten k Nahfolger haen. B heißt fast vollständig, wenn nur die letzte Eene niht voll esetzt ist. a T a vollständig d d e fast vollständig T e f hs / fu alp -Tree- 8 4
Eigenshaften (E) Ein MWaum vom Grad k der Höhe h enthält n <= k h+ - Knoten (E) Ein vollständiger MW-Baum vom Grad k mit n Blattknoten hat n- innere Knoten.... oder: Höhenwahstum eines vollständigen inären Baums um verdoppelt die Anzahl mögliher Knoten. hs / fu alp -Tree- 9 Markierte inäre Bäume Knoten oder Kanten eines Binäraums enthalten meist Daten, z.b. Operatoraum: * + - a d Markierung: Aildung von Werten auf Knoten oder Kanten hs / fu alp -Tree- 0 5
Modelle markierter Bäume a) jedem Knoten wird Wert aus Typ T zugeordnet: B T = {(,m) ist Binäraum mit Knotenmenge V, m:: V -> T} ) inneren Knoten wird Wert aus Typ T zugeordnet,blättern aus T' : B T,T' = {(,m,t) ist Binäraum m:: Innere Knoten -> T, t:: Blätter -> T'} ) Kanten werden Werte aus T zugeordnet, Blättern Werte aus T' : MT,T' = {(,k,t) Binäraum, k::kanten -> T, t:: Blätter in T'} o o 000 00 0 4 * hs / fu alp -Tree- + - T a d o 0