KONTEXTFREIE GRAMMATIK

Slides:



Advertisements
Ähnliche Präsentationen
Christian Scheideler SS 2009
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
Komplexität und Phasenübergänge
Sortieren I - Bubblesort -
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
8. Formale Sprachen und Grammatiken
2. Kapitel: Komplexität und Komplexitätsklassen
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Einführung in Berechenbarkeit und Formale Sprachen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Notationen A = ist eine endliche, nichtleere menge,
Grammatiken, Definitionen
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: Objektorientierte Programmierung
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Konstruktoren.
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 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (12 – Kellerautomaten, PDA) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Semantik von Prolog & Unifikation
Prolog Grundkurs WS 98/99 Christof Rumpf
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
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
Christian Schindelhauer
DVG Klassen und Objekte
Routenplanung & Komplexität.
Routenplanung & Komplexität. Lernziele Sie haben den Dijkstra-Algorithmus nachvollzogen. Sie haben das Konzept der Komplexität eines Algorithmus verstanden.
Effiziente Algorithmen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt WS 06/
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Dynamische Datentypen
2.4 Rekursion Klassifikation und Beispiele
Formale Sprachen Grammatiken und die Chomsky-Hierarchie
Entwurf und Implementierung eines Scanner-Generatorsystems
Städtisches Gymnasium Beverungen Friedel Berlage
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Noam CHOMSKY, Sheila GREIBACH
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Informatik III Christian Schindelhauer Wintersemester 2006/07
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Arne Vater Wintersemester 2006/ Vorlesung
7. Formale Sprachen und Grammatiken
Kapitel 4:Die Chomsky Hierarchie
Algorithmen und Datenstrukturen 1 SS 2002
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Sprachen und Programmiersprachen
 Am Ende der letzten Stunde hatten wir über die Grenzen unserer Automaten-Modell gesprochen. Dr. Lars Ettelt2  Tipp: Parkhaus.  Einfahrt erst wenn.
KONTEXTFREIE GRAMMATIK
KONTEXTFREIE GRAMMATIK
 Präsentation transkript:

KONTEXTFREIE GRAMMATIK Theoretische Informatik: Formale Sprachen/Automaten KONTEXTFREIE GRAMMATIK

Planung Kontextfreie Grammatik & context free art KFG  formale Sprachen & Automaten Endliche Automaten und regular expressions Kellerautomaten & die Erfindung des Stack Turing Maschinen & Berechenbarkeit

Das Theorem der Infinite Monkeys: Wenn unendlich viele Affen unendlich lange zufällig auf einer Schreibmaschine herumtippt, dann wird fast sicher irgendwann Shakespeares Hamlet dabei herauskommen.

Das Theorem der Infinite Monkeys: Wahrscheinlichkeit dafür, dass die ersten n Buchstaben richtig sind: 2: 20: alle: ≈ -∞

Das Programm AFFE_0.1 Mit welchen Strategien könnte man bewirken, dass ein Computer grammatikalisch wohlgeformte Texte generiert?

Ersetzungsregeln (transitions) Terminals (Endsymbole) AFFE_1.0 Startsymbol Ersetzungsregeln (transitions) S  Af Af  Hoppla! | Geh! | Autsch! | Nicht! Terminals (Endsymbole) Ableitungs- baum: S Af Hoppla!, Geh!, Autsch!, Nicht!

AFFE_1.1 S  Af S  N V Af  Hoppla! | Geh! | Autsch! | Nicht! N  Anna | Fred | Supermann | Er V  lebt | isst | rennt Ableitungs- bäume: S S Af N V Hoppla!, Geh!, Autsch!, Nicht! Anna, Fred, Supermann, Er lebt, isst, rennt

AFFE_1.2 S  Af S  N Vitr S  N Vtr N Af  Hoppla! | Geh! | Autsch! | Nicht! N  Anna | Fred | Supermann | Er Vitr  lebt | isst | rennt Vtr  mag | sieht | trifft Ableitungsbäume?

AFFE_1.3 S  Af S  Nnom Vitr S  Nnom Vtr_akk Nakk Af  Hoppla! | Geh! | Autsch! | Nicht! Nnom  Anna | Fred | Supermann | Er Nakk  Anna | Fred | Supermann | Ihn Vitr  lebt | isst | rennt Vtr_akk  mag | sieht | trifft Ableitungsbäume?

