Theoretische Informatik 2

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung Compilertechnik Sommersemester 2008
Advertisements

6. Regelbasierte Systeme
Christian Schindelhauer
Schnelle Matrizenoperationen von Christian Büttner
Invariante und Algorithmenentwurf
Zusammenfassung der Vorwoche
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Lösung 7.1 Syntax und Semantik
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Christian A. Kopf Institut für Informatik FU Berlin Episode Recognizer Framework - Rahmenwerk zur Episodenerkennung.
Grammatiken, Definitionen
Einige entscheidbare bzw. rekursiv aufzählbare Sprachen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Grammatiken beschreiben Sprachen L µ *, indem.
Christian Schindelhauer
1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester.
Java: Grundlagen der Sprache
SWITCH - Anweisung.
ARRAY oder FELD oder VEKTOR
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (05 – Reguläre Ausdrücke) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (06 – Reduktion endlicher Automaten) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (04 – Automaten mit ε-Transitionen) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (03 – Nichtdeterminierte endliche Automaten) Prof. Dr. Th. Ottmann.
Reguläre Sprachen Karin Haenelt.
© Karin Haenelt 2006, Äquivalenzen Reg.Ausdrücke, Reg.Sprachen, EA ( ) 1 Reguläre Sprachen Karin Haenelt.
Dynamische Webseiten mit PHP
Zusammenfassung Vorwoche
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Christian Schindelhauer
Christian Schindelhauer
Christian Schindelhauer
Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester 2005/ Vorlesung Dominic Dumrauf.
Christian Schindelhauer
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Einführung in Java1 Einführung in JAVA.
Einführung in die Programmierung Datensammlung
Thema: Fibonacci-Zahlen
Bestimmung des ggT zweier Zahlen
Theoretische Informatik 2
Herzlich Willkommen zu „Einführung in die Programmierung mit Java“
Grenzen der Regularität
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Vier/Fünf-Farben-Satz
Christian Schindelhauer Wintersemester 2006/07 8. Vorlesung
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
2.4 Rekursion Klassifikation und Beispiele
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 3: Potenzreihen und kontextfreie Sprachen (Vgl. Buch von A. Salomaa)
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Informatik III Christian Schindelhauer Wintersemester 2006/07
Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung
Christian Schindelhauer Wintersemester 2006/07 2. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Natürliches Programmieren
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
7. Formale Sprachen und Grammatiken
Kapitel 4:Die Chomsky Hierarchie
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
 Präsentation transkript:

Theoretische Informatik 2 Tutorium #1 18.4.2002 (Fabian Wleklinski)

Reguläre Ausdrücke Unterschied zwischen leerer Sprache und Sprache aus leerem Wort! R1:= L(R1)={} R2:= L(R2)={} In vielen Programmiersprachen: PERL, PHP, Java, C++, VisualBasic, JavaScript, ... In vielen Werkzeugen: grep, find, vi, Emacs, WinWord,... In SQL-Datenbanken: MSSQL, Oracle, DB/2, MySQL, PostgreSQL, Ingres, ... Als „Subtechnologie“: z.B. XML Standard: XPath

Reguläre Ausdrücke Implementierung basiert auf einer von drei Varianten: DFA, NFA (z.B. PERL) oder POSIX-NFA. Einsatzgebiete: Im Web: z.B. Formularvalidierung, ...! Clientseitig: z.B. Suchfunktionen, Filterregeln, ...

Reguläre Ausdrücke Beispiel aus PHP: $datum = "2001-05-12"; if (ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $datum, $regs)) { echo "$regs[3].$regs[2].$regs[1]"; } else { echo "Ungültiges Datumsformat: $datum"; }

Reguläre Ausdrücke Beispiel aus JavaScript: <html><head><title>Test</title> <!-- vertauscht Vor- und Nachname eines Namens --> <script type="text/javascript"><!-- function Ausgabe(Wert) { var Ausdruck = /(\w.+)\s(\w.+)/; Ausdruck.exec(Wert); alert(RegExp.$2 + ", " + RegExp.$1); } //--> </script> ...

