Gliederung 5. Compiler 1. 2. 3. 4. Struktur eines Compilers Syntaxanalyse durch rekursiven Abstieg Ausnahmebehandlung Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume 3. Streuspeicherung 7. Graphen 1. Darstellung und Topologisches Sortieren 2. Kürzeste Wege 3. Fluß- und Zuordnungsprobleme Baumtransformationen (1) • Ausgangssituation: Darstellung von Termen mit Bäumen • Jeder Term und Faktor kann ein beliebig komplizierter Term bzw. Baum sein • Die Transformation von Termen als Zeichenketten ist schwierig + Summand1 Summand2 ( + Summand1 Summand2 ) ( Summand1 + Summand2 ) 2 Baumtransformationen (2) • Baumtransformationen werden durch Transformationsregeln beschrieben • Solche Regeln können hintereinander ausgeführt werden • Die Regeln können auf Teilbäume angewendet werden t1 Originalbaum Transformation t2 transformierter Baum 3 Baumtransformationen (3) Vereinfachung von Termen • Der Baum besteht aus einem Operator, einem linken und einem rechten Teilbaum • Der linke Teilbaum 0 kann reduziert werden + Vereinfachung 0 t t 4 Vereinfachungsregeln (1) + 0 t t + 0 t t * t 1 t * 0 t 0 5 Vereinfachungsregeln (2) + Zahl Zahl Zahl + Zahl + + Zahl Variable Zahl + + Variable Zahl Variable Zahl Variable 6 Vereinfachungsregeln (3) + + Variable Variable + + Variable2 Variable1 Variable Variable Variable2 Variable1 + Zahl1 + + Zahl2 t Zahl1+Zahl2 t 7 Fragestellungen • Sind die Regeln reihenfolgeabhängig? • Terminieren die Regeln? • Nimmt der Baum eine Normalform an? + + Variable1 Variable2 Variable2 Variable1 Beispiel einer nicht terminierenden Regel • Wird der Baum einfacher, spricht man von einem Vereinfachungssystem 8 Positionen im Baum (1) Baumdarstellung für Term t= f(e,f(x,i(x))) f e ε f 1 x 21 2 i 22 x 221 9 Positionen im Baum (2) • Die Menge der Positionen im Baum b ist eine Menge Pos(b) über den Alphabet der Zahlen: – Ist der Wurzelknoten eine Variable, so ist Pos(b) ={ε} – Ist der Wurzelknoten ein Operatorsymbol f mit den Unterbäumen b1, ..,bn so gilt: Pos ( b ) = { ε } ∪ n U { ip | p ∈ Pos ( b i )} 1 10 Positionen im Baum (2) • Präfix-Ordnung: p ≤ q gdw ∃x.p ' So dass pp ' = q • p, q sind ‘‘parallel‘‘, falls weder p =q , p ≤ q oder q ≤ p • p ist streng oberhalb von q, falls p ≤ q und p‡q • Größe des Baumes = Card(Pos(S)) 11 Positionen im Baum (3) • p ∈ Pos(b), Unterbaum von Baum b an position p p t • p= ε t p • p=iq q t p pq t q t 12 Ersetzungen • Ersetzung an Position ε t1 t2 • Ersetzung an Position p=iq p t1 p t2 13 Substitution • Baumtransformation bei der endlich viele Variablen durch Bäume ersetzt werden σ p v p t 14 Reduktionsrelation • Reduktionsrelation zwischen Bäumen p σ(e) p σ(r) • Regel existiert: e r 15 Digitale Bäume Ausgangssituation: Suche nach Worten über einem Alphabet z.B. in Texten oder HTML-Seiten (z.B. Suchmaschinen ) • Jeder Knoten nimmt einen Wert bzw. Schlüssel vollständig auf • Probleme, wenn Worte als Werte von Knoten eines Suchbaumes gespeichert werden – Aufwendige Vergleiche (Worte müssen Buchstabe für Buchstabe verglichen werden. Beispiel: „Organisationslehre“ < „Organisationsmuster“ – Gleiche Wortanfänge werden mehrfach gespeichert (Speicherplatzverbrauch) – Vergleiche müssen mehrfach bis zum ersten unterschiedlichen Buchstaben durchgeführt werden 16 Digitale Bäume Lösungsprinzip: Suchbaum mit mehrwertigen Knoten, deren Werte • den Buchstaben des Alphabets entsprechen und • jeweils auf einen Kindknoten verweisen Das Verfolgen von Verweisen bis zu einem Blatt ergibt dann die gespeicherten Worte • Die Verweise sind dabei prinzipiell unabhängig von den gespeicherten Schlüsselwerten • Das Verfahren ist geeignet für Datentypen, bei denen eine derartige feste Verzweigung sinnvoll ist. Insbesondere: Zeichenketten über einem festen Alphabet mit Verzweigung nach dem jeweils ersten bzw. nächsten Buchstaben • Bezeichnung digital entstammt der Interpretation von Zahlen eines Zahlensystems als Worte über dem Alphabet der Ziffern (insb. Binärzahlen über {0,1}) und deren Verwaltung in derartigen Bäumen 17 Tries (1) • Tries sind Baumstrukturen zur Speicherung von Zeichenketten und unterstützen das Suchen in Texten • Das Wort Trie (gesprochen wie das engl. "try") entstammt der Hauptanwendung der Struktur, dem Text-Retrieval • Tries erlauben große Dokumentenbestände nach Zeichenketten zu durchsuchen: der Trie bildet einen so genannten Index zu diesen Dokumenten. Wurzel: Alle Worte Alle Worte, die mit A anfangen Alle Worte, die mit AB anfangen 18 Tries (2) Beispiel: Namensindex (Benjamin, Bennett, Bettina, Brigitte, ...) Vorgehen bei der Suche in Tries: Für jedes Zeichen des Suchschlüssels wird ausgehend der Wurzel der jeweilige Verweis verfolgt, bis der Datensatz gefunden wird 19 Probleme bei der Verwendung von Tries • Ungleichmäßig verteilte Daten führen zu unausgeglichenen z.T. entarteten Suchbäumen: – nicht vorkommende Buchstabenkombinationen ("QX„ "QXY" etc.) führen zum Ende des Suchpfades bzw. zu Werten in Knoten ohne Verweise • Längere singuläre Worte führen zu Knoten, die nur einen Nachfolger haben und entarten im weiteren Verlauf zu Listen => Dies erzeugt ein ungünstiges Verhältnis von inneren Knoten zu Blättern Beispiel: „Xylophonspielergewerkschaftsfunktionär“ 20 Patricia-Bäume (1) • Weiterentwicklung von Tries zur Vermeidung entarteter Strukturen • Patricia steht für Pracitical Algorithm to Retrieve Information Coded in Alphanumeric • Ursprüngliche Form bezieht sich auf Binärzahlen • Grundidee: Teile von Zeichenketten, die im weiteren Vergleich nicht zu Verzweigungen führen, werden übersprungen • Umsetzung – Jeder Knoten enthält die Anzahl der zu überspringenden Zeichen – Jeder Knoten enthält nur die Buchstaben, die für einen Vergleich relevant sind 21 Patricia-Bäume (2) Beispiel: Patricia-Baum zur Speicherung der Worte Programm, Programmiersprache, Programmierung, Programmtest, Prozedur, Prozess 22 Patricia-Bäume • Vorteile von Patricia-Bäumen: – Eine gegenüber Tries komprimierte Darstellung – Reduzierung der bei der Suche zu „durchwandernden“ Knoten insbesondere bei sehr langen seltenen Worten • Variante des Patricia-Baumes: Präfix-Baume – In Präfix-Bäumen wird zusätzlich zum Index des zu testenden Zeichens auch der Wert des übersprungenen Teilwortes im Knoten abgespeichert 23