Rekursion (0) Anna rennt. (1) Anna, die Fred mag, rennt. (2) Anna, die Fred, der Supermann sieht, mag, rennt. (0) Der Hund rennt. (1) Der schwarze Hund rennt. (2) Der schwarze böse Hund rennt. (3) Der schwarze böse grosse Hund rennt. (4) ... (0) Anna rennt. (1) Anna rennt und Fred isst. (2) Anna rennt und Fred isst aber Supermann lebt.

AFFE_2.0 S  N Vitr S  N Vitr Konj S //hier ist die Rekursion S  . //hier ist das Stoppsymbol N  Anna | Fred | Supermann | Er Vitr  lebt | isst | rennt Konj  und | aber | weil Ableitungsbäume?

Context-Free Art (CFA) entdecken Ressourcen (in CFA Material) EinführungsTutorial.cfdh (deutsch) Beispiel1(-8).cfdg (selbst experimentieren!!!) Weitere Beispiele im CFA Applet unter „Examples“ oder unter „Help“ http://www.contextfreeart.org/ (documentation, gallery, forum) CFnutshell.pdf

AFFE_1.3 + AFFE_2.0 = AFFE_3.0  soll all diese Sätze generieren können!

AFFE_3.0 S  Nnom VP | Nnom VP Konj S VP  Nnom Vitr | Nnom Vtr Nakk Nnom  Anna | Fred | Supermann | Er Nakk  Anna | Fred | Supermann | Ihn Vitr  lebt | isst | rennt | lebt Vtr  mag | sieht | trifft Konj  und | aber | weil | denn Ableitungsbäume?

DIE CHOMSKY HIERARCHIE Theoretische Informatik: Formale Sprachen/Automaten DIE CHOMSKY HIERARCHIE

Überblick Contextfree Art Basar Übung zum kontextfreien Krähen (a – c) Abschluss der Exkursion in die Linguistik KFGs und Formale Sprachen Gesamtüberblick Einordnung und Abgrenzung von KFGs Üben

Kontextfreie Grammatiken Aus einem endlichen Vokabular können mit einer KFG (durch Rekursion) eine potentiell unendliche Anzahl „grammatischer“ Sätze gebildet werden (dieses „unendlich“ ist übrigens kleiner als das mit der Affentaktik erzielte) Wenn wir viel Aufwand in ein grosses Vokabular und komplizierte Produktionsregeln stecken (für die ganzen Kongruenzen) ... ... könnten wir so die Syntax der Deutschen Sprache erfassen?

Sind natürliche Sprachen kontextfrei? Es gab jahrzehntelange Diskussionen über die Frage, ob KFGs im Prinzip für natürliche Sprachen mächtig genug sind Die Frage konnte erst 1985 endgültig (negativ) beantwortet werden. Zwei Sprachen waren gefunden worden, die nachweisbar den Rahmen von KFGs sprengen: Zürichdeutsch und Bambara P.S: Bambara ist eine Mande-Sprache, die in Mali in Westafrika gesprochen wird. Sie zählt gemeinsam mit Dioula und Malinke zum Dialektkontinuum des Manding. Quelle: Wikipedia

Die meisten Sprachen (z.B. Standard-Deutsch)... erlauben Zentraleinbettungen Jan sagt, dass wir Hans ein Haus anstreichen helfen * aber keine Cross-Serial-Dependencies * Jan sagt, dass wir Hans ein Haus helfen anstreichen Quellen: http://www.brawer.ch/prolog/sprachenhierarchie.pdf W. J. Savitch, E. Bach, W. Marsh [eds.]: The Formal Complexity of Natural Language. Studies in Linguistics and Philosophy, vol. 33. 1987.

Zürichdeutsch ... erlaubt Zentraleinbettungen De Jan säit, dass mer em Hans es Huus aastriiche hälfed und Cross-Serial-Dependencies De Jan säit, dass mer em Hans es Huus hälfed aastriiche Quellen: http://www.brawer.ch/prolog/sprachenhierarchie.pdf W. J. Savitch, E. Bach, W. Marsh [eds.]: The Formal Complexity of Natural Language. Studies in Linguistics and Philosophy, vol. 33. 1987.