Reguläre Ausdrücke >= JDK 1.4: < JDK 1.4: Package java.util.regex < JDK 1.4: z.B: http://jakarta.apache.org/regexp/index.html Beispiel: public static void main(String[] args) { String input = "Test für Regex 1xxx2 n444n."; Pattern p = Pattern.compile("\\d\\D+\\d"); Matcher m = p.matcher(input); if (m.find()) { System.out.println("Pos. " + m.start()); System.out.println("Text: "+m.group()); } }

Reguläre Ausdrücke Ein Mechanismus/Formalismus, um reguläre Sprachen (d.h. Mengen) zu beschreiben! Es gibt weitere Mechanismen! natürlichsprachlich Grammatiken (siehe Backus-Naur-Form) aussagenlogische Prädikate ...

Reguläre Ausdrücke Beschränkt! Z.B. gegebener XHTML-Code <body> <p> <b>Franz</b> fühlt sich unheimlich <b>fettgedruckt</b>! </p> </body> Wie nach beliebigen Elementen suchen? => kontextfreie Sprachen!

Reguläre Ausdrücke Aber warum doch REGEXP, wenn beschränkt? relativ leicht implementierbar relativ intuitive Syntax verglichen mit anderen Notationen...  Endliche Automaten ohne Speicher und ohne Stack können Wortproblem für alle (!) regulären Sprachen in Linearzeit lösen!

Aufgabe 1.1 – Divison by Zero Bugs „Gibt es eine Eingabe, für die durch Null dividiert wird?“ Nur 1 Division im Code: „q=m/zaehler“ „n % i“dividiert auch, aber i kann nicht 0 werden! „Gibt es eine Eingabe, für die „zaehler“ Null wird?“ was ist der „zaehler“? „zaehler“ ist Anzahl gefundener Primzahlpaare „Gibt es eine Eingabe n, für die sich 2n nicht als Summe zweier Primzahlen darstellen lässt? => Goldbach‘sche Vermutung: Solche Eingaben gibt es nicht! Compiler müsste die Goldbach‘sche Vermutung widerlegen oder bestätigen!

Aufgabe 1.1 – Divison by Zero Bugs Goldbachsche Vermutung: „Jede gerade Zahl > 2 lässt sich als Summe zweier Primzahlen ausdrücken.“ Christian Goldbach: preußischer Mathemat. 1742 in pers. Brief an Euler formuliert brit. Verlag „Faber and Faber“ hat 1 Mio. $ für Beweis der Goldbachschen Vermutung ausgelobt für alle Zahlen unter 400 Billionen bewiesen! unbezweifelt, aber seit 250 Jahren unbewiesen!

Aufgabe 1.1 – Divison by Zero Bugs Deprimierend: Nach Kurt Gödel: nicht jeder wahre Satz der Mathematik ist beweisbar!  Konsequenzen für Entwicklungsabteilung Ziel mit an Sicherheit grenzender Wahrscheinlichkeit nicht erreichbar! Quintessenz: Komplexität vererbt sich von Problem zu Problem! Zurückführung andere Probleme, an denen sich Andere bereits die Zähne ausgebissen haben, spart viel sinnlose Arbeit!!!

Aufgabe 1.2 – Überflüssige Programmteile „Gibt es eine Anweisung im Programmcode, die nicht erreicht wird?“ Nehme Code aus 1.1 ersetze „q=m/zaehler“: if (zaehler==0){ printf(„Ich werde berühmt!“); } Problem lässt sich auch auf andere Probleme zurückführen z.B. auf den großen Fermat: xn+yn=zn für n>2 ist nicht für alle Zahlen lösbar Beweis erst Jahrhunderte später (1995) vollbracht

Aufgabe 1.3 – Arbeiten mit formalen Sprachen L1= ({a}{b}{c}+) z.B. abc,ac,bc,c L2= ({a,b}{c}+) z.B. bac,abababcc L3= (({a}{c}+)  ({b}{c}+)) z.B. a..c..,b..c..  Vermutung: L3  L1  L2 Beweis von L1  L2: für jedes w aus L1 gilt: w=w1w2 w3 wn mit wi‘s der Form: {a}{b}{c}+ Für jedes wi gilt: wi= wi,1wi,2wi,3 so dass: wi,1 aus {a} wi,2 aus {b} wi,3 aus {c}+