Kontextsensitive Grammatik Eine Kontextfreie Grammatik (KFG) kann nicht gleichzeitig beiden Arten von Verschachtelung abbilden, dazu braucht es eine Kontextsensitive Grammatik (KSG) Eine KSF funktioniert genau wie eine KFG. Zusätzlich erlaubt sie aber auch Ersetzungsregeln, die auf der linken Seite mehr als ein Symbol haben z.B.: Np Vp  Np S Vp

Was ist eigentlich eine Grammatik Was ist eigentlich eine Grammatik? Schulgrammatik | Kontextfreie Grammatik | Grammatik im Gehirn geht es um Produktion oder Rezeption? beispielhaft oder funktional? deskriptiv oder präskriptiv/normativ? empirisch oder abstrakt? angeboren oder erlernt? kann man Syntax und Semantik trennen? (und was ist mit Morphologie?)

Noam Chomskys Ansatz Vorteil: Probleme: Linguistik wird funktional (exakt) Probleme: Kompetenz/Performanz Unterscheidung  Chomskys Theorie ist nicht empirisch falsifizierbar Semantik? Lernbarkeit? KFG reicht nicht, KSG ist zu mächtig, und es gibt andere Arten, Syntax zu formalisieren

Formale Sprachen und Automaten Endlicher Automat Linear beschränkte Turingmaschine Allgemeine (Phrasenstruktur-)Grammatik Kontextsensitive Grammatik Kontextfreie Grammatik Wie gehören diese Begriffe zusammen? Turingmaschine Reguläre Grammatik Kellerautomat www.herr-rau.de/wordpress/2009/01/formale-sprachen-teil-1-die-chomsky-hierarchie.htm

Chomsky Hierarchie: L(0) ∈L(1) ∈L(2) ∈L(3) rekursiv aufzählbare Sprachen (Typ 0) allgemeine Grammatik allgemeine Turingmaschine kontextsensitive Sprachen (Typ 1) kontext-sensitive G. lineare TM kontextfreie Sprachen (Typ 2) kontext-freie G. Keller-automat reguläre Sprachen (Typ 3) reguläre Grammatik endlicher Automat

post_rau_fragen.docx (Partnerarbeit) Wie heisst ein Ausdruck, den eine Formale Sprache hervorbringt oder prüft? Worin unterscheiden sich Sprache, Grammatik und Automat? Was ist das Verhältnis zwischen regular expressions und endlichen Automaten? Welche Übergänge eines endlichen Automaten zeichnet Herr Rau mit Bleistift? Wie lange braucht ein endlicher Automat, um das Wortproblem zu beantworten? Für welche Arten von Ausdrücken reicht eine reguläre Sprache nicht aus? Was genau bedeutet kontext-sensitiv? Warum heissen Sprachen vom Typ 0 semi-entscheidbar? Warum sind Typ 1 Sprachen entscheidbar? Worin unterscheiden sich die verschiedenen Sprachtypen in Bezug auf die Produktionsregeln? Können sie jetzt die beiden verbleibenden Fragen (d & e) im Aufgabenblatt zum kontextfreien Krähen beantworten? Warum beschäftigt sich die Informatik mit formalen Sprachen?

schrittweise erweitern Java-Syntax als KFG formulieren (Ergebnisse mit contextfreegrammar.jar überprüfen) Deklaration von Variablen Operatoren +, -, *, /, ... <, >, ==, ... () – auch verschachtelt Loops (while, for, ...) Methoden schrittweise erweitern

Theoretische Informatik: Formale Sprachen/Automaten ENDLICHE AUTOMATEN

Überblick Formale Sprachen Äquivalenzbeziehung, jede Grammatikart kann in einen entsprechenden Automaten umgewandelt werden (und umgekehrt) Formale Sprachen Chomsky-Hierarchie Sprachtyp Grammatikart Akzeptierende Maschine Typ 0 rekursiv aufzählbare Sprachen allgemeine (Phrasen-struktur-)Grammatik Turingmaschine Typ 1 kontextsensitive Sprachen kontextsensitive Grammatik linear beschränkte Turingmaschine Typ 2 kontextfreie Sprachen kontextfreie Grammatik Kellerautomat Typ 3 reguläre Sprachen reguläre Grammatik endlicher Automat Musterlösung Hierarchische (Einschluss-)Beziehung Sprachen werden zunehmend allgemeiner und mächtiger, aber auch komplizierter und ressourcenhungriger kann auch als RegEx formuliert werden, wenn Akzeptor

Formale Definition reguläre Sprache L(3) = {T, N, S, E, P} L: Language (in Klammern steht oft der Typ) T: endliche Menge der Terminalsymbole N: endliche Menge der nicht-Terminalen Symbole S: Startsymbol; S ∈N (E: Endsymbol; E ∈T) P: endl. M. von Produktionsregeln; P ⊆ N  T [N] L(Typ) definiert eine (meist unendliche) Menge von Worten dieser Sprache und ermöglicht es in endlicher Zeit zu berechnen, ob ein gegebenes Wort zu dieser Sprache gehört ( = Wortproblem)

Formale Definition endlicher Automat M = {Q, Σ, S, E, δ} M: Maschine, Automat Q: endliche Menge von Zuständen Σ: Alphabet, endliche Menge von Zeichen S: Startzustand des Automaten; s ∈Q E: endliche Menge von Endzuständen; s ∈Q δ: endl. M. von Übergangsrelationen; δ ⊆ Q × Σ × Q Für jeden Automaten M gibt es eine äquivalente Sprache L und umgekehrt. Akzeptierende Endliche Automaten, bzw. reguläre Sprachen, können auch als regular expressions formuliert werden

Formales: Grammatiken Produktionsregeln (Ersetzungsregeln, transitions): x  y (x :: y, x := y, x = y) Markierung von Terminalen: ‘x‘ (“x“, <x>) Vereinfachungen auf der rechten Seite: x | y bedeutet x ODER y [x] bedeutet optional (0 oder 1 x) {x} bedeutet 0, 1 oder n x

Formales: Endlicher Automat als Zustandsdiagramm/Übergangsgraph Kreise = Zustände Doppelkreis = Stoppzustand, wird erreicht durch Eingabe ε Startzustand („es kann nur Einen geben!“) Pfeile = Übergänge; Label = Eingabe, die diesen Übergang bedingt

Formales: Regular expressions Minimalsyntax (alles weitere lässt sich hieraus ableiten): | bedeutet ODER * bedeutet 0 bis n mal (das vorhergehende Zeichen) () Gruppierung ε leeres Zeichen Beispiele: a|b* steht für {ε, a, b, bb, bbb, ...} (a|b)* steht für {ε, a, b, aa, ab, ba, bb, aaa, ...} ab*(c|ε) steht für {a, ac, ab, abc, abb, abbc, ...}

Was tut diese reguläre Sprache? Zustandsdiagramm: Grammatik: Regular Expression: S  ‘b‘ S | ‘a‘ X | ‘b‘ X  ‘b‘ X | Y Y  ‘a‘ | ‘a‘ S Beinhaltet eine gerade Anzahl ‚a‘s (b|ab*a)* Lösungshilfe: a durch 1 ersetzen, und b durch 0

Exorciser (s. Link im Wiki) Löse jeweils 2-3 der einfachen Aufgaben zu: Automatenkonstruktion RegEx  Endlicher Automat Endlicher Automat  RegEx

Endliche Automaten überall

Endliche Automaten überall Zustand Bedingung Folgezustand Patrol PlayerIsNear Attack OwnHealth < 25 Flee PlayerIsDead NOT PlayerIsNear

Definiere, mit dem jeweils praktischsten Formalismus ... Die (reguläre) Sprache aller gültigen E-Mail- Adressen in den TLDs ch, de und com Einen Automaten, der Tickets für CHF 1.50 verkauft und Münzen zu 1 und ½ Franken, sowie 20 und 10 Rappen annimmt Die Funktionen der max. zwei Knöpfe (d)einer digitalen Armband- oder Stoppuhr

Noch ein Beispiel: Sprachtyp ? T = { ’h’, ’a’, ’l’, ’e’, ’u’, ’j’} N = { FROHLOCKE, HA, LE, LU, JA } S = FROHLOCKE P = { Frohlocke  HA ’l’ LE LU JA HA  ’h’ ’a’ {HA} LE  ’l’ ’e’ {LE} LU  ’l’ ’u’ {’u’} JA  ’j’ ’a’ } Sprachtyp ?