Aufgabe 1.3 – Arbeiten mit formalen Sprachen {a} {a,b}, {b} {a,b}  {a}  {a,b}, {b}  {a,b} wi,1 und wi,2  {a,b} wi,1wi,2  {a,b} Daher gilt für alle wi: wi = wi,1  wi,2  wi,3 wi  {a,b}  {c}+ w=w1w2 w3 wn  w({a,b}{c}+ ) =L2 L1  L2 gezeigt! Auch L1  L2 ??? Ja!!! bac  L2 bac  L1 

Aufgabe 1.3 – Arbeiten mit formalen Sprachen Beweis von L3  L1: wieder für w aus L3: w=w1w2 w3 wn mit wi‘s der Form: ({a}  {c}+)  ({b}  {c}+) also auch aus {a}  {b}  {c}+ also gilt für w: w  ( {a}{b}{c}+ ) L3  L1 gezeigt! Auch L3  L1 ??? Ja!!! abc  L1 abc  L3  Gesamtbeweis: L1  L2  L3  L1   L3  L1  L2

Aufgabe 1.4 – Finden regulärer Ausdrücke ={a,b,c} Ausdruck für L1 Wörter über , welche „abc“ enthalten! z.B. cbacabcccab „abc enthalten“ = „irgendwas - abc - irgendwas“ L1=L(R) mit R = (a+b+c)  abc  (a+b+c) Ausdruck für L2 Wörter über , welche „abc“ nicht enthalten! REGEXP bieten keinen Komplement-Operator Aber: für jedes Komplement eines REGEXP gibt es einen REGEXP! Idee: Zerlege alle Wörter aus L in Teilwörter!

Aufgabe 1.4 – Finden regulärer Ausdrücke L‘ sei die Menge aller Wörter über {a,b,c}, die auf „c“ enden, und davor nur a‘s und b‘s haben „abc“ nicht enthalten! kein „ab“ vorm „c“! Behauptung: L=(L‘)  {a,b} Schritt 1: Beweis von L  (L‘)  {a,b} kein Wort aus L‘ enthält „abc“ (per Def.) weil jedes Wort aus L‘ auf „c“ endet  kein Wort aus (L‘) enthält „abc“ – auch nicht über Wortgrenzen hinaus! also ist jedes Wort aus (L‘)  {a,b} auch in L

Aufgabe 1.4 – Finden regulärer Ausdrücke Schritt 1: Beweis von L  (L‘)  {a,b} Jedes Wort w aus L ist zerlegbar in einige auf „c“ endende Teilwörter, sowie einen „c“ nicht enthaltenden Rest w=w1w2 w3 wn Teilwörter wi aus L‘, letztes Teilwort aus {a,b}  w liegt in (L‘)  {a,b} Behauptung bewiesen: L=(L‘)  {a,b} !!!  Regulärer Ausdruck: Wörter aus L‘ sind „c“ oder „bc“ bzw. enden auf „ac“ oder „bbc“

Aufgabe 1.4 – Finden regulärer Ausdrücke REGEXP für L‘ L‘=L(R) mit R=(c+bc)+((a+b)  ((ac)+(bbc))) REGEXP für L insgesamt: L=L(R) mit R=[(c+bc)+((a+b)  ((ac)+(bbc)))]  (a+b) „ausklammern“ des „c“ ergibt: R=[(+b)+((a+b)  ((a)+(bb)))  c]  (a+b) 

Aufgabe 1.4 – Finden regulärer Ausdrücke Leichte Sprachen erfordern manchmal komplizierte REGEXP! oder Beschreibungen allgemein! Jeder Formalismus hat Stärken u. Schwächen DFA ist für beide Sprachen banal! DFAs machen Sinn!  Wie vollführt man das Komplement algorithmisch? REGEXP => DFA Komplement bilden DFA => REGEXP Konvertierung von DFAs/NFAs/REGEXP macht Sinn!