Frohlocke Frohlocke  HA ’l’ LE LU JA HA  ’h’ ’a’ {HA} LE  ’l’ ’e’ {LE} LU  ’l’ ’u’ {’u’} JA  ’j’ ’a’ Leite 3 gültige Worte ab und überprüfe sie auf www.pns-berlin.de/fortbildungen/tisep06/frohlocke/frohlocke.html Schreibe die Produktionsregeln für die Sprache „Frohlocke“ so um, dass sie den Anforderungen an eine reguläre Sprache entsprechen Formuliere die Sprache „Frohlocke“ als Zustandsdiagramm eines Endlichen Automaten Formuliere die Sprache „Frohlocke“ als RegExp

Frohlocke-Automat Das ist die umständliche Version, mit Silben als Zeichen (z.B. ‘ha‘, ‘le‘, ...) wird es etwas einfacher

Programmieren jUnit-Tests (test-driven development) GUI-Programming (basics) Datenstrukturen (stack) evtl. Interfaces

Exkurs Software Development

Linear Development (Wasserfallmodell) Requirements Design Implementation Verification Maintenance

Iterative Development (Spiralmodell) Design Implementation Testing Evaluation Planning Requirements Initial Idea Iteration Deployment

Test Driven Development Design Implementation Testing (automated) Evaluation Planning (minimal) Requirements (as Tests) Initial Idea Deployment

jUnit-Tests in NetBeans

Test Driven Programming Anforderungen an das Programm identifizieren und ... Fehler reproduzieren und ... ... als jUnit-Tests formulieren Code schreiben oder umschreiben und STÄNDIG TESTEN Alle Tests grün Bugs gefunden Warum? man weiss immer genau, was das nächste Ziel ist, und wann man es erreicht man ist gezwungen, diese Nahziele präzise festzulegen man bemerkt, wenn etwas nicht mehr funktioniert, das schon ging man spart sich eine Menge Testen „von Hand“

Zusammenfassung: Als Erstes: Anforderungen als Tests formulieren Tests für alle nicht trivialen Methoden (besonders boundary cases!) Tests nacheinander (einzeln) abarbeiten Nach jeder nicht-trivialen Änderung testen Bei nicht-trivialen Problemen/Bugs: Test schreiben zum Nachweis, dann erst korrigieren Erst wenn alle Tests grün sind über die nächsten Schritte nachdenken  als Tests formulieren

Der Haleluja-Automat (Vorlage im WIKI) Test-Klassen anschauen und verstehen evtl. Zusatzinfo zu jUnit-Tests im Netz suchen Methoden der beiden Parser-Klassen implementieren, bis alle Tests grün sind ggf. weitere Tests hinzufügen GUI-Funktionalität implementieren es fehlt nur eine Methode, s. TODO & comment Selbständig erweitern oder mich fragen

Theoretische Informatik: Formale Sprachen/Automaten KELLERAUTOMATEN

Klammergebirge ‚That the same computer that solved a problem could prepare its own instructions was a critical moment in the birth of software‘ (Paul E. Ceruzzi, 1998)

Aber wie arbeitet man solche Instruktionen ab? Rüthishausers Algorithmus (1951) suche die höchste schliessende Klammer gehe rückwärts bis zur öffnenden Klammer berechne den Ausdruck dazwischen lösche die Klammern und fang von vorne an Problem: O(n2) d.h. der Aufwand wächst mit dem Quadrat der Länge des Ausdrucks

Die Lösung des Problems Wofür ist Patent de1094019? Wofür bekam Friedrich Bauer 1988 den IEEE Computer Pioneer Award zugesprochen (sozusagen der Nobel Preis der Informatik) Und was hat das mit Kellerautomaten zu tun?

Der Stack (Stapelspeicher/Kellerspeicher) Eine Datenstruktur LIFO-Prinzip (Last-In-First-Out) Operationen: push pop Kellerautomat: Das Klammergebirge kann so von links nach rechts abgearbeitet werden  O(n)

Klammerung verifizieren L = {anbn} = {ab, aabb, aaabbb, ... } Ein Endlicher Automaten als Akzeptor? ... bräuchte unendlich viele Zustände Um die Sprache zu erkennen, muss sich der Automat die Anzahl der bereits gelesenen a‘s merken  im Stack 

Programmieraufgabe Eigenen Stack als Klasse implementieren muss eigentlich nur mit STRINGS funktionieren Erweiterung 1: weitere Datentypen Erweiterung 2: Stack als verkettete Liste (von „Items“) Kellerautomat implementieren soll die Stack-Klasse benutzen soll (allgemeine) Palindromsprache akzeptieren Erweiterung 1: soll Klammerung verifizieren: () [] & {} Erweiterung 2: GUI für den Automaten

Einen Stack implementieren Konstruktor myStack() Nachher Ein leerer Stapel ist erzeugt. Methode isEmpty(): boolean Nachher Die Methode liefert den Wert true, wenn der Stapel keine Elemente enthält, sonst liefert sie den Wert false. Methode push (Object pObject) Vorher Der Stapel ist erzeugt. Nachher pObject liegt oben auf dem Stack. Methode pop(): Object Vorher Der Stapel ist nicht leer Nachher Das oberste Element wird zurückgegeben und vom Stapel entfernt. Methode peek(): Object Vorher Der Stapel ist nicht leer. Nachher Das oberste Element wird zurückgegeben, aber nicht vom Stapel entfernt.

Basierend auf JAVA-Array String[] keller = new String[4]; //default value is NULL int topPos = -1; Achtung: Arrays habe fixe Länge! was tun, wenn der Stack zu gross wird? Achtung: Arrays speichern nur Variablen eines Typs! wie hält man den Typ möglichst allgemein? topPos = 0

Programmieraufgabe Eigenen Stack als Klasse implementieren muss eigentlich nur mit STRINGS funktionieren Erweiterung 1: weitere Datentypen Erweiterung 2: Stack als verkettete Liste (von „Items“)

Stack als linked list private Klasse „Item“ (oder „Node“) mit Inhalt und Pointer auf nächstes Item  Items können verschiedene Datentypen haben

Palindromsprache Bemerkung: Version 1: S  ε | ‘a‘ {S} ‘a‘ | ‘b‘ {S} ‘b‘ | ... (soll mit beliebigen Zeichen als Terminalsymbole funktionieren) Version 2: S  ε | {S} ‘a‘ {S} ‘a‘ {S} | {S} ‘b‘ {S} ‘b‘ {S} | ... Bemerkung: Die allgemeinere Version 2 ist einfacher zu implementieren  Version 1 als Erweiterung

Programmieraufgabe Kellerautomat implementieren sollte deine Stack-Klasse benutzen  notfalls java.util.Stack soll (allgemeine) Palindromsprache akzeptieren  zuerst Tests schreiben Erweiterung 1: soll Klammerung verifizieren: () [] & {} Erweiterung 2: GUI für den Automaten

Datenstrukturen in JAVA: Collections

Take home message Datenstrukturen sind nützlich selbst als Klasse schreiben oder JAVA Collections benutzen Stacks werden viel gebraucht Parsen/kompilieren eines Programms Ausführungsreihenfolge (runtime stack bei error) Kellerautomaten programmieren ist einfach wenn man einen Stack hat

Ein Kellerautomat ... !Achtung: ... kann entscheiden, ob ein gegebenes (JAVA-)Programm syntaktisch korrekt ist  ansonsten compile-time-Error !Achtung: Die Menge aller (JAVA-)Programme ist kontextfrei Aber nicht die Menge der in JAVA ausdrückbaren Berechnungen

Theoretische Informatik: Formale Sprachen/Automaten Turing Maschinen

Turing Maschine alter Zustand altes Zeichen neuer Zustand neues Zeichen Bewegung z0 1 rechts ε z1 keine links z2 Endzustand

http://aturingmachine.com WIKI: ab_turingmaschine.docx WIKI: busybeaver.docx

TM für binäres Inkrementieren ☐

Berechenbarkeit & Komplexität Theoretische Informatik: Berechenbarkeit & Komplexität

Lernziele Was besagt die Church-Turing-These? Wie kann die Nicht-Berechenbarkeit eines Problems bewiesen werden? Worum geht es bei der Bestimmung der Komplexität eines Algorithmus? Was ist das P-NP-Problem? Was ist die Relevanz des P-NP-Problems?

Was ist ein Algorithmus? KURT GÖDEL: Ein Algorithmus ist eine Folge von Regeln zur Bildung mathematischer Funktionen aus einfacheren mathematischen Funktionen. ALONZO CHURCH: Er verwendete einen ähnlichen Formalismus, den er λ-Kalkül nannte. EMIL POST: Er ersann einen Mechanismus, der Symbole manipuliert und den er Produktionssysteme nannte. STEPHEN KLEENE: Er definierte eine Klasse mathematischer Objekte, die er rekursive Funktionen nannte. ALAN TURING: Ein Algorithmus ist das, was auf der nach ihm benannten Turing-Maschine ausführbar ist

Church-Turing-These (1) Überraschenderweise stellte sich im Laufe der Zeit heraus, dass alle auf den ersten Blick so verschiedenen Ansätze gleichwertig sind. Als Folge dieser Gleichwertigkeit wurde die folgende Aussage eine weitverbreitete Annahme: Alle vernünftigen Definitionen von „Algorithmus“, sind gleichwertig und gleichbedeutend.

Church-Turing-These (2) Wenn alle Formulierungen gleichwertig sin, dann können wir uns auch gleich auf ein „Referenzmodell“ festlegen: Turingmaschinen sind formale Modelle von Algorithmen, und kein Berechnungsver- fahren kann „algorithmisch“ genannt werden, das nicht von einer Turingmaschine ausführbar ist.

Church-Turing-These (3) Eine Reformulierung zeigt den Wert dieser These: Jedes algorithmische Problem, das in irgendeiner Programmiersprache programmiert und auf irgendeinem dafür geeigneten Computer ausgeführt werden kann (sogar auf Computern, die noch nicht gebaut sind, aber prinzipiell gebaut werden könnten), und selbst wenn es unbeschränkt viel Zeit und Speicherplatz für immer größere Eingaben benötigt — jedes solche Problem ist auch durch eine Turing-Maschine lösbar! Und alles, was mit einer Turing-Maschine nicht berechenbar ist, lässt sich überhaupt nicht berechnen.

Church-Turing-These (original) „Die Klasse der Turing-berechenbaren Funktionen ist genau die Klasse der intuitiv berechenbaren Funktionen“ Diese These ist kein mathematischer Satz und sie kann auch nicht bewiesen werden. Bis heute ist aber kein einleuchtendes Gegenbeispiel erbracht worden.  alle Turing-mächtigen Rechenmodelle sind gleichwertig  was eine Turingmaschine nicht berechnen kann, kann prinzipiell nicht berechnet werden

TM = allgemeines Rechenmodell Turing Maschine Vorteile Simulation aller bekannter Formalismen einfach, mechanisch umsetzbar anschaulich Nachteile unendlich langes Band (?!) Programmierung kompliziert Ablauf wird aus Struktur nicht ersichtlich ineffizient, schlechte Laufzeit Random Access Maschine

Die Grenzen der Berechenbarkeit Das Halteproblem für Java-Programme: Gibt es ein Java-Programm, mit dessen Hilfe man für jedes beliebige Java-Programm entscheiden kann, ob es mit jeder beliebigen Eingabe nach endlich vielen Schritten terminiert oder nicht?

Umformulieren zum Selbstanwendbarkeitsproblem Gibt es ein Java-Programm, das von jedem beliebigen Java-Programm, das sich selbst als Eingabe hat, entscheidet, ob es nach endlich vielen Schritten anhält oder nicht?

der hypothetische Stopptester class Stopptester { static boolean esStoppt; public static void main(String args[]) { // hier wird das eingegebene Programm // untersucht und je nach Ergebnis // die Variable esStoppt gesetzt. if (esStoppt) Out.println("Das Programm ist selbststoppend."); else Out.println("Das Programm ist nicht selbststoppend."); }

daraus abgeleitet: Seltsam class Seltsam { static boolean esStoppt; public static void main(String args[]) { // hier wird das eingegebene Programm untersucht und je nach // Ergebnis die Variable esStoppt gesetzt. // Alles so wie in Stopptester. if (esStoppt) { Out.println("Das Programm ist selbststoppend."); while (true) { // Endlosschleife } } else { Out.println("Das Programm ist nicht selbststoppend."); }

Ein äquivalenter Beweis aus der Aussagenlogik: Kann es einen Menschen geben, der immer die Wahrheit spricht? (egal, was er sagt) Die Antwort ist: Nein Beweis durch Widerspruch: Wir legen ihm die Aussage „ich lüge immer“ in den Mund Entweder ist die Aussage wahr, was ja bedeutet, dass er eben nicht immer die Wahrheit sagt Oder er sagt immer die Wahrheit, dann ist aber diese Aussage nicht wahr

Zusammenfassung Nimm an, es kann ein Programm Stopptester geschrieben werden. Benutze es, um damit ein Programm Seltsam zu schreiben. Zeige, dass das Programm Seltsam irgendeine undenkbare Eigenschaft hat (hier: es kann weder selbststoppend noch nicht-selbststoppend sein). Folgere, dass die Annahme in Schritt 1 falsch ist. Allgemein kann man zeigen, dass es kein Programm geben kann, das für ein beliebiges anderes Programm eine beliebige nicht-triviale Eigenschaft testet Damit ist auch bewiesen, dass es wohlformulierte Probleme gibt, die prinzipiell nicht gelöst werden können Illustration des Halteproblems für Turing Maschinen: http://www.th.schule.de/th/lfk-informatik/alteSeite/material/tb6/halteprob.swf

Berechenbarkeit von Algorithmen Können wir alles, was theoretisch berechenbar ist, auch tatsächlich berechnen?  was heisst hier „praktisch“? prinzipiell nicht berechenbar prinzipiell berechenbar, praktisch nicht praktisch berechenbar

Turm von Hanoi (original mit 64 Scheiben) Anzahl Züge: 3 Scheiben 7 Züge n Scheiben  2n-1 Züge

Komplexitätsabschätzung Es geht um asymptotische Laufzeit (Speicherbedarf) Konstanten und geringere Faktoren ignorieren grosse Eingaben/Parameter Worst, best & average case  Abschätzen, wie sich der Rechenaufwand des besten Algorithmus für ein Problem im ungünstigsten Fall mit immer grösser werdenden Eingaben verändert

Komplexitätsabschätzung Wie verhält sich die asymptotische Laufzeit für folgende Algorithmen? (wie ändert sich die Anzahl der Rechenschritte, wenn man die Anzahl der Elemente im Array verdoppelt) Suchen eines Elements im Array Sortieren der Elemente des Arrays Alle möglichen Permutationen ausgeben

Komplexitätsklassen

Komplexitätsklassen noch praktikabel nicht mehr praktikabel

NP: Komplexität unbekannt http://en.wikipedia.org/wiki/List_of_NP-complete_problems

Formale Sprachen & Komplexität Chomsky-Hierarchie Rechnermodell Komplexität Typ 0 Turingmaschine unlösbar: max O(∞) NP: max O(?) P: max O(nk) Typ 1 linear beschränkte Turingmaschine Typ 2 Kellerautomat max O(n3) Typ 3 endlicher Automat max O(n) Musterlösung

NP-vollständige Probleme nicht berechenbar NP P NP-vollständige Probleme Sie sind entscheidbar (=berechenbar). Sie besitzen Lösungen in exponentieller Zeit. Für keines dieser Problem wurde je ein Algorithmus mit Polynomialzeit gefunden. Niemand konnte bisher beweisen, ob sie exponentielle Zeit benötigen müssen. Alle diese Probleme sind miteinander verwandt: Sollte jemals für ein einziges Problem ein Algorithmus mit Polynomialzeit gefunden werden, dann ergäben sich sofort Polynomialzeit-Algorithmen für alle anderen Probleme. Umgekehrt gilt das allerdings auch (Beweis, dass NP≠P) http://en.wikipedia.org/wiki/List_of_NP-complete_problems

P == NP ? Das P-NP-Problem gilt als eines der wichtigsten offenen Probleme der Informatik und wurde vom Clay Mathematics Institute in die Liste der Millennium-Probleme aufgenommen – auf seine Lösung ist eine Preis von 1 Million $ ausgesetzt. Frage: Rein finanziell gesehen wäre man bescheuert, den Preis in Anspruch zu nehmen, falls man einen Beweis für die Vermutung P == NP gefunden hätte. Warum?

Lernziele Was besagt die Church-Turing-These? Wie kann die Nicht-Berechenbarkeit eines Problems bewiesen werden? Worum geht es bei der Bestimmung der Komplexität eines Algorithmus? Was ist das P-NP-Problem? Was ist die Relevanz des P-NP-Problems?

Themen für die Probe Praktische Aufgaben wie im Unterricht Grammatiken; EA, KA & TM; basic RegExp Exorciser-Übungen (nicht CFA) Theoretische Konzepte Chomsky Hierarchie, etc. (s. Skript von Herrn Rau) Berechenbarkeit & Komplexität (grob, s. Lernziele) Programmieren (Theorie) test-driven development Datenstrukturen (Stack)