SS 2006 Einführung in die Informatik IV Ernst W. Mayr Fakultät für Informatik TU München http://www14.in.tum.de/lehre/2006SS/info4/ Sommersemester 2006 Info IV c Ernst W. Mayr Inhaltsverzeichnis 5. Mai 2. Juni 3. Juli 8. Mai 9. Juni 7. Juli 12. Mai 12. Juni 10. Juli 15. Mai 16. Juni 14. Juli 19. Mai 19. Juni 17. Juli 22. Mai 23. Juni 24. Juli 24. April 26. Mai 30. Juni 28. Juli 28. April 29. Mai Info IV c Ernst W. Mayr 1/388 Kapitel 0 Organisatorisches Vorlesungen: Mo 10:50–12:20, Fr 8:30–10:00 HS I (MI 00.02.001) Übung: 3SWS Tutorübung: bitte anmelden unter https://grundstudium.in.tum.de/ Umfang: 4V+3TÜ, 9 ECTS-Punkte Sprechstunde: Fr 12:00–13:00 oder nach Vereinbarung Info IV c Ernst W. Mayr 2/388 Vorkenntnisse: Einführung in die Informatik I/II/(III) Diskrete Strukturen I Weiterführende Vorlesungen: Effiziente Algorithmen und Datenstrukturen Automaten, Formale Sprachen, Berechenbarkeit und Entscheidbarkeit Komplexitätstheorie ... Webseite: http://wwwmayr.in.tum.de/lehre/2006SS/info4/ Info IV c Ernst W. Mayr 3/388 Übungsleitung: Hanjo Täubig, MI 03.09.039 ([email protected]) Sprechstunde: nach Vereinbarung Sekretariat: Frau Schmidt, MI 03.09.052 ([email protected]) Info IV c Ernst W. Mayr 4/388 Übungsaufgaben und Klausur: Ausgabe jeweils am Freitag in der Vorlesung bzw. auf der Webseite der Vorlesung Abgabe eine Woche später vor der Vorlesung Besprechung in der Tutorübung Klausur: Zwischenklausur (50% Gewicht) am 10. Juni 2006, 9–12 Uhr Endklausur (50% Gewicht) am 22. Juli 2006, 9–12 Uhr Wiederholungsklausur am 11. Oktober 2006, 9–12 Uhr bei den Klausuren sind keine Hilfsmittel außer einem handbeschriebenen DIN-A4-Blatt zugelassen Zulassungsvoraussetzung (außer für Studierende im Diplomstudiengang Informatik) sind 40% der erreichbaren Hausaufgabenpunkte vorauss. 10 Übungsblätter, das letzte am 7. Juli 2006, jedes 40 Punkte Info IV c Ernst W. Mayr 5/388 1. Ziel der Vorlesung Der Zweck dieser Vorlesung ist das Studium fundamentaler Konzepte in der Theoretischen Informatik. Dies umfasst das Studium der Grundlagen formaler Sprachen und Automaten, von Berechnungsmodellen und Fragen der Entscheidbarkeit, die Diskussion elementarer Algorithmen und Datenstrukturen sowie einiger grundlegender Konzepte der Komplexitätstheorie. Info IV c Ernst W. Mayr 1 Ziel der Vorlesung 6/388 Themengebiete werden also sein: Berechenbarkeitstheorie Betrachtung und Untersuchung der Grenzen, was Rechner überhaupt können Komplexitätstheorie Studium der Grenzen, was Rechner mit begrenzten Ressourcen leisten können Herleitung oberer und unterer Schranken Automatentheorie Rechner als endliche Systeme mit endlichem oder unendlichem Speicher Grammatiken Aufbau von Programmiersprachen, Ausdruckskraft, Effizienz der Syntaxanalyse Algorithmen grundlegende (effiziente) Verfahren und Datenstrukturen Info IV c Ernst W. Mayr 1 Ziel der Vorlesung 7/388 2. Wesentliche Techniken und Konzepte Formalisierung Rechner werden durch mathematische Objekte nachgebildet zu lösende Aufgaben werden mengentheoretisch als Problem definiert die Abfolge von Berechnungsschritten wird formalisiert die quantitative Bestimmung der Komplexität eines Verfahrens bzw. eines Problems wird festgelegt Simulation Verfahren zur Ersetzung eines Programms in einem Formalismus A durch ein Programm in einem anderen Formalismus B bei unverändertem Ein-/Ausgabeverhalten Info IV c Ernst W. Mayr 2 Wesentliche Techniken und Konzepte 8/388 Reduktion formale Beschreibung für “Problem A ist nicht (wesentlich) schwerer als Problem B” Diagonalisierung Auflistung aller Algorithmen einer bestimmten Klasse Beweis durch Widerspruch enger Bezug zu Paradoxa Info IV c Ernst W. Mayr 2 Wesentliche Techniken und Konzepte 9/388 3. Literatur Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman: The design and analysis of computer algorithms. Addison-Wesley Publishing Company, Reading (MA), 1976 Manfred Broy: Informatik: eine grundlegende Einführung - Teil 4: Theoretische Informatik, Algorithmen und Datenstrukturen, Logikprogrammierung, Objektorientierung. Springer-Verlag, Berlin-Heidelberg-New York, 1996 Gerhard Goos: Vorlesungen über Informatik, Bd. 3, Berechenbarkeit, formale Sprachen, Spezifikationen. Springer-Verlag, Berlin-Heidelberg-New York, 1997 Info IV c Ernst W. Mayr 10/388 John E. Hopcroft, Jeffrey D. Ullman: Introduction to automata theory, languages, and computation. Addison-Wesley Publishing Company, Reading (MA), 1979 Uwe Schöning: Theoretische Informatik — kurzgefasst. Spektrum Akademischer Verlag GmbH, Heidelberg-Berlin, 1997 Karin Erk, Lutz Priese: Theoretische Informatik: Eine umfassende Einführung. Springer-Verlag, Berlin-Heidelberg-New York, 2000 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to algorithms. McGraw-Hill Book Company, New York-St. Louis-San Francisco-Montreal-Toronto, 1990 Info IV c Ernst W. Mayr 11/388 Thomas Ottmann, Peter Widmayer: Algorithmen und Datenstrukturen. B.I., Mannheim-Leipzig-Wien-Zürich, 1993 Volker Heun: Grundlegende Algorithmen. Vieweg, 2000 Ingo Wegener: Theoretische Informatik. B.G. Teubner, Stuttgart, 1993 Info IV c Ernst W. Mayr 3 Literatur 12/388 Kapitel I Formale Sprachen und Automaten 1. Beispiele Sei Σ ein (endliches) Alphabet. Dann Definition 1 1 ist Σ∗ das Monoid über Σ, d.h. die Menge aller endlichen Wörter über Σ; 2 ist Σ+ die Menge aller nichtleeren endlichen Wörter über Σ∗ ; 3 bezeichnet |w| für w ∈ Σ∗ die Länge von w; 4 ist Σn für n ∈ N0 die Menge aller Wörter der Länge n in Σ∗ ; 5 eine Teilmenge L ⊆ Σ∗ eine formale Sprache. Info IV c Ernst W. Mayr 1 Beispiele 13/388 Beispiel 2 Wir betrachten folgende Grammatik: hSatzi → hSubjektihPrädikatihObjekti hSubjekti → hArtikelihAttributihSubstantivi hArtikeli → hArtikeli → der|die|das|ein| . . . hAttributi → |hAdjektivi|hAdjektivihAttributi hAdjektivi → gross|klein|schön| . . . Die vorletzte Ersetzungsregel ist rekursiv, die durch diese Grammatik definierte Sprache deshalb unendlich. Info IV c Ernst W. Mayr 1 Beispiele 14/388 Beispiel 3 L1 = {aa, aaaa, aaaaaa, . . .} = {(aa)n , n ∈ N} (Σ1 = {a}) L2 = {ab, abab, ababab, . . .} = {(ab)n , n ∈ N} (Σ2 = {a, b}) L3 = {ab, aabb, aaabbb, . . .} = {an bn , n ∈ N} (Σ3 = {a, b}) L4 = {a, b, aa, ab, bb, aaa, aab, abb, bbb . . .} = {am bn , m, n ∈ N0 , m + n > 0} (Σ4 = {a, b}) Info IV c Ernst W. Mayr 1 Beispiele 15/388 2. Die Chomsky-Hierarchie Diese Sprachenhierarchie ist nach Noam Chomsky [MIT, 1976] benannt. 2.1 Phrasenstrukturgrammatik, Chomsky-Grammatik Grammatiken bestehen aus 1 einem Terminalalphabet Σ (manchmal auch T ), |Σ| < ∞ 2 einem endlichen Vorrat von Nichtterminalzeichen (Variablen) V, V ∩Σ=∅ 3 einem Startsymbol (Axiom) S ∈ V 4 einer endliche Menge P von Produktionen (Ableitungsregeln) der Form l → r, mit l ∈ (V ∪ Σ)+ , r ∈ (V ∪ Σ)∗ Eine Phrasenstrukturgrammatik (Grammatik) ist ein Quadrupel G = (V, Σ, P, S). Info IV c Ernst W. Mayr 2.1 Phrasenstrukturgrammatik, Chomsky-Grammatik 16/388 Sei G = (V, Σ, P, S) eine Phrasenstrukturgrammatik. Definition 4 Wir schreiben 1 2 3 z →G z 0 gdw (∃x, y ∈ (V ∪ Σ)∗ , l → r ∈ P )[z = xly, z 0 = xry] z →∗G z 0 gdw z = z 0 oder z →G z (1) →G z (2) →G . . . →G z (k) = z 0 . Eine solche Folge von Ableitungsschritten heißt eine Ableitung für z 0 von z in G (der Länge k). Die von G erzeugte Sprache ist L(G) := {z ∈ Σ∗ ; S →∗G z} Zur Vereinfachung der Notation schreiben wir gewöhnlich → und →∗ statt →G und →∗G Info IV c Ernst W. Mayr 2.1 Phrasenstrukturgrammatik, Chomsky-Grammatik 17/388 Vereinbarung: Wir bezeichnen Nichtterminale mit großen und Terminale mit kleinen Buchstaben! Beispiel 5 Wir erinnern uns: L2 = {ab, abab, ababab, . . .} = {(ab)n , n ∈ N} (Σ2 = {a, b}) Grammatik für L2 mit folgenden Produktionen: S → ab, S → abS Info IV c Ernst W. Mayr 2.1 Phrasenstrukturgrammatik, Chomsky-Grammatik 18/388 Beispiel 5 (Forts.) L4 = {a, b, aa, ab, bb, aaa, aab, abb, bbb . . .} = {am bn , m, n ∈ N0 , m + n > 0} (Σ4 = {a, b}) Grammatik für L4 mit folgenden Produktionen: S → A, S → B, S → AB, A → a, A → aA, B → b, B → bB Info IV c Ernst W. Mayr 2.1 Phrasenstrukturgrammatik, Chomsky-Grammatik 19/388 2.2 Die Chomsky-Hierarchie Sei G = (V, Σ, P, S) eine Phrasenstrukturgrammatik. 1 Jede Phrasenstrukturgrammatik (Chomsky-Grammatik) ist (zunächst) automatisch vom Typ 0. 2 Eine Chomsky-Grammatik heißt (längen-)monoton, falls für alle Regeln α → β ∈ P mit α 6= S gilt: |α| ≤ |β| , und, falls S → ∈ P , dann das Axiom S auf keiner rechten Seite vorkommt. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 20/388 3 Eine Chomsky-Grammatik ist vom Typ 1 (auch: kontextsensitiv), falls sie monoton ist und für alle Regeln α → β in P mit α 6= S gilt: α = α0 Aα00 und β = α0 β 0 α00 für geeignete A ∈ V , α0 , α00 ∈ (V ∪ Σ)∗ und β 0 ∈ (V ∪ Σ)+ . 4 Eine Chomsky-Grammatik ist vom Typ 2 (auch: kontextfrei), falls sie monoton ist und für alle Regeln α → β ∈ P gilt: α∈V . Bemerkung: Manchmal wird “kontextfrei” auch ohne die Monotonie-Bedingung definiert; streng monoton schließt dann die Monotonie mit ein. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 21/388 5 Eine Chomsky-Grammatik ist vom Typ 3 (auch: regulär, rechtslinear), falls sie monoton ist und für alle Regeln α → β in P mit β 6= gilt: α ∈ V und β ∈ Σ+ ∪ Σ∗ V . Auch hier gilt die entsprechende Bemerkung zur Monotonie-Bedingung. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 22/388 Beispiel 6 Die folgende Grammatik ist regulär: S → , S → A, A → aa, A → aaA Eine Produktion A → Bcde heißt linkslinear. Eine Produktion A → abcDef heißt linear. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 23/388 Definition 7 Eine Sprache L ⊆ Σ∗ heißt vom Typ k, k ∈ {0, 1, 2, 3}, falls es eine Chomsky-k-Grammatik G mit L(G) = L gibt. In der Chomsky-Hierarchie bilden also die Typ-3- oder regulären Sprachen die kleinste, unterste Stufe, darüber kommen die kontextfreien, dann die kontextsensitiven Sprachen. Oberhalb der Typ-1-Sprachen kommen die Typ-0-Sprachen, die auch rekursiv aufzählbar oder semientscheidbar genannt werden. Darüber (und nicht mehr Teil der Chomsky-Hierarchie) findet sich die Klasse aller formalen Sprachen. In Typ-3-Grammatiken müssen entweder alle Produktionen rechtslinear oder alle linkslinear sein. Überlegen Sie sich eine lineare Grammatik, deren Sprache nicht regulär ist! (Beweismethode später!) Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 24/388 alle formalen Sprachen r.a. kontextsensitiv kontextfrei regulär Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 25/388 Lemma 8 Sei G = (V, Σ, P, S) eine Chomsky-Grammatik, so dass alle Produktionen α → β die Bedingung α ∈ V erfüllen. Dann ist L(G) kontextfrei. Beweis: Definition 9 Ein A ∈ V mit A →∗ heißt nullierbar. Bestimme alle nullierbaren A ∈ V : N := {A ∈ V ; (A → ) ∈ P } N 0 := ∅ while N 6= N 0 do N 0 := N N := N 0 ∪ {A ∈ V ; (∃(A → β) ∈ P )[β ∈ N 0∗ ]} od Wie man leicht durch Induktion sieht, enthält N zum Schluss genau alle nullierbaren A ∈ V . Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 26/388 Sei nun G eine Grammatik, so dass alle linken Seiten ∈ V , aber die Monotoniebedingung nicht unbedingt erfüllt ist. Modifiziere G zu G0 mit Regelmenge P 0 wie folgt: 1 2 für jedes (A → x1 x2 · · · xn ) ∈ P , n ≥ 1, füge zu P 0 alle Regeln A → y1 y2 · · · yn hinzu, die dadurch entstehen, dass für nicht-nullierbare xi yi := xi und für nullierbare xi die beiden Möglichkeiten yi := xi und yi := eingesetzt werden, ohne dass die ganze rechte Seite = wird. falls S nullierbar ist, sei T ein neues Nichtterminal; füge zu P 0 die Regeln S → und S → T hinzu, ersetze S in allen rechten Seiten durch T und füge für jede Regel (S → x) ∈ P , |x| > 0, die Regel T → x zu P 0 hinzu. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 27/388 Lemma 10 G0 = (V ∪ T, Σ, P 0 , S) ist kontextfrei, und es gilt L(G0 ) = L(G) . Beweis: Klar! Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 28/388 Auch für reguläre Grammatiken gilt ein entsprechender Satz über die “Entfernbarkeit” nullierbarer Nichtterminale: Lemma 11 Sei G = (V, Σ, P, S) eine Chomsky-Grammatik, so dass für alle Regeln α → β ∈ P gilt: α ∈ V und β ∈ Σ∗ ∪ Σ∗ V . Dann ist L(G) regulär. Beweis: Übungsaufgabe! Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 29/388 Beispiel 12 Typ 3: L = {an ; n ∈ N}, Grammatik: S S → → a, aS Typ 2: L = {an bn ; n ∈ N0 }, Grammatik: S → S → T → T → Wir benötigen beim Scannen einen Zähler. Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie , T, ab, aT b 30/388 Beispiel 12 (Forts.) Typ 1: L = {an bn cn ; n ∈ N}, Grammatik: S → aSXY , S → abY , Y X → XY , bX → bb, bY → bc, cY → cc Wir benötigen beim Scannen mindestens zwei Zähler. Bemerkung: Diese Grammatik entspricht nicht unserer Definition von Typ 1. Wir zeigen als Hausaufgabe eine geeignete erweiterte Definition! Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 31/388 Die Backus-Naur-Form (BNF) ist ein Formalismus zur kompakten Darstellung von Typ-2-Grammatiken. Statt A → β1 A → β2 .. . A → βn schreibt man A → β1 |β2 | . . . |βn . Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 32/388 Die Backus-Naur-Form (BNF) ist ein Formalismus zur kompakten Darstellung von Typ-2-Grammatiken. Statt A → αγ A → αβγ schreibt man A → α[β]γ . (D.h., das Wort β kann, muss aber nicht, zwischen α und γ eingefügt werden.) Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 33/388 Die Backus-Naur-Form (BNF) ist ein Formalismus zur kompakten Darstellung von Typ-2-Grammatiken. Statt A → αγ A → αBγ B → β B → βB schreibt man A → α{β}γ . (D.h., das Wort β kann beliebig oft (auch Null mal) zwischen α und γ eingefügt werden.) Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 34/388 Beispiel 13 hSatzi → hSubjektihPrädikatihObjekti hSubjekti → hArtikelihAttributihSubstantivi hPrädikati → ist|hat| . . . hArtikeli → |der|die|das|ein| . . . hAttributi → {hAdjektivi} hAdjektivi → gross|klein|schön| . . . Info IV c Ernst W. Mayr 2.2 Die Chomsky-Hierarchie 35/388 2.3 Das Wortproblem Beispiel 14 (Arithmetische Ausdrücke) <exp> <exp> <term> <term> <term> → → → → → <term> <exp> + <term> (<exp>) <term> × <term> a | b | ... | z Aufgabe eines Parsers ist nun, zu prüfen, ob eine gegebene Zeichenreihe einen gültigen arithmetischen Ausdruck darstellt und, falls ja, ihn in seine Bestandteile zu zerlegen. Info IV c Ernst W. Mayr 2.3 Das Wortproblem 36/388 Sei G = (V, Σ, P, S) eine Grammatik. Definition 15 1 Wortproblem: Gegeben ein Wort w ∈ Σ∗ , stelle fest, ob w ∈ L(G) ? 2 Ableitungsproblem: Gegeben ein Wort w ∈ L(G), gib eine Ableitung S →∗G w an, d.h., eine Folge S = w(0) →G w(1) →G · · · →G w(n) = w 3 mit w(i) ∈ (Σ ∪ V )∗ für i = 1, . . . , n. uniformes Wortproblem: Wortproblem, bei dem jede Probleminstanz sowohl die Grammatik G wie auch die zu testende Zeichenreihe w enthält. Ist G dagegen global festgelegt, spricht man von einem nicht-uniformen Wortproblem. Info IV c Ernst W. Mayr 2.3 Das Wortproblem 37/388 Bemerkung: Das uniforme wie auch das nicht-uniforme Wortproblem ist für Typ-0-Sprachen (also die rekursiv-aufzählbare Sprachen) nicht entscheidbar. Wir werden später sehen, dass es zum Halteproblem für Turingmaschinen äquivalent ist. Es gilt jedoch Satz 16 Für kontextsensitive Grammatiken ist das Wortproblem entscheidbar. Genauer: Es gibt einen Algorithmus, der bei Eingabe einer kontextsensitiven Grammatik G = (V, Σ, P, S) und eines Wortes w in endlicher Zeit entscheidet, ob w ∈ L(G). Info IV c Ernst W. Mayr 2.3 Das Wortproblem 38/388 Beweisidee: Angenommen w ∈ L(G). Dann gibt es eine Ableitung S = w(0) →G w(1) →G · · · →G w(n) = w mit w(i) ∈ (Σ ∪ V )∗ für i = 1, . . . , n. Da aber G kontextsensitiv ist, gilt (falls w 6= ) |w(0) | ≤ |w(1) | ≤ · · · ≤ |w(n) | , d.h., es genügt, alle Wörter in (Σ ∪ V )∗ der Länge ≤ |w| zu erzeugen. Info IV c Ernst W. Mayr 2.3 Das Wortproblem 39/388 Beweis: Sei o.B.d.A. w 6= und sei n Tm := {w0 ∈ (Σ ∪ V )∗ ; |w0 | ≤ n und w0 lässt sich aus S in ≤ m Schritten ableiten} Diese Mengen kann man für alle n und m induktiv wie folgt berechnen: T0n := {S} n n Tm+1 := Tm ∪ {w0 ∈ (Σ ∪ V )∗ ; |w0 | ≤ n und n w00 → w0 für ein w00 ∈ Tm } Pn n| ≤ i Beachte: Für alle m gilt: |Tm i=1 |Σ ∪ V | . Es muss daher immer ein m0 geben mit n n Tm = Tm = . . . =: Tn . 0 0 +1 Info IV c Ernst W. Mayr 2.3 Das Wortproblem 40/388 Beweis (Forts.): Algorithmus: n := |w| T := {S} T 0 := ∅ while T 6= T 0 do T 0 := T T := T 0 ∪ {w0 ∈ (V ∪ Σ)+ ; |w0 | ≤ n, (∃w00 ∈ T 0 )[w00 → w0 ]} od if w ∈ T return “ja” else return “nein” fi Info IV c Ernst W. Mayr 2.3 Das Wortproblem 41/388 Beispiel 17 Gegeben sei die Typ-2-Grammatik mit den Produktionen S → ab und S → aSb sowie das Wort w = abab. T04 = {S} T14 = {S, ab, aSb} T24 = {S, ab, aSb, aabb} T34 aaSbb ist zu lang! = {S, ab, aSb, aabb} Also lässt sich das Wort w mit der gegebenen Grammatik nicht erzeugen! Info IV c Ernst W. Mayr 2.3 Das Wortproblem 42/388 Bemerkung: Der angegebene Algorithmus ist nicht sehr effizient! Für kontextfreie Grammatiken gibt es wesentlich effizientere Verfahren, die wir später kennenlernen werden! Info IV c Ernst W. Mayr 2.3 Das Wortproblem 43/388 2.4 Ableitungsgraph und Ableitungsbaum Grammatik: Beispiel: S S → AB A → aA A → a A a B A b B B → bB B → b a A b B aaa → c a b cb → a c a Die Terminale ohne Kante nach unten entsprechen, von links nach rechts gelesen, dem durch den Ableitungsgraphen dargestellten Wort. Info IV c Ernst W. Mayr 44/388 Grammatik: Beispiel: S S → AB A → aA A → a A B a A b B B → bB B → b a A b B aaa → c a b cb → a c a Dem Ableitungsgraph entspricht z.B. die Ableitung S → AB → aAB → aAbB → aaAbB → aaAbbB → → aaabbB → aaabbb → cbbb → abb Info IV c Ernst W. Mayr 2.3 Ableitungsgraph und Ableitungsbaum 44/388 Beobachtung: Bei kontextfreien Sprachen sind die Ableitungsgraphen immer Bäume. Beispiel 18 Grammatik: AbleitungsbaumAbleitungsbäume: S S → aB S → Ac A A → ab B → bc S a B b c a b c Für das Wort abc gibt es zwei verschiedene Ableitungsbäume. Info IV c Ernst W. Mayr 2.3 Ableitungsgraph und Ableitungsbaum 45/388 Definition 19 Eine Ableitung S = w(0) → w(1) → · · · → w(n) = w eines Wortes w heißt Linksableitung, wenn für jede Anwendung einer Produktion α → β auf w(i) = xαz gilt, dass sich keine Regel der Grammatik auf ein echtes Präfix von xα anwenden lässt. Eine Grammatik heißt eindeutig, wenn es für jedes Wort w ∈ L(G) genau eine Linksableitung gibt. Nicht eindeutige Grammatiken nennt man auch mehrdeutig. Eine Sprache L heißt eindeutig, wenn es für L eine eindeutige Grammatik gibt. Ansonsten heißt L mehrdeutig. Bemerkung: Für eindeutige kontextfreie Grammatiken ist das Wortproblem sehr einfach lösbar. Info IV c Ernst W. Mayr 2.3 Ableitungsgraph und Ableitungsbaum 46/388 Beispiel 20 Grammatik: Ableitungsbäume: S S → aB S → Ac A A → ab B → bc S a B b c a b c Beide Ableitungsbäume für das Wort abc entsprechen Linksableitungen. Info IV c Ernst W. Mayr 2.3 Ableitungsgraph und Ableitungsbaum 47/388 Beispiel 21 Grammatik: Ableitung: S S → AB A → aA A → a B → bB A a B A b B B → b a A b B aaa → c a b cb → a Eine Linksableitung ist c a S → AB → aAB → aaAB → aaaB → cB → → cbB → aB → abB → abb Info IV c Ernst W. Mayr 48/388 Beispiel 21 Grammatik: Ableitung: S S → AB A → aA A → a B → bB A a B A b B B → b a A b B aaa → c a b cb → a c Eine andere Linksableitung ist a S → AB → aB → abB → abb . Info IV c Ernst W. Mayr 48/388 Beispiel 21 Grammatik: Ableitung: S S → AB A → aA A A → a B a B → bB A b B B → b a A b B aaa → c a b cb → a c Die Grammatik ist also mehrdeutig. Info IV c Ernst W. Mayr 2.3 Ableitungsgraph und Ableitungsbaum a 48/388 3. Reguläre Sprachen 3.1 Deterministische endliche Automaten Definition 22 Ein deterministischer endlicher Automat (englisch: deterministic finite automaton, kurz DFA) wird durch ein 5-Tupel M = (Q, Σ, δ, q0 , F ) beschrieben, das folgende Bedingungen erfüllt: 1 Q ist eine endliche Menge von Zuständen. 2 Σ ist eine endliche Menge, das Eingabealphabet, wobei Q ∩ Σ = ∅. 3 q0 ∈ Q ist der Startzustand. 4 F ⊆ Q ist die Menge der Endzustände. 5 δ : Q × Σ → Q heißt Übergangsfunktion. Info IV c Ernst W. Mayr 3.1 Deterministische endliche Automaten 49/388 Die von M akzeptierte Sprache ist L(M ) := {w ∈ Σ∗ ; δ̂(q0 , w) ∈ F } , wobei δ̂ : Q × Σ∗ → Q induktiv definiert ist durch δ̂(q, ) = q δ̂(q, ax) = δ̂(δ(q, a), x) für alle q ∈ Q für alle q ∈ Q, a ∈ Σ und x ∈ Σ∗ Bemerkung: Endliche Automaten können durch (gerichtete und markierte) Zustandsgraphen veranschaulicht werden: Knoten = b Zuständen Kanten = b Übergängen genauer: die mit a ∈ Σ markierte Kante (u, v) entspricht δ(u, a) = v Der Anfangszustand wird durch einen Pfeil, Endzustände werden durch doppelte Kreise gekennzeichnet. Info IV c Ernst W. Mayr 3.1 Deterministische endliche Automaten 50/388 Beispiel 23 a Sei M = (Q, Σ, δ, q0 , F ), wobei q0 q1 b Q = {q0 , q1 , q2 , q3 } Σ = {a, b} F = {q3 } δ(q0 , a) = q1 b a b a δ(q0 , b) = q3 δ(q1 , a) = q2 δ(q1 , b) = q0 δ(q2 , a) = q3 b q3 a q2 δ(q2 , b) = q1 δ(q3 , a) = q0 δ(q3 , b) = q2 Info IV c Ernst W. Mayr 3.1 Deterministische endliche Automaten 51/388 Satz 24 Ist M = (Q, Σ, δ, q0 , F ) ein deterministischer endlicher Automat, so ist die durch P := {q → aq 0 ; δ(q, a) = q 0 } ∪ {q → a; δ(q, a) ∈ F } gegebene Grammatik G = (Q, Σ, P, q0 ) regulär. Beweis: Offensichtlich! Info IV c Ernst W. Mayr 3.1 Deterministische endliche Automaten 52/388 Beispiel 25 a q0 b q1 b a b a Produktionen: q0 → aq1 q1 → aq2 q2 → aq3 q3 → aq0 q2 → a q0 q0 q1 q2 q3 q0 → → → → → bq3 bq0 bq1 bq2 b → aq1 → abq0 → abaq1 → abaaq2 → abaaa ∈ L(G) b q3 Info IV c Ernst W. Mayr a q2 3.1 Deterministische endliche Automaten 53/388 Satz 26 Sei M = (Q, Σ, δ, q0 , F ) ein endlicher deterministischer Automat. Dann gilt für die soeben konstruierte reguläre Grammatik G L(G) = L(M ) . Beweis: Sei w = a1 a2 · · · an ∈ Σ∗ . Dann gilt gemäß Konstruktion: ⇔ ⇔ ⇔ w ∈ L(M ) ∃q0 , q1 , . . . , qn ∈ Q: q0 Startzustand von M , ∀i = 0, . . . , n − 1: δ(qi , ai+1 ) = qi+1 , qn ∈ F ∃q0 , q1 , . . . , qn−1 ∈ V : q0 Startsymbol von G q0 → a1 q1 → a1 a2 q2 → · · · → a1 · · · an−1 qn−1 → → a1 · · · an−1 an w ∈ L(G) Info IV c Ernst W. Mayr 3.1 Deterministische endliche Automaten 54/388 3.2 Nichtdeterministische endliche Automaten Definition 27 Ein nichtdeterministischer endlicher Automat (englisch: nondeterministic finite automaton, kurz NFA) wird durch ein 5-Tupel N = (Q, Σ, δ, S, F ) beschrieben, das folgende Bedingungen erfüllt: 1 Q ist eine endliche Menge von Zuständen. 2 Σ ist eine endliche Menge, das Eingabealphabet, wobei Q ∩ Σ = ∅. 3 S ⊆ Q ist die Menge der Startzustände. 4 F ⊆ Q ist die Menge der Endzustände. 5 δ : Q × Σ → P(Q) \ {∅} heißt Übergangsrelation. Info IV c Ernst W. Mayr 3.2 Nichtdeterministische endliche Automaten 55/388 Die von N akzeptierte Sprache ist L(N ) := {w ∈ Σ∗ ; δ̂(S, w) ∩ F 6= ∅} , wobei δ̂ : P(Q) × Σ∗ → P(Q) wieder induktiv definiert ist durch δ̂(Q0 , ) = Q0 ∀Q0 ⊆ Q, Q0 = 6 ∅ [ 0 δ̂(Q , ax) = δ̂( δ(q, a), x) ∀∅ 6= Q0 ⊆ Q, ∀a ∈ Σ, ∀x ∈ Σ∗ q∈Q0 Info IV c Ernst W. Mayr 3.2 Nichtdeterministische endliche Automaten 56/388 Satz 28 Ist G = (V, Σ, P, S) eine reguläre (rechtslineare) Grammatik, so ist N = (V ∪ {X}, Σ, δ, {S}, F ), mit ( {S, X}, falls S → ∈ P F := {X}, sonst und, für alle A, B ∈ V , a ∈ Σ, B ∈ δ(A, a) ⇐⇒ A → aB X ∈ δ(A, a) ⇐⇒ A→a und ein nichtdeterministischer endlicher Automat. Info IV c Ernst W. Mayr 3.2 Nichtdeterministische endliche Automaten 57/388 Beispiel 29 Produktionen: a S A a S → aA S → bB A → aA A → a b a B → bB B → b b B Info IV c Ernst W. Mayr b 3.2 Nichtdeterministische endliche Automaten X 58/388 3.3 Äquivalenz von NFA und DFA Satz 30 Für jede von einem nichtdeterministischen endlichen Automaten akzeptierte Sprache L gibt es auch einen deterministischen endlichen Automaten M mit L = L(M ) . Info IV c Ernst W. Mayr 3.3 Äquivalenz von NFA und DFA 59/388 Beweis: Sei N = (Q, Σ, δ, S, F ) ein NFA. Definiere 1 2 3 M 0 := (Q0 , Σ, δ 0 , q00 , F 0 ) Q0 := P(Q) \ {∅} (P(Q) Potenzmenge von Q) S 0 00 δ (Q , a) := q0 ∈Q00 δ(q 0 , a) für alle Q00 ∈ Q0 , a ∈ Σ 4 q00 := S 5 F 0 := {Q00 ⊆ Q; Q00 ∩ F 6= ∅} Also NFA N : DFA M 0 : Info IV c Ernst W. Mayr Q 2Q Σ Σ δ δ0 S S 3.3 Äquivalenz von NFA und DFA F F0 60/388 Beweis (Forts.): Es gilt: w ∈ L(N ) ⇔ δ̂(S, w) ∩ F 6= ∅ ⇔ δb0 (q00 , w) ∈ F 0 ⇔ w ∈ L(M 0 ). Der zugehörige Algorithmus zur Überführung eines NFA in einen DFA heißt Teilmengenkonstruktion, Potenzmengenkonstruktion oder Myhill-Konstruktion. Info IV c Ernst W. Mayr 3.3 Äquivalenz von NFA und DFA 61/388 3.4 NFA’s mit -Übergängen Definition 31 Ein (nichtdeterministischer) endlicher Automat A mit -Übergängen ist ein 5-Tupel analog zur Definition des NFA mit δ : Q × (Σ ] {}) → P(Q) \ {∅} . Ein -Übergang wird ausgeführt, ohne dass ein Eingabezeichen gelesen wird. Wir setzen o.B.d.A. voraus, dass A nur einen Anfangszustand hat. 0 q0 Info IV c Ernst W. Mayr 1 q1 3.4 NFA’s mit -Übergängen 0 q2 62/388 Definiere für alle a ∈ Σ δ̄(q, a) := δ̂(q, ∗ a∗ ) . Satz 32 w ∈ L(A) ⇔ δ̄ˆ(S, w) ∩ F 6= ∅ . Beweis: Hausaufgabe! Info IV c Ernst W. Mayr 3.4 NFA’s mit -Übergängen 63/388 3.5 Entfernen von -Übergängen Satz 33 Zu jedem nichtdeterministischen endlichen Automaten A mit -Übergängen gibt es einen nichtdeterministischen endlichen Automaten A0 ohne -Übergänge, so dass gilt: L(A) = L(A0 ) Beweis: Ersetze δ durch δ̄ und F durch F 0 mit ( F ∈ / L(A) 0 F = F ∪ {q0 } ∈ L(A) Info IV c Ernst W. Mayr 3.5 Entfernen von -Übergängen 64/388 Beispiel 34 0 q0 1 0 q0 q1 0 1 0, 1 q1 q2 0 0, 1 q2 0, 1 Info IV c Ernst W. Mayr 3.5 Entfernen von -Übergängen 65/388 3.6 Endliche Automaten und reguläre Sprachen Zusammenfassend ergibt sich: Satz 35 Die Familie der regulären Sprachen (Chomsky-3-Sprachen) ist identisch mit der Familie der Sprachen, die von DFA’s akzeptiert/erkannt werden, von NFA’s akzeptiert werden, von NFA’s mit -Übergängen akzeptiert werden. Beweis: Wie soeben gezeigt. Info IV c Ernst W. Mayr 3.6 Endliche Automaten und reguläre Sprachen 66/388 3.7 Reguläre Ausdrücke Reguläre Ausdrücke sollen eine kompakte Notation für spezielle Sprachen sein, wobei endliche Ausdrücke hier auch unendliche Mengen beschreiben können. Definition 36 Reguläre Ausdrücke sind induktiv definiert durch: 1 ∅ ist ein regulärer Ausdruck. 2 ist ein regulärer Ausdruck. 3 Für jedes a ∈ Σ ist a ist ein regulärer Ausdruck. 4 Wenn α und β reguläre Ausdrücke sind, dann sind auch (α), αβ, (α|β) (hierfür wird oft auch (α + β) geschrieben) und (α)∗ reguläre Ausdrücke. 5 Nichts sonst ist ein regulärer Ausdruck. Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 67/388 Zu einem regulären Ausdruck γ ist die zugehörige Sprache L(γ) induktiv definiert durch: Definition 37 1 Falls γ = ∅, so gilt L(γ) = ∅. 2 Falls γ = , so gilt L(γ) = {}. 3 Falls γ = a, so gilt L(γ) = {a}. 4 Falls γ = (α), so gilt L(γ) = L(α). 5 Falls γ = αβ, so gilt L(γ) = L(α)L(β) = {uv; u ∈ L(α), v ∈ L(β)} . 6 Falls γ = (α | β), so gilt L(γ) = L(α) ∪ L(β) = {u; u ∈ L(α) ∨ u ∈ L(β)} . 7 Falls γ = (α)∗ , so gilt L(γ) = L(α)∗ = {u1 u2 . . . un ; n ∈ N0 , u1 , . . . , un ∈ L(α)} . Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 68/388 Beispiel 38 Sei das zugrunde liegende Alphabet Σ = {0, 1}. alle Wörter, die gleich 0 sind oder mit 00 enden: (0 | (0 | 1)∗ 00) alle Wörter, die 0110 enthalten: (0|1)∗ 0110(0|1)∗ alle Wörter, die eine gerade Anzahl von 1’en enthalten: (0∗ 10∗ 1)∗ 0∗ alle Wörter, die die Binärdarstellung einer durch 3 teilbaren Zahl darstellen, also 0, 11, 110, 1001, 1100, 1111, 10010, . . . Hausaufgabe! Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 69/388 Satz 39 Eine Sprache L ⊆ Σ∗ ist genau dann durch einen regulären Ausdruck darstellbar, wenn sie regulär ist. Beweis: “=⇒”: Sei also L = L(γ). Wir zeigen: ∃ NFA N mit L = L(N ) mit Hilfe struktureller Induktion. Induktionsanfang: Falls γ = ∅, γ = , oder γ = a ∈ Σ, so folgt die Behauptung unmittelbar. Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 70/388 Induktionsschritt: γ = αβ: nach Induktionsannahme ∃ NFA Nα und Nβ mit L(Nα ) = L(α) und L(Nβ ) = L(β) . q0 qα,f qα,0 Nα Info IV c Ernst W. Mayr qβ,0 qβ,f qf Nβ 3.7 Reguläre Ausdrücke 71/388 Induktionsschritt (Forts.): γ = (α | β): nach Induktionsannahme ∃ NFA Nα und Nβ mit L(Nα ) = L(α) und L(Nβ ) = L(β) . qβ,0 qβ,f Nβ q0 qf qα,f qα,0 Nα Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 72/388 Induktionsschritt (Forts.): γ = (α)∗ : nach Induktionsannahme ∃ NFA Nα mit L(Nα ) = L(α) . q0 qα,f qα,0 qf Nα Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 73/388 “⇐=”: Sei M = (Q, Σ, δ, q0 , F ) ein deterministischer endlicher Automat. Wir zeigen: es gibt einen regulären Ausdruck γ mit L(M ) = L(γ). Sei Q = {q0 , . . . , qn }. Wir setzen k Rij :={w ∈ Σ∗ ; die Eingabe w überführt den im Zustand qi gestarteten Automaten in den Zustand qj , wobei alle zwischendurch durchlaufenen Zustände einen Index kleiner gleich k haben} Behauptung: Für alle i, j ∈ {0, . . . , n} und alle k ∈ {−1, 0, 1, . . . , n} gilt: k mit L(αk ) = Rk . Es gibt einen regulären Ausdruck αij ij ij Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 74/388 Bew.: Induktion über k: k = −1: Hier gilt ( {a ∈ Σ; δ(qi , a) = qj }, falls i 6= j −1 Rij := {a ∈ Σ; δ(qi , a) = qj } ∪ {}, falls i = j −1 Rij ist also endlich und lässt sich daher durch einen regulären −1 Ausdruck αij beschreiben. Info IV c Ernst W. Mayr 75/388 Bew.: Induktion über k: k ⇒ k + 1: Hier gilt k+1 k k ∗ k Rij = Rij ∪ Rikk+1 (Rk+1 k+1 ) Rk+1 j k+1 k k ∗ k αij = (αij | αikk+1 (αk+1 k+1 ) αk+1 j ) Somit gilt: L(M ) = L((α0n f1 | α0n f2 | · · · | α0n fr )), wobei f1 , . . . , fr die Indizes der Endzustände seien. (Satz 39) Info IV c Ernst W. Mayr 3.7 Reguläre Ausdrücke 75/388 3.8 Abschlusseigenschaften regulärer Sprachen Satz 40 Seien R1 , R2 ⊆ Σ∗ reguläre Sprachen. Dann sind auch R1 R2 , R1 ∪ R2 , R1∗ , Σ∗ \ R1 (=: R̄1 ), R1 ∩ R2 reguläre Sprachen. Beweis: R1 R2 , R1 ∪ R2 , R1∗ klar. Σ∗ \ R1 : R1 ∩ R2 : Info IV c Ernst W. Mayr Sei R1 = L(A), A DFA, A = (Q, Σ, δ, q0 , F ), δ vollständig. Betrachte A0 = (Q, Σ, δ, q0 , Q \ F ). Dann ist L(A0 ) = Σ∗ \ L(A) De Morgan 3.8 Abschlusseigenschaften regulärer Sprachen 76/388 Definition 41 Substitution (mit regulären Mengen) ist eine Abbildung, die jedem a ∈ Σ eine reguläre Menge h(a) zuordnet. Diese Abbildung wird kanonisch auf Σ∗ erweitert. Ein Homomorphismus ist eine Substitution mit ∀a ∈ Σ : |h(a)| = 1 Satz 42 Reguläre Sprachen sind unter (regulärer) Substitution, Homomorphismus und inversem Homomorphismus abgeschlossen. Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 77/388 Beweis: Wir zeigen (nur) die Behauptung für den inversen Homomorphismus. Sei h : ∆ → Σ∗ ein Homomorphismus, und sei R ⊆ Σ∗ regulär. Zu zeigen: h−1 (R) ⊆ ∆∗ ist regulär. Sei A = (Q, Σ, δ, q0 , F ), L(A) = R. Betrachte A0 = (Q, ∆, δ 0 , q0 , F ), mit δ 0 (q, a) = δ(q, h(a)) ∀q ∈ Q, a ∈ ∆ , wobei wir nunmehr der Einfachheit halber statt δ̂ nur δ schreiben. Also gilt δ 0 (q0 , w) = δ(q0 , h(w)) ∈ F ⇔ h(w) ∈ R ⇔ w ∈ h−1 (R) Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 78/388 Definition 43 Seien L1 , L2 ⊆ Σ∗ . Dann ist der Rechtsquotient L1 /L2 := {x ∈ Σ∗ ; (∃y ∈ L2 )[xy ∈ L1 ]} . Satz 44 Seien R, L ⊆ Σ∗ , R regulär. Dann ist R/L regulär. Beweis: Sei A DFA mit L(A) = R, A = (Q, Σ, δ, q0 , F ). F 0 := {q ∈ Q; (∃y ∈ L)[δ̂(q, y) ∈ F ]} A0 := (Q, Σ, δ, q0 , F 0 ) Dann ist L(A0 ) = R/L. Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 79/388 Lemma 45 Es gibt einen Algorithmus, der für zwei (nichtdeterministische, mit -Übergängen) endliche Automaten A1 und A2 entscheidet, ob sie äquivalent sind, d.h. ob L(A1 ) = L(A2 ) . Beweis: Konstruiere einen endlichen Automaten für (L(A1 ) \ L(A2 )) ∪ (L(A2 ) \ L(A1 )) (symmetrische Differenz). Prüfe, ob dieser Automat ein Wort akzeptiert. Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 80/388 Satz 46 (Pumping Lemma für reguläre Sprachen) Sei R ⊆ Σ∗ regulär. Dann gibt es ein n > 0, so dass für jedes z ∈ R mit |z| ≥ n es u, v, w ∈ Σ∗ gibt, so dass gilt: 1 z = uvw, 2 |uv| ≤ n, 3 |v| ≥ 1, und 4 ∀i ≥ 0 : uv i w ∈ R. Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 81/388 Beweis: Sei R = L(A), A = (Q, Σ, δ, q0 , F ). Sei n = |Q|. Sei nun z ∈ R mit |z| ≥ n. Sei q0 = q (0) , q (1) , q (2) , . . . , q (|z|) die beim Lesen von z durchlaufene Folge von Zuständen von A. Dann muss es 0 ≤ i < j ≤ n ≤ |z| geben mit q (i) = q (j) . Seien nun u die ersten i Zeichen von z, v die nächsten j − i Zeichen und w der Rest. ⇒ z = uvw, |v| ≥ 1, |uv| ≤ n, uv l w ∈ R Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen ∀l ≥ 0 . 82/388 Beispiel für die Anwendung des Pumping Lemmas: Satz 47 2 L = {0m ; m ≥ 0} ist nicht regulär. Beweis: Angenommen, L sei doch regulär. Sei n wie durch das Pumping Lemma gegeben. Wähle m ≥ n. Dann gibt es ein r mit 1 ≤ r ≤ n, so dass gilt: 2 +ir 0m ∈ L für alle i ∈ N0 . Aber: m2 < m2 + r ≤ m2 + m < m2 + 2m + 1 = (m + 1)2 ! Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 83/388 Denkaufgabe: {ai bi ; i ≥ 0} ist nicht regulär. Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 84/388 Definition 48 Sei L ⊆ Σ∗ eine Sprache. Definiere die Relation ≡L ⊆ Σ∗ × Σ∗ durch x ≡L y ⇔ (∀z ∈ Σ∗ )[xz ∈ L ⇔ yz ∈ L] Lemma 49 ≡L ist eine rechtsinvariante Äquivalenzrelation. Dabei bedeutet rechtsinvariant: x ≡L y ⇒ xu ≡L yu für alle u . Beweis: Klar! Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 85/388 Satz 50 (Myhill-Nerode) Sei L ⊆ Σ∗ . Dann sind äquivalent: 1 L ist regulär 2 ≡L hat endlichen Index (= Anzahl der Äquivalenzklassen) 3 L ist die Vereinigung einiger der endlich vielen Äquivalenzklassen von ≡L . Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 86/388 Beweis: (1)⇒(2): Sei L = L(A) für einen DFA A = (Q, Σ, δ, q0 , F ). Dann gilt δ̂(q0 , x) = δ̂(q0 , y) ⇒ x ≡L y . Also gibt es höchstens so viele Äquivalenzklassen, wie der Automat A Zustände hat. Info IV c Ernst W. Mayr 87/388 Beweis: (2)⇒(3): Sei [x] die Äquivalenzklasse von x, y ∈ [x] und x ∈ L. Dann gilt nach der Definition von ≡L : y∈L Info IV c Ernst W. Mayr 87/388 Beweis: (3)⇒(1): Definiere A0 = (Q0 , Σ, δ 0 , q00 , F 0 ) mit Q0 := {[x]; x ∈ Σ∗ } (Q0 endlich!) q00 := [] δ 0 ([x], a) := [xa] ∀x ∈ Σ∗ , a ∈ Σ F 0 (konsistent!) := {[x]; x ∈ L} Dann gilt: L(A0 ) = L Info IV c Ernst W. Mayr 3.8 Abschlusseigenschaften regulärer Sprachen 87/388 3.9 Konstruktion minimaler endlicher Automaten Satz 51 Der nach dem Satz von Myhill-Nerode konstruierte deterministische endliche Automat hat unter allen DFA’s für L eine minimale Anzahl von Zuständen. Beweis: Sei A = (Q, Σ, δ, q0 , F ) mit L(A) = L. Dann liefert x ≡A y :⇔ δ(q0 , x) = δ(q0 , y) eine Äquivalenzrelation, die ≡L verfeinert. Also gilt: |Q| = index(≡A ) ≥ index(≡L ) = Anzahl der Zustände des Myhill-Nerode-Automaten. Info IV c Ernst W. Mayr 3.9 Konstruktion minimaler endlicher Automaten 88/388 Algorithmus zur Konstruktion eines minimalen FA Eingabe: A(Q, Σ, δ, q0 , F ) DFA (L = L(A)) Ausgabe: Äquivalenzrelation auf Q. 0 1 Entferne aus Q alle überflüssigen, d.h. alle von q0 aus nicht erreichbaren Zustände. Wir nehmen nun an, dass Q keine überflüssigen Zustände mehr enthält. Markiere alle Paare {qi , qj } ∈ Q2 mit qi ∈ F und qj ∈ / F bzw. qi ∈ / F und qj ∈ F . Info IV c Ernst W. Mayr 3.9 Konstruktion minimaler endlicher Automaten 89/388 2 3 for alle unmarkierten Paare {qi , qj } ∈ Q2 , qi 6= qj do if (∃a ∈ Σ)[{δ(qi , a), δ(qj , a)} ist markiert] then markiere {qi , qj }; markiere alle {q, q 0 } in {qi , qj }’s Liste und rekursiv alle Paare in der Liste von {q, q 0 } usw. else for alle a ∈ Σ do if δ(qi , a) 6= δ(qj , a) then trage {qi , qj } in die Liste von {δ(qi , a), δ(qj , a)} ein fi od fi od Ausgabe: Info IV c Ernst W. Mayr q äquivalent zu q 0 ⇔ {q, q 0 } nicht markiert. 3.9 Konstruktion minimaler endlicher Automaten 90/388 Satz 52 Obiger Algorithmus liefert einen minimalen DFA für L(A). Beweis: Sei A0 = (Q0 , Σ0 , δ 0 , q00 , F 0 ) der konstruierte Äquivalenzklassenautomat. Offensichtlich ist L(A) = L(A0 ). Es gilt: {q, q 0 } wird markiert gdw / F oder umgekehrt], (∃ w ∈ Σ∗ )[δ(q, w) ∈ F ∧ δ(q 0 , w) ∈ wie man durch einfach Induktion über |w| sieht. Also: Die Anzahl der Zustände von A0 (nämlich |Q0 |) ist gleich dem Index von ≡L . Info IV c Ernst W. Mayr 3.9 Konstruktion minimaler endlicher Automaten 91/388 Beispiel 53 Automat A: 0 q0 q1 0 1 q2 1 0 q3 0 0 q0 q1 q2 q3 q4 q5 1 q4 Automat A0 : L(A0 ) = 0∗ 10∗ 1 1 q5 q 0 q1 0 Info IV c Ernst W. Mayr 0, 1 1 q0 q1 q2 q3 q4 / / / / / / / / / × × / / / × × / / × × / × × × × × q2 q 3 q 4 1 q5 q5 / / / / / / 0, 1 0 3.9 Konstruktion minimaler endlicher Automaten 92/388 Satz 54 Sei A = (Q, Σ, δ, q0 , F ) ein DFA. Der Zeitaufwand des obigen Minimalisierungsalgorithmus ist O(|Q|2 |Σ|). Beweis: Für jedes a ∈ Σ muss jede Position in der Tabelle nur konstant oft besucht werden. Info IV c Ernst W. Mayr 3.9 Konstruktion minimaler endlicher Automaten 93/388 3.10 Entscheidbarkeit Beispiel 55 Wie wir bereits wissen, ist das Wortproblem für reguläre Sprachen L entscheidbar. Wenn L durch einen deterministischen endlichen Automaten gegeben ist, ist dies sogar in linearer Laufzeit möglich. Allerdings gilt, dass bei der Überführung eines nichtdeterministischen endlichen Automaten in einen deterministischen endlichen Automaten die Komplexität exponentiell zunehmen kann. Die folgenden Probleme sind für Chomsky-3-Sprachen (also die Familie der regulären Sprachen) entscheidbar: Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 94/388 Wortproblem: Ist ein Wort w in L(G) (bzw. L(A))? Das Wortproblem ist für alle Sprachen mit einem Chomsky-Typ größer 0 entscheidbar. Allerdings wächst die Laufzeit exponentiell mit der Wortlänge n. Für Chomsky-2- und Chomsky-3-Sprachen gibt es wesentlich effizientere Algorithmen. Leerheitsproblem: Ist L(G) = ∅? Das Leerheitsproblem ist für Sprachen vom Chomsky-Typ 2 und 3 entscheidbar. Für andere Sprachtypen lassen sich Grammatiken konstruieren, für die nicht mehr entscheidbar ist, ob die Sprache leer ist. Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 95/388 Endlichkeitsproblem: Ist |L(G)| < ∞? Das Endlichkeitsproblem ist für alle regulären Sprachen lösbar. Lemma 56 Sei n die Pumping-Lemma-Zahl, die zur regulären Sprache L gehört. Dann gilt: |L| = ∞ gdw (∃z ∈ L)[n ≤ |z| < 2n] . Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 96/388 Beweis: Wir zeigen zunächst ⇐: Aus dem Pumping-Lemma folgt: z = uvw für |z| ≥ n und uv i w ∈ L für alle i ∈ N0 . Damit erzeugt man unendlich viele Wörter. Nun wird ⇒ gezeigt: Dass es ein Wort z mit |z| ≥ n gibt, ist klar (es gibt ja unendlich viele Wörter). Mit Hilfe des Pumping-Lemmas lässt sich ein solches Wort auf eine Länge < 2n reduzieren. Damit kann das Endlichkeitsproblem auf das Wortproblem zurückgeführt werden. Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 97/388 Schnittproblem: Ist L(G1 ) ∩ L(G2 ) = ∅? Das Schnittproblem ist für die Familie der regulären Sprachen entscheidbar, nicht aber für die Familie der Chomsky-2-Sprachen. Äquivalenzproblem: Ist L(G1 ) = L(G2 )? Das Äquivalenzproblem lässt sich auch wie folgt formulieren: L1 = L2 Info IV c Ernst W. Mayr ⇔ (L1 ∩ L2 ) ∪ (L2 ∩ L1 ) = ∅ 3.10 Entscheidbarkeit 98/388 Wichtig für eine effiziente Lösung der Probleme ist, wie die Sprache gegeben ist. Hierzu ein Beispiel: Beispiel 57 L = {w ∈ {0, 1}∗ ; das k-letzte Bit von w ist gleich 1} Ein NFA für diese Sprache ist gegeben durch: 0, 1 1 q1 0, 1 q2 0, 1 ··· 0, 1 qk Insgesamt hat der NFA k + 1 Zustände. Man kann nun diesen NFA in einen deterministischen Automaten umwandeln und stellt fest, dass der entsprechende DFA Ω(2k ) Zustände hat. Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 99/388 Da die Komplexität eines Algorithmus von der Größe der Eingabe abhängt, ist dieser Unterschied in der Eingabegröße natürlich wesentlich, denn es gilt: kurze Eingabe wie beim NFA ⇒ wenig Zeit für einen effizienten Algorithmus, lange Eingabe wie beim DFA ⇒ mehr Zeit für einen effizienten Algorithmus. Info IV c Ernst W. Mayr 3.10 Entscheidbarkeit 100/388 4. Kontextfeie Grammatiken und Sprachen 4.1 Grundlagen und ein Beispiel Sei L= := {w ∈ {0, 1}∗ ; w enthält gleich viele 0en und 1en}. Sei #a (w) die Anzahl der Zeichen a in der Zeichenreihe w, d.h. L= = {w ∈ {0, 1}∗ ; #0 (w) = #1 (w)}. L= ist sicherlich nicht regulär (vgl. Pumping-Lemma). Info IV c Ernst W. Mayr 4.1 Grundlagen und ein Beispiel 101/388 Satz 58 Die (kontextfreie) Grammatik G S→|T T → T T | 0T 1 | 1T 0 | 01 | 10 erzeugt L= . Beweis: Sei w ∈ L= . Betrachte für jedes Präfix x von w die Zahl #1 (x) − #0 (x) . Falls w = w0 w00 für nichtleere w0 , w00 ∈ L= , wende man Induktion über |w| an, falls nicht, ist w von der Form 0w0 1 oder 1w0 0, und Induktion liefert wiederum die Behauptung. Info IV c Ernst W. Mayr 4.1 Grundlagen und ein Beispiel 102/388 Definition (Wiederholung, siehe Def. 19) Eine kontextfreie Grammatik G heißt eindeutig, wenn es für jedes w ∈ L(G) genau einen Ableitungsbaum gibt. Eine kontextfreie Sprache L heißt eindeutig, falls es eine eindeutige kontextfreie Grammatik G mit L = L(G) gibt. Ansonsten heißt L inhärent mehrdeutig. Die oben angegebene Grammatik für L= ist nicht eindeutig. Info IV c Ernst W. Mayr 4.1 Grundlagen und ein Beispiel 103/388 4.2 Die Chomsky-Normalform Sei G = (V, Σ, P, S) eine kontexfreie Grammatik. Definition 59 Eine kontextfreie Grammatik G ist in Chomsky-Normalform, falls alle Produktionen eine der Formen A→a A ∈ V, a ∈ Σ, A → BC A, B, C ∈ V, oder S→ haben. Info IV c Ernst W. Mayr 4.2 Die Chomsky-Normalform 104/388 Algorithmus zur Konstruktion einer (äquivalenten) Grammatik in Chomsky-Normalform Eingabe: Eine kontextfreie Grammatik G = (V, Σ, P, S) 1 2 Wir fügen für jedes a ∈ Σ zu V ein neues Nichtterminal Ya hinzu, ersetzen in allen Produktionen a durch Ya und fügen Ya → a als neue Produktion zu P hinzu. /* linearer Zeitaufwand, Größe vervierfacht sich höchstens */ Wir ersetzen jede Produktion der Form A → B1 B2 · · · Br (r ≥ 3) durch A → B1 C2 , C2 → B2 C3 , . . . , Cr−1 → Br−1 Br , wobei C2 , . . . , Cr−1 neue Nichtterminale sind. /* linearer Zeitaufwand, Größe vervierfacht sich höchstens */ Info IV c Ernst W. Mayr 4.2 Die Chomsky-Normalform 105/388 3 Für alle C, D ∈ V , C 6= D, mit C →+ D, füge für jede Produktion der Form A → BC ∈ P bzw. A → CB ∈ P die Produktion A → BD bzw. A → DB zu P hinzu. /* quadratischer Aufwand pro A */ 4 Für alle α ∈ L(G) ∩ (V 2 ∪ Σ), füge S → α zu P hinzu. 5 Streiche alle Produktionen der Form A → B aus P . Info IV c Ernst W. Mayr 4.2 Die Chomsky-Normalform 106/388 Zusammenfassend können wir festhalten: Satz 60 Aus einer kontextfreien Grammatik G = (V, Σ, P, S) der Größe s(G) kann in Zeit O(|V |2 · s(G)) eine äquivalente kontextfreie Grammatik in Chomsky-Normalform der Größe O(|V |2 · s(G)) erzeugt werden. Info IV c Ernst W. Mayr 4.2 Die Chomsky-Normalform 107/388 4.3 Der Cocke-Kasami-Younger-Algorithmus Der CYK-Algorithmus entscheidet das Wortproblem für kontextfreie Sprachen, falls die Sprache in Form einer Grammatik in Chomsky-Normalform gegeben ist. Eingabe: Grammatik G = (V, Σ, P, S) in Chomsky-Normalform, w = w1 . . . wn ∈ Σ∗ mit der Länge n. O.B.d.A. n > 0. Definition Vij := {A ∈ V ; A →∗ wi . . . wj } . Es ist klar, dass w ∈ L(G) ⇔ S ∈ V1n . Info IV c Ernst W. Mayr 4.3 Der Cocke-Kasami-Younger-Algorithmus 108/388 Der CYK-Algorithmus berechnet alle Vij rekursiv nach wachsendem j − i. Den Anfang machen die Vii := {A ∈ V ; A → wi ∈ P }, der rekursive Aufbau erfolgt nach der Regel Vij = [ {A ∈ V ; (A → BC) ∈ P ∧B ∈ Vik ∧C ∈ Vk+1,j } für i < j. i≤k<j Die Korrektheit dieses Aufbaus ist klar, wenn die Grammatik in Chomsky-Normalform vorliegt. Info IV c Ernst W. Mayr 4.3 Der Cocke-Kasami-Younger-Algorithmus 109/388 Zur Komplexität des CYK-Algorithmus 2 Es werden n 2+n Mengen Vij berechnet. Für jede dieser Mengen werden |P | Produktionen und höchstens n Werte für k betrachtet. Der Test der Bedingung (A → BC) ∈ P ∧ B ∈ Vik ∧ C ∈ Vk+1,j erfordert bei geeigneter Repräsentation der Mengen Vij konstanten Aufwand. Der Gesamtaufwand ist also O(|P |n3 ). Mit der gleichen Methode und dem gleichen Rechenaufwand kann man zu dem getesteten Wort, falls es in der Sprache ist, auch gleich einen Ableitungsbaum konstruieren, indem man sich bei der Konstruktion der Vij nicht nur merkt, welche Nichtterminale sie enthalten, sondern auch gleich, warum sie sie enthalten, d.h. aufgrund welcher Produktionen sie in die Menge aufgenommen wurden. Info IV c Ernst W. Mayr 4.3 Der Cocke-Kasami-Younger-Algorithmus 110/388 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen Zur Erinnerung: Das Pumping-Lemma für reguläre Sprachen: Für jede reguläre Sprache L gibt es eine Konstante n ∈ N, so dass sich jedes Wort z ∈ L mit |z| ≥ n zerlegen lässt in z = uvw mit |uv| ≤ n, |v| ≥ 1 und uv ∗ w ⊆ L. Zum Beweis haben wir n = |Q| gewählt, wobei Q die Zustandsmenge eines L erkennenden DFA war. Das Argument war dann, dass beim Erkennen von z (mindestens) ein Zustand zweimal besucht werden muss und damit der dazwischen liegende Weg im Automaten beliebig oft wiederholt werden kann. Völlig gleichwertig kann man argumentieren, dass bei der Ableitung von z mittels einer rechtslinearen Grammatik ein Nichtterminalsymbol (mindestens) zweimal auftreten muss und die dazwischen liegende Teilableitung beliebig oft wiederholt werden kann. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 111/388 Genau dieses Argument kann in ähnlicher Form auch auf kontextfreie Grammatiken (in Chomsky-Normalform) angewendet werden: Satz 61 (Pumping-Lemma) Für jede kontextfreie Sprache L gibt es eine Konstante n ∈ N, so dass sich jedes Wort z ∈ L mit |z| ≥ n zerlegen lässt in z = uvwxy, mit 1 |vx| ≥ 1, 2 |vwx| ≤ n, und 3 ∀i ∈ N0 : uv i wxi y ∈ L. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 112/388 Beweis: Sei G = (V, Σ, P, S) eine Grammatik in Chomsky-Normalform mit L(G) = L. Wähle n = 2|V | . Sei z ∈ L(G) mit |z| ≥ n. Dann hat der Ableitungsbaum für z (ohne die letzte Stufe für die Terminale) mindestens die Tiefe |V | + 1, da er wegen der Chomsky-Normalform den Verzweigungsgrad 2 hat. Auf einem Pfadabschnitt der Länge ≥ |V | + 1 kommt nun mindestens ein Nichtterminal wiederholt vor. Die zwischen diesen beiden Vorkommen liegende Teilableitung kann nun beliebig oft wiederholt werden. Info IV c Ernst W. Mayr 113/388 Sq Beweis: u v @ @ q @ @ @ q @ @ @ @ @ @ @ w x y z Sq u Sq @ @ q @ @ @ w @ @ @ @ @ y @ u v2 Dieser Ableitungsbaum zeigt uwy ∈ L @ q @ @ @ q @ @ @ @ q @ @ y@ @ @ @ @ w x2 Dieser Ableitungsbaum zeigt uv 2 wx2 y ∈ L Die Bedingungen 1 und 2 sind hierbei ebenso erfüllt. Warum? → ÜA. Info IV c Ernst W. Mayr 113/388 Beweis: Sei G = (V, Σ, P, S) eine Grammatik in Chomsky-Normalform mit L(G) = L. Wähle n = 2|V | . Sei z ∈ L(G) mit |z| ≥ n. Dann hat der Ableitungsbaum für z (ohne die letzte Stufe für die Terminale) mindestens die Tiefe |V | + 1, da er wegen der Chomsky-Normalform den Verzweigungsgrad 2 hat. Auf einem Pfadabschnitt der Länge ≥ |V | + 1 kommt nun mindestens ein Nichtterminal wiederholt vor. Die zwischen diesen beiden Vorkommen liegende Teilableitung kann nun beliebig oft wiederholt werden. Um |vwx| ≤ n zu erreichen, muss man das am weitesten unten liegende Doppelvorkommen eines solchen Nichtterminals wählen. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 113/388 Beispiel 62 Wir wollen sehen, dass die Sprache {ai bi ci ; i ∈ N0 } nicht kontextfrei ist. Wäre sie kontextfrei, so könnten wir das Wort an bn cn (n die Konstante aus dem Pumping-Lemma) aufpumpen, ohne aus der Sprache herauszufallen. Wir sehen aber leicht, dass das Teilwort v nur aus a’s bestehen kann und bei jeder möglichen Verteilung des Teilworts x Pumpen entweder die Anzahl der a’s, b’s und c’s unterschiedlich ändert oder, wenn (#a (vx) =) #b (vx) = #c (vx) > 0 , dass b’s und c’s in der falschen Reihenfolge auftreten. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 114/388 Zur Vereinfachung von Beweisen wie in dem gerade gesehenen Beispiel führen wir die folgende Verschärfung des Pumping-Lemmas ein: Satz 63 (Ogdens Lemma) Für jede kontextfreie Sprache L gibt es eine Konstante n ∈ N, so dass für jedes Wort z ∈ L mit |z| ≥ n die folgende Aussage gilt: Werden in z mindestens n (beliebige) Buchstaben markiert, so lässt sich z zerlegen in z = uvwxy, so dass 1 in vx mindestens ein Buchstabe und 2 in vwx höchstens n Buchstaben markiert sind und 3 (∀i ∈ N0 )[uv i wxi y ∈ L] . Bemerkung: Das Pumping-Lemma ist eine triviale Folgerung aus Ogdens Lemma (markiere alle Buchstaben in z). Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 115/388 Beweis: Sei G = (V, Σ, P, S) eine Grammatik in Chomsky-Normalform mit L(G) = L. Wähle n = 2|V |+1 . Sei z ∈ L und seien in z mindestens n Buchstaben markiert. In einem Ableitungsbaum für z markieren wir alle (inneren) Knoten, deren linker und rechter Teilbaum jeweils mindestens ein markiertes Blatt enthalten. Es ist nun offensichtlich, dass es einen Pfad von der Wurzel zu einem Blatt gibt, auf dem mindestens |V | + 1 markierte innere Knoten liegen. Info IV c Ernst W. Mayr 116/388 Beweis: ... Wir betrachten die letzten |V | + 1 markierten inneren Knoten eines Pfades mit maximaler Anzahl markierter Knoten; nach dem Schubfachprinzip sind zwei mit demselben Nichtterminal, z.B. A, markiert. Wir nennen diese Knoten v1 und v2 . Seien die Blätter des Teilbaumes mit der Wurzel v2 insgesamt mit w und die Blätter des Teilbaumes mit der Wurzel v1 insgesamt mit vwx beschriftet. Es ist dann klar, dass die folgende Ableitung möglich ist: S →∗ uAy →∗ uvAxy →∗ uvwxy . Es ist auch klar, dass der Mittelteil dieser Ableitung weggelassen oder beliebig oft wiederholt werden kann. Info IV c Ernst W. Mayr 116/388 Beweis: ... Es bleibt noch zu sehen, dass vx mindestens einen und vwx höchstens n markierte Buchstaben enthält. Ersteres ist klar, da auch der Unterbaum von v1 , der v2 nicht enthält, ein markiertes Blatt haben muss. Letzteres ist klar, da der gewählte Pfad eine maximale Anzahl von markierten inneren Knoten hatte und unterhalb von v1 nur noch höchstens |V | markierte Knoten auf diesem Pfad sein können. Der Teilbaum mit Wurzel v1 kann also maximal 2|V |+1 = n markierte Blätter haben. Formal kann man z.B. zeigen, dass ein Unterbaum, der auf jedem Ast maximal k markierte (innere) Knoten enthält, höchstens 2k markierte Blätter enthält. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 116/388 Beispiel 64 L = {ai bj ck dl ; i = 0 oder j = k = l} . Sei n die Konstante aus Ogdens Lemma. Betrachte das Wort abn cn dn und markiere darin bcn d. Nun gibt es eine Zerlegung abn cn dn = uvwxy, so dass vx mindestens ein markiertes Symbol enthält und uv 2 wx2 y ∈ L. Es ist jedoch leicht zu sehen, dass dies einen Widerspruch liefert, da vx höchstens zwei verschiedene der Symbole b, c, d enthalten kann, damit beim Pumpen nicht die Reihenfolge durcheinander kommt. Info IV 4.4 Das Pumping-Lemma und Ogdens Lemma für kontextfreie Sprachen c Ernst W. Mayr 117/388 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken Satz 65 Sie G = (V, Σ, P, S) kontextfrei. Dann kann die Menge V 0 der Variablen A ∈ V , für die gilt: (∃w ∈ Σ∗ )[A →∗ w] in Zeit O(|V | · s(G)) berechnet werden. Beweis: Betrachte folgenden Algorithmus: ∆ := {A ∈ V ; (∃(A → w) ∈ P mit w ∈ Σ∗ }; V 0 := ∅; while ∆ 6= ∅ do V 0 := V 0 ∪ ∆ ∆ := {A ∈ V \ V 0 ; (∃A → α) ∈ P mit α ∈ (V 0 ∪ Σ)∗ } od Induktion über die Länge der Ableitung. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 118/388 Definition 66 A ∈ V heißt nutzlos, falls es keine Ableitung S →∗ w, w ∈ Σ∗ gibt, in der A vorkommt. Satz 67 Die Menge der nutzlosen Variablen kann in Zeit O(|V | · s(G)) bestimmt werden. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 119/388 Beweis: Sei V 00 die Menge der nicht nutzlosen Variablen. Offensichtlich gilt: V 00 ⊆ V 0 (V 0 aus dem vorigen Satz). Falls S 6∈ V 0 , dann sind alle Variablen nutzlos. Ansonsten: ∆ := {S}; V 00 := ∅; while ∆ 6= ∅ do V 00 := V 00 ∪ ∆ ∆ := {B ∈ V 0 \ V 00 ; (∃A → αBβ) ∈ P mit A ∈ V 00 , α, β ∈ (V 0 ∪ Σ)∗ } od Induktion über Länge der Ableitung: Am Ende des Algorithmus ist V 00 gleich der Menge der nicht nutzlosen Variablen. Bemerkung: Alle nutzlosen Variablen und alle Produktionen, die nutzlose Variablen enthalten, können aus der Grammatik entfernt werden, ohne die erzeugte Sprache zu ändern. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 120/388 Korollar 68 Für eine kontextfreie Grammatik G kann in Zeit O(|V | · s(G)) entschieden werden, ob L(G) = ∅. Beweis: L(G) = ∅ ⇐⇒ S 6∈ V 00 (bzw. S 6∈ V 0 ) Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 121/388 Satz 69 Für eine kontextfreie Grammatik G = (V, Σ, P, S) ohne nutzlose Variablen und in Chomsky-Normalform kann in linearer Zeit entschieden werden, ob |L(G)| < ∞ . Beweis: Definiere gerichteten Hilfsgraphen mit Knotenmenge V und Kante A → B ⇐⇒ (A → BC) oder (A → CB) ∈ P . L(G) ist endlich ⇐⇒ dieser Graph enthält keinen Zyklus. Verwende DFS, um in linearer Zeit festzustellen, ob der Graph Zyklen enthält. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 122/388 Satz 70 Seien kontextfreie Grammatiken G1 = (V1 , Σ1 , P1 , S1 ) und G2 = (V2 , Σ2 , P2 , S2 ) gegeben. Dann können in linearer Zeit kontextfreie Grammatiken für 1 L(G1 ) ∪ L(G2 ), 2 L(G1 )L(G2 ), 3 (L(G1 ))∗ konstruiert werden. Die Klasse der kontextfreien Sprachen ist also unter Vereinigung, Konkatenation und Kleene’scher Hülle abgeschlossen. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 123/388 Beweis: Ohne Beschränkung der Allgemeinheit nehmen wir an, dass V1 ∩ V2 = ∅. 1 V = V1 ∪ V2 ∪ {S}; S neu P = P1 ∪ P2 ∪ {S → S1 |S2 } 2 V = V1 ∪ V2 ∪ {S}; S neu P = P1 ∪ P2 ∪ {S → S1 S2 } 3 V = V1 ∪ {S, S 0 }; S, S 0 neu P = P1 ∪ {S → S 0 |, S 0 → S1 S 0 |S1 } Falls ∈ L(G1 ) oder ∈ L(G2 ), sind noch Korrekturen vorzunehmen, die hier als Übungsaufgabe überlassen bleiben. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 124/388 Satz 71 Die Klasse der kontextfreien Sprachen ist nicht abgeschlossen unter Durchschnitt oder Komplement. Beweis: Es genügt zu zeigen (wegen de Morgan (1806–1871)): nicht abgeschlossen unter Durchschnitt. L1 := {ai bi cj ; i, j ≥ 0} ist kontextfrei L2 := {ai bj cj ; i, j ≥ 0} ist kontextfrei L1 ∩ L2 = {ai bi ci ; i ≥ 0} ist nicht kontextfrei Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 125/388 Satz 72 Die Klasse der kontextfreien Sprachen ist abgeschlossen gegenüber Substitution (mit kontextfreien Mengen). Beweis: Ersetze jedes Terminal a durch ein neues Nichtterminal Sa und füge zu den Produktionen P für jedes Terminal a die Produktionen einer kontextfreien Grammatik Ga = (Va , Σ, Pa , Sa ) hinzu. Forme die so erhaltene Grammatik in eine äquivalente Chomsky-2-Grammatik um. Info IV c Ernst W. Mayr 4.5 Algorithmen für kontextfreie Sprachen/Grammatiken 126/388 4.6 Greibach-Normalform Definition 73 Sei G = (V, Σ, P, S) eine kontextfreie Grammatik. G ist in Greibach-Normalform (benannt nach Sheila Greibach (UCLA)), falls jede Produktion 6= S → von der Form A → aα mit a ∈ Σ, α ∈ V ∗ ist. Lemma 74 Sei G = (V, Σ, P, S) kontextfrei, (A → α1 Bα2 ) ∈ P , und sei B → β1 |β2 | . . . |βr die Menge der B-Produktionen (also die Menge der Produktionen mit B auf der linken Seite). Ersetzt man A → α1 Bα2 durch A → α1 β1 α2 |α1 β2 α2 | . . . |α1 βr α2 , so ändert sich die von der Grammatik erzeugte Sprache nicht. Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 127/388 Lemma 75 Sei G = (V, Σ, P, S) kontextfrei, sei A → Aα1 |Aα2 | . . . |Aαr die Menge der linksrekursiven A-Produktionen (alle αi 6= , die Produktion A → A kommt o.B.d.A. nicht vor), und seien A → β1 |β2 | . . . |βs die restlichen A-Produktionen (ebenfalls alle βi 6= ). Ersetzen wir alle A-Produktionen durch A → β1 | . . . |βs |β1 A0 | . . . |βs A0 A0 → α1 | . . . |αr |α1 A0 | . . . |αr A0 , wobei A0 ein neues Nichtterminal ist, so ändert sich die Sprache nicht, und die neue Grammatik enthält keine linksrekursive A-Produktion mehr. Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 128/388 Beweis: Von A lassen sich vor der Transformation alle Zeichenreihen der Form (β1 |β2 | . . . |βs )(α1 |α2 | . . . |αr )+ ableiten. Dies ist auch nach der Transformation der Fall. Während vor der Transformation alle Zeichenreihen der obigen Form von rechts her aufgebaut werden, werden sie danach von links nach rechts erzeugt. Die Umkehrung gilt ebenso. Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 129/388 Satz 76 Zu jeder kontextfreien Grammatik G gibt es eine äquivalente Grammatik in Greibach-Normalform. Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 130/388 Beweis: Sei o.B.d.A. G = (V, Σ, P, S) mit V = {A1 , . . . , Am } in Chomsky-Normalform und enthalte keine nutzlosen Variablen. Bemerkung: Im folgenden Algorithmus werden ggf neue Variablen hinzugefügt, die Programmvariable m ändert sich dadurch entsprechend! Info IV c Ernst W. Mayr 131/388 Beweis: for k = 1, . . . , m do for j = 1, . . . , k − 1 do for all (Ak → Aj α) ∈ P do ersetze die Produktion gemäß der Konstruktion in Lemma 74 od od co die rechte Seite keiner Ak0 -Produktion, k 0 < k, beginnt nun noch mit einer Variablen Aj , j < k oc ersetze alle linksrekursiven Ak -Produktionen gemäß der Konstruktion in Lemma 75 co die rechte Seite keiner Ak0 -Produktion, k 0 ≤ k, beginnt nun noch mit einer Variablen Aj , j ≤ k oc od Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 131/388 Korollar 77 Sei G eine kontextfreie Grammatik. Es gibt einen Algorithmus, der eine zu G äquivalente Grammatik in Greibach-Normalform konstruiert, deren rechte Seiten jeweils höchstens zwei Variablen enthalten. Beweis: Klar! Info IV c Ernst W. Mayr 4.6 Greibach-Normalform 132/388 4.7 Kellerautomaten In der Literatur findet man häufig auch die Bezeichnungen Stack-Automat oder Pushdown-Automat. Kellerautomaten sind, wenn nichts anderes gesagt wird, nichtdeterministisch. Definition 78 Ein NPDA = PDA (= Nichtdeterministischer Pushdown-Automat) besteht aus: Q endliche Zustandsmenge Σ endliches Eingabealphabet ∆ endliches Stackalphabet q0 ∈ Q Anfangszustand Z0 ∈ ∆ Initialisierung des Stack δ Übergangsrelation ∗ Fkt. Q × (Σ ∪ {}) × ∆ → 2Q×∆ wobei |δ(q, a, Z)| + |δ(q, , Z)| < ∞ ∀q, a, Z F ⊆ Q akzeptierende Zustände Info IV c Ernst W. Mayr 4.7 Kellerautomaten 133/388 Der Kellerautomat $ E I N G A B E $ Q rot grun Info IV c Ernst W. Mayr 4.7 Kellerautomaten Keller 134/388 Konfiguration: Tupel (q, w, α) mit q w α ∈Q ∈ Σ∗ ∈ ∆∗ Info IV c Ernst W. Mayr Schritt: (q, w0 w0 , Zα0 ) → (q 0 , w0 , Z1 . . . Zr α0 ) wenn (q 0 , Z1 . . . Zr ) ∈ δ(q, w0 , Z) bzw.: (q, w, Zα0 ) → (q 0 , w, Z1 . . . Zr α0 ) wenn (q 0 , Z1 . . . Zr ) ∈ δ(q, , Z) 4.7 Kellerautomaten 135/388 Definition 79 1 Ein NPDA A akzeptiert w ∈ Σ∗ durch leeren Stack, falls (q0 , w, Z0 ) →∗ (q, , ) für ein q ∈ Q . 2 Ein NPDA A akzeptiert w ∈ Σ∗ durch akzeptierenden Zustand, falls (q0 , w, Z0 ) →∗ (q, , α) für ein q ∈ F, α ∈ ∆∗ . 3 Ein NPDA heißt deterministisch (DPDA), falls |δ(q, a, Z)| + |δ(q, , Z)| ≤ 1 Info IV c Ernst W. Mayr 4.7 Kellerautomaten ∀(q, a, Z) ∈ Q × Σ × ∆ . 136/388 Beispiel 80 Der PDA mit δ(q0 , a, ∗) δ(q0 , #, ∗) δ(q1 , 0, 0) δ(q1 , 1, 1) δ(q1 , , Z0 ) = = = = = {(q0 , a ∗)} {(q1 , ∗ )} {(q1 , )} {(q1 , )} {(q1 , )} für a ∈ {0, 1}, ∗ ∈ {0, 1, Z0 } für ∗ ∈ {0, 1, Z0 } akzeptiert mit leerem Stack die Sprache L = {w#wR ; w ∈ {0, 1}∗ } . Info IV c Ernst W. Mayr 137/388 Beispiel 80 Der PDA mit δ(q0 , a, ∗) δ(q0 , #, ∗) δ(q1 , 0, 0) δ(q1 , 1, 1) δ(q1 , , Z0 ) = = = = = {(q0 , a ∗)} {(q1 , ∗ )} {(q1 , )} {(q1 , )} {(qa , )} für a ∈ {0, 1}, ∗ ∈ {0, 1, Z0 } für ∗ ∈ {0, 1, Z0 } akzeptiert mit akzeptierendem Zustand (F = {qa }) (und leerem Stack) die Sprache L = {w#wR ; w ∈ {0, 1}∗ } . Info IV c Ernst W. Mayr 4.7 Kellerautomaten 137/388 Satz 81 Sei A1 = (Q, Σ, ∆, q0 , Z0 , δ, F ) ein NPDA, der mit Endzustand akzeptiert. Dann kann in linearer Zeit ein NPDA A2 = (Q0 , Σ, ∆0 , q00 , Z00 , δ 0 ) konstruiert werden, der L(A1 ) mit leerem Stack akzeptiert. Info IV c Ernst W. Mayr 4.7 Kellerautomaten 138/388 Beweis: A2 simuliert A1 . Sobald A1 in einen akzeptierenden Endzustand gerät, rät A2 , ob die Eingabe zu Ende gelesen ist. Falls A2 dies meint, wird der Keller geleert. Um zu verhindern, dass bei der Simulation von A1 der Keller leer wird, ohne dass A1 akzeptiert, führen wir ein neues Kellersymbol Z00 ein: Q0 ∆0 = Q ∪ {q̄, q00 } = ∆ ∪ {Z00 } und wir erweitern δ zu δ 0 gemäß δ 0 (q00 , , Z00 ) = {(q0 , Z0 Z00 )} δ 0 (q, , Z) ∪= {(q̄, )} für q ∈ F, Z ∈ ∆0 0 δ (q̄, , Z) = {(q̄, )} für Z ∈ ∆0 Info IV c Ernst W. Mayr 4.7 Kellerautomaten 139/388 Bemerkung: Akzeptieren mit leerem Keller bedeutet, dass der NPDA akzeptiert, falls der Keller leer ist und die Eingabe gelesen ist. Info IV c Ernst W. Mayr 140/388 Bemerkung: Akzeptieren mit leerem Keller bedeutet, dass der NPDA akzeptiert, falls der Keller leer ist und die Eingabe gelesen ist, bzw. dass, falls der Keller leer ist, der NPDA die bisher gelesene Eingabe akzeptiert. Info IV c Ernst W. Mayr 4.7 Kellerautomaten 140/388 Satz 82 Sei A1 = (Q, Σ, ∆, q0 , Z0 , δ) ein NPDA, der mit leerem Keller akzeptiert. Dann kann in linearer Zeit ein NPDA A2 = (Q0 , Σ, ∆0 , q00 , Z00 , δ 0 , F ) konstruiert werden, welcher L(A1 ) mit akzeptierendem Endzustand akzeptiert. Info IV c Ernst W. Mayr 4.7 Kellerautomaten 141/388 Beweis: A2 simuliert A1 . Am Anfang steht ein neues Kellersymbol auf dem Stack. Sobald bei der Simulation von A1 dieses auf dem Stack vorgefunden wird, weiß man, dass A1 seinen Stack leergeräumt hat und folglich akzeptiert. Folglich geht A2 in einen akzeptierenden Endzustand und hält: Q0 ∆0 F = = = Q ∪ {q00 , qf } ∆ ∪ {Z00 } {qf } δ 0 (q00 , , Z00 ) δ 0 (q, a, Z) δ 0 (q, , Z00 ) Info IV c Ernst W. Mayr = = = {(q0 , Z0 Z00 )} δ(q, a, Z) für q ∈ Q, a ∈ Σ ∪ {}, Z ∈ ∆ {(qf , Z00 )} für q ∈ Q 4.7 Kellerautomaten 142/388 4.8 Kellerautomaten und kontextfreie Sprachen Satz 83 Sei G eine CFG in Greibach-Normalform. Dann kann in linearer Zeit ein NPDA A konstruiert werden (welcher mit leerem Stack akzeptiert), so dass L(A) = L(G) . Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 143/388 Beweis: Sei o.B.d.A. 6∈ L(G). Der Automat startet mit S auf dem Stack. Er sieht sich in jedem Schritt das oberste Stacksymbol A an und überprüft, ob es in G eine Produktion gibt, deren linke Seite A ist und deren rechte Seite mit dem Terminal beginnt, welches unter dem Lesekopf steht. Sei also G = (V, T, P, S). Konstruiere NPDA A = (Q, Σ, ∆, q0 , Z0 , δ) mit Q ∆ Σ Z0 := := := := {q0 } V T S δ(q0 , a, A) 3 (q0 , α) für (A → aα) ∈ P . Info IV c Ernst W. Mayr 144/388 Beweis (Forts.): Zu zeigen ist nun: L(A) = L(G). Hilfsbehauptung: S →∗G w1 . . . wi A1 . . . Am mit wj ∈ T, Aj ∈ V per Linksableitung ⇔ (q0 , w1 . . . wi , Z0 ) →∗A (q0 , , A1 . . . Am ) Der Beweis erfolgt durch Induktion über die Anzahl der Schritte in der Linksableitung. Info IV c Ernst W. Mayr 144/388 Beweis (Forts.): Induktionsanfang (i = 0): S →∗G S Info IV c Ernst W. Mayr ⇔ (q0 , , Z0 ) →∗A (q0 , , Z0 ) 144/388 Beweis (Forts.): Induktionsschritt ((i − 1) 7→ i): S →∗G w1 . . . wi A1 . . . Am ⇔ S →∗G w1 . . . wi−1 A0 Av . . . Am v ∈ {1, . . . , m + 1} →G w1 . . . wi A1 . . . Am (also (A0 → wi A1 . . . Av−1 ) ∈ P ) gemäß Induktionsvoraussetzung ⇔ ⇔ (q0 , w1 . . . wi−1 , Z0 ) (q0 , w1 . . . wi−1 wi , Z0 ) →∗A (q0 , , A0 Av . . . Am ) →∗A (q0 , wi , A0 Av . . . Am ) →A (q0 , , A1 . . . Am ) da (A0 → wi A1 . . . Av−1 ) ∈ P ) ⇔ (q0 , w1 . . . wi , Z0 ) →∗A (q0 , , A1 . . . Am ) Info IV c Ernst W. Mayr 144/388 Beweis (Forts.): Aus der Hilfsbehauptung folgt L(A) = L(G) . Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 144/388 Satz 84 Sei A = (Q, Σ, ∆, q0 , Z0 , δ) ein NPDA, der mit leerem Keller akzeptiert. Dann ist L(A) kontextfrei. Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 145/388 Beweis: Wir definieren: G = (V, T, P, S) T := Σ V := Q × ∆ × Q ∪ {S} wobei wir die Tupel mit [, , ] notieren P 3 S → [q0 , Z0 , q] für q ∈ Q P 3 [q, Z, qm ] → a[p, Z1 , q1 ][q1 , Z2 , q2 ] · · · [qm−1 , Zm , qm ] für δ(q, a, Z) 3 (p, Z1 · · · Zm ), ∀q1 , . . . , qm ∈ Q, mit a ∈ Σ ∪ {} . Idee: Aus [p, X, q] sollen sich alle die Wörter ableiten lassen, die der NPDA A lesen kann, wenn er im Zustand p mit (lediglich) X auf dem Stack startet und im Zustand q mit leerem Stack endet. Info IV c Ernst W. Mayr 146/388 Beweis (Forts.): Hilfsbehauptung: [p, X, q] →∗G w ⇔ (p, w, X) →∗A (q, , ) . ⇒“: Induktion über die Länge l der Ableitung. ” Induktionsanfang (l = 1): [p, X, q] →G w Info IV c Ernst W. Mayr ⇒ δ(p, w, X) 3 (q, ) ⇒ (p, w, X) →A (q, , ) 146/388 Beweis (Forts.): Induktionsschritt ((l − 1) 7→ l): Gelte [p, X, qm+1 ] →G a[q1 , X1 , q2 ][q2 , X2 , q3 ] · · · [qm , Xm , qm+1 ] →∗G aw(1) · · · w(m) = w li (i) mit P (q1 , X1 · · · Xm ) ∈ δ(p, a, X), [qi , Xi , qi+1 ] →G w und li < l. Dann gilt gemäß Induktionsvoraussetzung ⇒ (qi , w(i) , Xi ) →lAi (qi+1 , , ) ∀i ∈ {1, . . . , m} ⇒ (q, |aw(1) ·{z· · w(m)}, X) →A (q1 , w(1) · · · w(m) , X1 · · · Xm ) =w →<l A (qm+1 , , ) . Info IV c Ernst W. Mayr 146/388 Beweis (Forts.): ⇐“: Induktion über die Länge l einer Rechnung des NPDAs A ” Induktionsanfang (l = 1): (p, w, X) →A (q, , ) ⇒ (q, ) ∈ δ(p, w, X) ⇒ ([p, X, q] → w) ∈ P . Info IV c Ernst W. Mayr (also |w| ≤ 1) 146/388 Beweis (Forts.): Induktionsschritt ((l − 1) 7→ l): Sei (p, w, X) →A (q1 , w0 , X1 · · · Xm ) →∗A (q, , ) eine Rechnung von A der Länge l, mit w = ew0 und e ∈ Σ ∪ {}. Nach Definition gibt es ([p, X, q] → e[q1 X1 q2 ] · · · [qm Xm qm+1 ]) ∈ P mit qm+1 = q und eine Zerlegung w0 = w(1) · · · w(m) , so dass w(1) · · · w(i) der von A zu dem Zeitpunkt verarbeitete Teilstring von w0 ist, wenn Xi+1 zum ersten Mal oberstes Stacksymbol (bzw., für i = m, der Stack leer) wird. Info IV c Ernst W. Mayr 146/388 Beweis (Forts.): Gemäß Induktionsvoraussetzung gilt also (qi , w(i) , Xi ) →lAi (qi+1 , , ) mit X li < l und [qi , Xi , qi+1 ] →∗G w(i) . Also folgt: [p, X, q] →G e[q1 , X1 , q2 ] · · · [qm , Xm , qm+1 ] mit qm+1 = q (1) →<l · · · w(m) = w G ew Aus der Hilfsbehauptung folgt der Satz. Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 146/388 Satz 85 Folgende Aussagen sind äquivalent: L wird von einer kontextfreien Grammatik erzeugt. L wird von einem NPDA akzeptiert. Beweis: Folgt aus den vorhergehenden Sätzen. Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 147/388 Bemerkung Für die Praxis (z.B. Syntaxanalyse von Programmen) sind polynomiale Algorithmen wie CYK noch zu langsam. Für Teilklassen von CFLs sind schnellere Algorithmen bekannt, z.B. Jay Earley: An Efficient Context-free Parsing Algorithm. Communications of the ACM, 13(2):94–102, 1970 Info IV c Ernst W. Mayr 4.8 Kellerautomaten und kontextfreie Sprachen 148/388 4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls |δ(q, a, Z)| + |δ(q, , Z)| ≤ 1 ∀(q, a, Z) ∈ Q × Σ × ∆ . Die von einem DPDA, der mit leerem Keller akzeptiert, erkannte Sprache genügt der Fano-Bedingung, d.h. kein Wort in der Sprache ist echtes Präfix eines anderen Wortes in der Sprache. Festlegung: Da wir an einem weniger eingeschränkten Maschinenmodell interessiert sind, legen wir fest, dass ein DPDA stets mit akzeptierenden Zuständen akzeptiert. Info IV c Ernst W. Mayr 4.9 Deterministische Kellerautomaten 149/388 Definition 86 Ein DPDA ist in Normalform, falls gilt: 1 (q 0 , α) = δ(q, e, X) für e ∈ Σ ∪ {}, q, q 0 ∈ Q, X ∈ ∆ ⇒ α ∈ {, X, Y X} für Y ∈ ∆ . 2 Der Automat liest jede Eingabe vollständig. Satz 87 Zu jedem DPDA A = (Q, Σ, ∆, q0 , Z0 , δ, F ) kann ein äquivalenter DPDA A0 = (Q0 , Σ, ∆0 , q00 , Z00 , δ 0 , F 0 ) in Normalform konstruiert werden. Info IV c Ernst W. Mayr 4.9 Deterministische Kellerautomaten 150/388 Beweis: Erste Schritte der Konstruktion: 1 Werden von A in einem Schritt mehr als zwei Symbole auf dem Stack abgelegt, wird dies von A0 durch eine Folge von Schritten mit je 2 Stacksymbolen ersetzt. 2 Werden zwei oder ein Stacksymbol abgelegt und dabei das oberste Stacksymbol X geändert, entfernen wir zunächst in einem eigenen Schritt das oberste Stacksymbol und pushen dann die gewünschten Symbole. (Das Merken“ erfolgt in der ” Zustandsmenge Q0 .) 3 Wir vervollständigen δ 0 mittels eines Fangzustandes. Es könnte hier noch sein, dass der DPDA eine Schleife aus lauter -Übergängen ausführt. Info IV c Ernst W. Mayr 151/388 Beweis (Forts.): Hilfsbehauptung: Der DPDA A führt ab einer bestimmten Konfiguration (q, , β) unendlich viele direkt aufeinander folgende -Übergänge genau dann aus, wenn (q, , β) (q 0 , , X) →∗ →+ (q 0 , , Xβ 0 ) (q 0 , , Xα) und für q, q 0 ∈ Q X ∈ ∆, α, β, β 0 ∈ ∆∗ ⇐“: klar ” Info IV c Ernst W. Mayr 151/388 Beweis (Forts.): ⇒“: Betrachte eine unendlich lange Folge von -Übergängen. ” Sei n := |Q| · |∆| + |β| + 1. Wird die Stackhöhe n nie erreicht, so muss sich sogar eine Konfiguration des DPDA’s wiederholen. Daraus folgt die Behauptung. Info IV c Ernst W. Mayr 151/388 Beweis (Forts.): Ansonsten wird jede Stackhöhe |β|, . . . , n mindestens einmal erreicht (wegen der Normalform ist die Höhendifferenz pro Schritt ∈ {−1, 0, 1}). Betrachte den Zeitpunkt t, in dem die Stackhöhe zum erstenmal n ist. Markiere für jedes i ∈ {|β|, . . . , n} den Zeitpunkt ti , wo zum letzen Mal (vor Zeitpunkt t) die Stackhöhe = i ist. Zu diesen Zeitpunkten ti betrachte die Paare (q, X) ∈ Q × ∆, wobei q der Zustand des DPDA’s und X das oberste Kellersymbol des DPDA’s zu diesem Zeitpunkt ist. Da es mehr als |∆| · |Q| markierte Paare gibt, taucht ein markiertes Paar (q 0 , X) doppelt auf. Für dieses gilt dann (q 0 , , X) →+ (q 0 , , Xα). Info IV c Ernst W. Mayr 151/388 Beweis (Forts.): Stack t Info IV c Ernst W. Mayr Zeit 151/388 Beweis (Forts.): Das gleiche Argument gilt, falls sich die Stackhöhe um > |Q| · |∆| erhöht. Damit lassen sich alle Paare (q 0 , X) finden, für die gilt: (q 0 , , X) →+ (q 0 , , Xα), α ∈ ∆∗ . Da der DPDA nicht endlos weiterlaufen soll, ersetzen wir δ(q 0 , , X) durch einen -Übergang in einen neuen Zustand q 00 (der genau dann akzeptierend ist, wenn in der Schleife (q 0 , , X) →+ (q 0 , , Xα) ein akzeptierender Zustand auftritt) und einen -Übergang von q 00 in den nichtakzeptierenden Fangzustand. Info IV c Ernst W. Mayr 4.9 Deterministische Kellerautomaten 151/388 Satz 88 Die Klasse der deterministischen kontextfreien Sprachen (also der von DPDA’s erkannten Sprachen) [DCFL] ist unter Komplement abgeschlossen. Beweis: Folgt aus der obigen Konstruktion! Info IV c Ernst W. Mayr 4.9 Deterministische Kellerautomaten 152/388 4.10 LR(k)-Grammatiken Beispiel 89 (Grammatik für Arithmetische Ausdrücke) Regeln: S→A A→E |A+E |A−E E → P | E ∗ P | E/P P → (A) | a Wir betrachten für das Parsen einen bottom-up-Ansatz, wobei die Reduktionen von links nach rechts angewendet werden. Info IV c Ernst W. Mayr 153/388 Beispiel 89 (Grammatik für Arithmetische Ausdrücke) Dabei können sich bei naivem Vorgehen allerdings Sackgassen ergeben, die dann aufgrund des Backtracking zu einem ineffizienten Algorithmus führen: Regeln: S→A A→E |A+E |A−E E → P | E ∗ P | E/P P → (A) | a Info IV c Ernst W. Mayr Ableitung: a + a P + a E + a A + a S + a ∗ ∗ ∗ ∗ ∗ a a a a a 153/388 Beispiel 89 (Grammatik für Arithmetische Ausdrücke) . . . oder auch Regeln: S→A A→E |A+E |A−E E → P | E ∗ P | E/P P → (A) | a Info IV c Ernst W. Mayr Ableitung: a P E A A A + + + + + + A A A a a a a P E ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ a a a a a a a P E 153/388 Beispiel 89 (Grammatik für Arithmetische Ausdrücke) Zur Behebung des Problems führen wir für jede Ableitungsregel (besser hier: Reduktionsregel) einen Lookahead (der Länge k) ein (in unserem Beispiel k = 1) und legen fest, dass eine Ableitungsregel nur dann angewendet werden darf, wenn die nächsten k Zeichen mit den erlaubten Lookaheads übereinstimmen. Info IV c Ernst W. Mayr 153/388 Beispiel 89 (Grammatik für Arithmetische Ausdrücke) Produktion S→A A→E A→A+E A→A−E E→P E →E∗P E → E/P P → (A) P →a Info IV c Ernst W. Mayr Lookaheads (der Länge 1) +, −, ), +, −, ), +, −, ), beliebig beliebig beliebig beliebig beliebig 153/388 Beispiel 89 (Grammatik für Arithmetische Ausdrücke) Damit ergibt sich Produktion S→A A→E A→A+E A→A−E E→P E →E∗P E → E/P P → (A) P →a Info IV c Ernst W. Mayr Lookaheads +, −, ), +, −, ), +, −, ), beliebig beliebig beliebig beliebig beliebig Ableitung: a P E A A A A A + + + + + + + + a a a a P E E ∗ ∗ ∗ ∗ ∗ ∗ ∗ E a a a a a a P A S 4.10 LR(k)-Grammatiken 153/388 Definition 90 Eine kontextfreie Grammatik ist eine LR(k)-Grammatik, wenn man durch Lookaheads der Länge k erreichen kann, dass bei einer Reduktion von links nach rechts in jedem Schritt höchstens eine Produktion/Reduktion anwendbar ist. Korollar 91 Jede kontextfreie Sprache, für die es eine LR(k)-Grammatik gibt, ist deterministisch kontextfrei. Info IV c Ernst W. Mayr 4.10 LR(k)-Grammatiken 154/388 Bemerkung: Es gibt eine (im allgemeinen nicht effiziente) Konstruktion, um aus einer LR(k)-Grammatik, k > 1, eine äquivalente LR(1)-Grammatik zu machen. Korollar 92 Die folgenden Familien von Sprachen sind gleich: die Familie DCFL, die LR(1)-Sprachen. Info IV c Ernst W. Mayr 4.10 LR(k)-Grammatiken 155/388 4.11 LL(k)-Grammatiken Beispiel 93 (Noch eine Grammatik) Regeln: S→A S→A A→E |E+A A → EA0 A0 → +A | E →P |P ∗E E → P E0 E 0 → ∗E | P → (A) | a P → (A) | a Wir betrachten nun für das Parsen einen top-down-Ansatz, wobei die Produktionen in Form einer Linksableitung angewendet werden. Info IV c Ernst W. Mayr 156/388 Beispiel 93 (Noch eine Grammatik) Regeln: Ableitung: S→A A→E |E+A E →P |P ∗E P → (A) | a Info IV c Ernst W. Mayr S A E P a + a ∗ a 156/388 Beispiel 93 (Noch eine Grammatik) Wir bestimmen nun für jede Produktion A → α ihre Auswahlmenge, das heißt die Menge aller terminalen Präfixe der Länge ≤ k der von α ableitbaren Zeichenreihen. Es ergibt sich (der Einfachheit lassen wir -Produktionen zu): S A A0 A0 E E0 E0 P P Info IV c Ernst W. Mayr →A → EA0 → +A → → P E0 → ∗E → → (A) →a {a, (} {a, (} {+} {), } {a, (} {∗} {+, ), } {(} {a} 156/388 Beispiel 93 (Noch eine Grammatik) Damit ergibt sich S A A0 A0 E E0 E0 P P →A → EA0 → +A → → P E0 → ∗E → → (A) →a {a, (} {a, (} {+} {), } {a, (} {∗} {+, ), } {(} {a} Ableitung: S EA0 aE 0 A0 .. . a + P E 0 A0 .. . a + a ∗ P E 0 A0 .. . a+a∗a Info IV c Ernst W. Mayr 4.11 LL(k)-Grammatiken 156/388 Bemerkungen: 1 Parser für LL(k)-Grammatiken entsprechen der Methode des rekursiven Abstiegs (recursive descent). 2 LL(k) ist eine strikte Teilklasse von LR(k). 3 Es gibt L ∈ DCFL, so dass L 6∈ LL(k) für alle k. Info IV c Ernst W. Mayr 4.11 LL(k)-Grammatiken 157/388 5. Kontextsensitive und Typ-0-Sprachen 5.1 Turingmaschinen Turingmaschinen sind das grundlegende Modell, das wir für Computer/Rechenmaschinen verwenden. Es geht auf Alan Turing (1912–1954) zurück. Info IV c Ernst W. Mayr 5.1 Turingmaschinen 158/388 Definition 94 Eine nichtdeterministische Turingmaschine (kurz TM oder NDTM) wird durch ein 7-Tupel M = (Q, Σ, Γ, δ, q0 , , F ) beschrieben, das folgende Bedingungen erfüllt: 1 Q ist eine endliche Menge von Zuständen. 2 Σ ist eine endliche Menge, das Eingabealphabet. 3 Γ ist eine endliche Menge, das Bandalphabet. 4 δ : Q × Γ → P(Q × Γ × {L, R, N }) ist die Übergangsfunktion. 5 q0 ∈ Q ist der Startzustand. 6 ∈ Γ \ Σ ist das Leerzeichen. 7 F ⊆ Q ist die Menge der (akzeptierenden) Endzustände. Eine Turingmaschine heißt deterministisch, falls gilt |δ(q, a)| ≤ 1 für alle q ∈ Q, a ∈ Γ. Info IV c Ernst W. Mayr 5.1 Turingmaschinen 159/388 Erläuterung: Intuitiv bedeutet δ(q, a) = (q 0 , b, d) bzw. δ(q, a) 3 (q 0 , b, d): Wenn sich M im Zustand q befindet und unter dem Schreib-/Lesekopf das Zeichen a steht, so geht M im nächsten Schritt in den Zustand q 0 über, schreibt an die Stelle des a’s das Zeichen b und bewegt danach den Schreib-/Lesekopf um eine Position nach rechts (falls d = R), links (falls d = L) bzw. lässt ihn unverändert (falls d = N ). Info IV c Ernst W. Mayr 5.1 Turingmaschinen 160/388 Beispiel 95 Es soll eine TM angegeben werden, die eine gegebene Zeichenreihe aus {0, 1}+ als Binärzahl interpretiert und zu dieser Zahl 1 addiert. Folgende Vorgehensweise bietet sich an: 1 Gehe ganz nach rechts bis ans Ende der Zahl. Dieses Ende kann durch das erste Auftreten eines Leerzeichens gefunden werden. 2 Gehe wieder nach links bis zur ersten 0 und ändere diese zu einer 1. Ersetze dabei auf dem Weg alle 1en durch 0. Also: δ(q0 , 0) = (q0 , 0, R) δ(q1 , 1) = (q1 , 0, L) δ(q0 , 1) = (q0 , 1, R) δ(q1 , 0) = (qf , 1, N ) δ(q0 , ) = (q1 , , L) δ(q1 , ) = (qf , 1, N ) Damit ist Q = {q0 , q1 , qf } und F = {qf }. Info IV c Ernst W. Mayr 5.1 Turingmaschinen 161/388 Definition 96 Eine Konfiguration einer Turingmaschine ist ein Tupel (α, q, β) ∈ Γ∗ × Q × Γ∗ . Das Wort w = αβ entspricht dem Inhalt des Bandes, wobei dieses rechts und links von w mit dem Leerzeichen gefüllt sei. Der Schreib-/Lesekopf befindet sich auf dem ersten Zeichen von β∞ . Die Startkonfiguration der Turingmaschine bei Eingabe x ∈ Σ∗ entspricht der Konfiguration (, q0 , x) , d.h. auf dem Band befindet sich genau die Eingabe x ∈ Σ∗ , der Schreib-/Lesekopf befindet sich über dem ersten Zeichen der Eingabe und die Maschine startet im Zustand q0 . Info IV c Ernst W. Mayr 5.1 Turingmaschinen 162/388 Je nach aktuellem Bandinhalt und Richtung d ∈ {L, R, N } ergibt sich bei Ausführung des Zustandsübergangs δ(q, β1 ) = (q 0 , c, d) folgende Änderung der Konfiguration: (α1 · · · αn , q 0 , cβ2 · · · βm ) (, q 0 , cβ2 · · · βm ) (α · · · α 0 1 n−1 , q , αn cβ2 · · · βm ) (α1 · · · αn , q, β1 · · · βm ) → (α1 · · · αn c, q 0 , ) (α1 · · · αn c, q 0 , β2 · · · βm ) falls d = N , n ≥ 0, m ≥ 1 falls d = L, n = 0, m ≥ 1 falls d = L, n ≥ 1, m ≥ 1 falls d = R, n ≥ 0, m = 1 falls d = R, n ≥ 0, m ≥ 2 Der Fall m = 0 wird mittels β1 = abgedeckt. Info IV c Ernst W. Mayr 5.1 Turingmaschinen 163/388 Definition 97 Die von einer Turingmaschine M akzeptierte Sprache ist L(M ) = {x ∈ Σ∗ ; (, q0 , x) →∗ (α, q, β) mit q ∈ F, α, β ∈ Γ∗ } Info IV c Ernst W. Mayr 5.1 Turingmaschinen 164/388 5.2 Linear beschränkte Automaten Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q ∈ Q gilt: (q 0 , c, d) ∈ δ(q, ) =⇒ c = . Ein Leerzeichen wird also nie durch ein anderes Zeichen überschrieben. Mit anderen Worten: Die Turingmaschine darf ausschliesslich die Positionen beschreiben, an denen zu Beginn die Eingabe x steht. Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 165/388 Satz 99 Die von linear beschränkten, nichtdeterministischen Turingmaschinen akzeptierten Sprachen sind genau die kontextsensitiven (also Chomsky-1) Sprachen. Beweis: Wir beschreiben nur die Beweisidee. =⇒“: Wir benutzen eine Menge von Nichtterminalsymbolen, die ” Q × Σ enthält, für die Grammatik. Die Grammatik erzeugt zunächst alle akzeptierenden Konfigurationen (der Form αqf β mit qf ∈ F ), wobei qf und β1 zusammen als ein Zeichen codiert sind. Sie enthält weiterhin Regeln, die es gestatten, aus jeder Satzform, die eine Konfiguration darstellt, alle möglichen unmittelbaren Vorgängerkonfigurationen abzuleiten. Die zur Anfangskonfiguration (, q0 , w) gehörige Satzform ist damit ableitbar gdw der LBA das Wort w akzeptiert. Info IV c Ernst W. Mayr 166/388 Satz 99 Die von linear beschränkten, nichtdeterministischen Turingmaschinen akzeptierten Sprachen sind genau die kontextsensitiven (also Chomsky-1) Sprachen. Beweis: Wir beschreiben nur die Beweisidee. ⇐=“: Wir simulieren mittels des LBA nichtdeterministisch und in ” Rückwärtsrichtung die möglichen Ableitungen der kontextsensitiven Grammatik und prüfen, ob wir die Satzform S erreichen können. Da die Grammatik längenmonoton ist, nimmt der vom LBA benötigte Platz nie zu. Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 166/388 Beispiel 100 Die Sprache L = {am bm cm | m ∈ N0 } ist kontextsensitiv. Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 167/388 Satz 101 Das Wortproblem für LBAs bzw. für Chomsky-1-Grammatiken ist entscheidbar. Beweis: Siehe z.B. die Konstruktion zum vorhergehenden Satz bzw. Übungsaufgabe. Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 168/388 Satz 102 Die Familie CSL der kontextsensitiven (bzw. Chomsky-1) Sprachen ist abgeschlossen unter den folgenden Operationen: ∩, ∪, ·, ∗ ,¯ Beweis: Der Beweis für die ersten vier Operationen ergibt sich unmittelbar aus den Eigenschaften linear beschränkter Automaten, der Abschluss unter Komplement wird später gezeigt ( Induktives ” Zählen“). Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 169/388 Satz 103 Folgende Probleme sind für die Familie der Chomsky-1-Sprachen nicht entscheidbar: 1 Leerheit 2 Äquivalenz 3 Durchschnitt Beweis: ohne Beweis. Info IV c Ernst W. Mayr 5.2 Linear beschränkte Automaten 170/388 5.3 Chomsky-0-Sprachen Satz 104 Zu jeder (nichtdeterministischen) TM N gibt es eine deterministische TM (DTM) M mit L(N ) = L(M ) . Beweis: Die DTM erzeugt in BFS-Manier, für k = 0, 1, . . ., alle Konfigurationen, die die TM N in k Schritten erreichen kann. Sie hält gdw sich dabei eine akzeptierende Konfiguration ergibt. Info IV c Ernst W. Mayr 5.3 Chomsky-0-Sprachen 171/388 Satz 105 Die von (nichtdeterministischen oder deterministischen) Turingmaschinen akzeptierten Sprachen sind genau die Chomsky-0-Sprachen. Beweis: Wir beschreiben nur die Beweisidee. =⇒“: Die Grammatik erzeugt zunächst alle akzeptierenden ” Konfigurationen (der Form αqf β mit qf ∈ F ). Sie enthält weiterhin Regeln, die es gestatten, aus jeder Satzform, die eine Konfiguration darstellt, alle möglichen unmittelbaren Vorgängerkonfigurationen abzuleiten. Die zur Anfangskonfiguration (, q0 , w) gehörige Satzform ist damit ableitbar gdw die TM das Wort w akzeptiert. Die Produktionen ergeben sich kanonisch aus der Übergangsrelation der TM. Sie sind i.a. nicht mehr längenmonoton! Info IV c Ernst W. Mayr 172/388 Satz 105 Die von (nichtdeterministischen oder deterministischen) Turingmaschinen akzeptierten Sprachen sind genau die Chomsky-0-Sprachen. Beweis: Wir beschreiben nur die Beweisidee. ⇐=“: Wir simulieren mit der TM alle Ableitungen der ” Chomsky-0-Grammatik in BFS-Manier und akzeptieren, falls eine solche Ableitung das Eingabewort x ergibt. Man beachte, dass die konstruierte TM nicht unbedingt immer hält! Eine andere Idee ist, wie im LBA-Fall die Ableitungen rückwärts zu simulieren. Info IV c Ernst W. Mayr 5.3 Chomsky-0-Sprachen 172/388 6. Übersicht Chomsky-Hierarchie 6.1 Die Chomsky-Hierarchie Typ 3 DCFL Typ 2 Typ 1 Typ 0 Info IV c Ernst W. Mayr reguläre Grammatik DFA NFA regulärer Ausdruck LR(k)-Grammatik deterministischer Kellerautomat kontextfreie Grammatik (nichtdeterministischer) Kellerautomat kontextsensitive Grammatik (nichtdet.) linear beschränkter Automat (LBA) Chomsky-Grammatik, Phrasenstrukturgrammatik det./nichtdet. Turingmaschine 6.1 Die Chomsky-Hierarchie 173/388 6.2 Wortproblem Typ 3, gegeben als DFA DCFL, gegeben als DPDA Typ 2, CNF-Grammatik Typ 1 Typ 0 Info IV c Ernst W. Mayr lineare Laufzeit lineare Laufzeit CYK-Algorithmus, Laufzeit O(n3 ) exponentiell — 6.2 Wortproblem 174/388 6.3 Abschlusseigenschaften Typ 3 DCFL Typ 2 Typ 1 Typ 0 Schnitt ja nein nein ja ja Info IV c Ernst W. Mayr Vereinigung ja nein ja ja ja Komplement ja ja nein ja nein 6.3 Abschlusseigenschaften Produkt ja nein ja ja ja Stern ja nein ja ja ja 175/388 6.4 Entscheidbarkeit Typ 3 DCFL Typ 2 Typ 1 Typ 0 Wortproblem ja ja ja ja nein Info IV c Ernst W. Mayr Leerheit ja ja ja nein nein Äquivalenz ja ja nein nein nein 6.4 Entscheidbarkeit Schnittproblem ja nein nein nein nein 176/388 Kapitel II Berechenbarkeit, Entscheidbarkeit 1. Der Begriff der Berechenbarkeit Unsere Vorstellung ist: f : Nk0 → N0 ist berechenbar, wenn es einen Algorithmus gibt, der f berechnet, und genauer, der bei Eingabe (n1 , . . . , nk ) ∈ Nk0 nach endlich vielen Schritten mit dem Ergebnis f (n1 , . . . , nk ) ∈ N0 hält. Was bedeutet Algorithmus“ an dieser Stelle? ” AWK, B, C, Euler, Fortran, Id, JAVA, Lisp, Modula, Oberon, Pascal, Simula, . . .-Programme? Gibt es einen Unterschied, wenn man sich auf eine bestimmte Programmiersprache beschränkt? Info IV c Ernst W. Mayr 1.0 Entscheidbarkeit 177/388 Analog für partielle Funktionen f : Nk0 ⊇ D → N0 bedeutet berechenbar Folgendes: 1 Algorithmus soll mit dem richtigen Ergebnis stoppen, wenn (n1 , . . . , nk ) ∈ D 2 und nicht stoppen, wenn (n1 , . . . , nk ) 6∈ D. Info IV c Ernst W. Mayr 1.0 Entscheidbarkeit 178/388 Beispiel 106 Wir definieren ( 1 f1 (n) = 0 ( 1 f2 (n) = 0 1 f3 (n) = 0 folgende Funktionen: falls n als Ziffernfolge Anfangsstück von π ist sonst falls n interpretiert als Ziffernfolge in π vorkommt sonst falls mindestens n aufeinanderfolgende Ziffern in π gleich 1 sind sonst π = 3, 14159265358979323846264338327950288419716939937 . . . Einige Beispiele sind damit: f1 (314) = 1, f1 (415) = 0, f2 (415) = 1 . Info IV c Ernst W. Mayr 179/388 Beispiel 106 ( 1 falls n als Ziffernfolge Anfangsstück von π ist f1 (n) = 0 sonst Wie man leicht einsieht, ist f1 berechenbar, denn um festzustellen, ob eine Ziffernfolge ein Anfangsstück von π ist, muss π nur auf entsprechend viele Dezimalstellen berechnet werden. Info IV c Ernst W. Mayr 179/388 Beispiel 106 ( 1 f2 (n) = 0 falls n interpretiert als Ziffernfolge in π vorkommt sonst Für f2 wissen wir nicht, ob es berechenbar ist. Um festzustellen, dass die Ziffernfolge in π vorkommt, müsste man π schrittweise immer genauer approximieren. Der Algorithmus würde stoppen, wenn die Ziffernfolge gefunden wird. Aber was ist, wenn die Ziffernfolge in π nicht vorkommt? Vielleicht gibt es aber einen (noch zu findenden) mathematischen Satz, der genaue Aussagen über die in π vorkommenden Ziffernfolgen macht. Wäre π vollkommen zufällig, was es aber nicht ist, dann würde jedes n als Ziffernfolge irgendwann vorkommen. Info IV c Ernst W. Mayr 179/388 Beispiel 106 f3 (n) = 1 0 falls mindestens n aufeinanderfolgende Ziffern in π gleich 1 sind sonst f3 ist berechenbar, denn f3 ≡ f4 , mit ( 1 n ≤ n0 f4 (n) = 0 sonst wobei n0 die maximale Anzahl von aufeinanderfolgenden 1en in π ist. Hierbei ist es nicht von Bedeutung, wie die Zahl n0 berechnet werden kann - wichtig ist nur, dass eine solche Zahl n0 ∈ N existiert. Info IV c Ernst W. Mayr 1.0 Entscheidbarkeit 179/388 Weitere Vorschläge, den Begriff der Berechenbarkeit zu präzisieren und zu formalisieren: 1 Turing-Berechenbarkeit 2 Markov-Algorithmen 3 λ-Kalkül 4 µ-rekursive Funktionen 5 Registermaschinen 6 AWK, B, C, Euler, Fortran, Id, JAVA, Lisp, Modula, Oberon, Pascal, Simula, . . . -Programme 7 while-Programme 8 goto-Programme 9 DNA-Algorithmen 10 Quantenalgorithmen 11 u.v.a.m. Info IV c Ernst W. Mayr 1.0 Entscheidbarkeit 180/388 Es wurde bewiesen: Alle diese Beschreibungsmethoden sind in ihrer Mächtigkeit äquivalent. Church’sche These Dieser formale Begriff der Berechenbarkeit stimmt mit dem intuitiven überein. Info IV c Ernst W. Mayr 1.0 Entscheidbarkeit 181/388 1.1 Turing-Berechenbarkeit Definition 107 Eine (partielle) Funktion f : Nk0 ⊇ D → N0 heißt Turing-berechenbar, falls es eine deterministische Turingmaschine gibt, die für jede Eingabe (n1 , . . . , nk ) ∈ D nach endlich vielen Schritten mit dem Bandinhalt f (n1 , . . . , nk ) ∈ N0 hält. Falls (n1 , . . . , nk ) 6∈ D, hält die Turingmaschine nicht! Dabei nehmen wir an, dass Tupel wie (n1 , . . . , nk ) geeignet codiert auf dem Band der Turingmaschine dargestellt werden. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 182/388 Eine beliebte Modellvariante ist die k-Band-Turingmaschine, die statt einem Band k, k ≥ 1, Arbeitsbänder zur Verfügung hat, deren Lese-/Schreibköpfe sie unabhängig voneinander bewegen kann. Oft existiert auch ein spezielles Eingabeband, das nur gelesen, aber nicht geschrieben werden kann (read-only). Der Lesekopf kann jedoch normalerweise in beiden Richtungen bewegt werden. Ebenso wird oft ein spezielles Ausgabeband verwendet, das nur geschrieben, aber nicht gelesen werden kann (write-only). Der Schreibkopf kann dabei nur nach rechts bewegt werden. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 183/388 Beispiel 108 (k-Band-Turingmaschine) ... ... ... ... ... ... .. . ... ? M 6 ... ? ... eseköpfe, die unabhängig voneinander bewegt wer Turingmaschine kann man durch eine 1-Band Turin Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 184/388 Satz 109 Jede k-Band-Turingmaschine kann effektiv durch eine 1-Band-TM simuliert werden. Beweis: Wir simulieren die k Bänder auf k Spuren eines Bandes, wobei wir das Teilalphabet für jede Spur auch noch so erweitern, dass die Kopfposition des simulierten Bandes mit gespeichert werden kann. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 185/388 Definition 110 Eine Sprache A ⊆ Σ∗ heißt rekursiv oder entscheidbar, falls es eine deterministische TM M gibt, die auf allen Eingaben ∈ Σ∗ hält und A erkennt. Definition 111 Eine Sprache A ⊆ Σ∗ heißt rekursiv aufzählbar (r.a.) oder semi-entscheidbar, falls es eine TM N gibt, für die L(N ) = A , also, falls A Chomsky-0 ist. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 186/388 Definition 112 Sei A ⊆ Σ∗ . Die charakteristische Funktion χA von A ist ( 1 falls w ∈ A χA (w) = 0 sonst Definition 113 Sei A ⊆ Σ∗ . χ0A ist definiert durch ( 1 0 χA (w) = undefiniert Info IV c Ernst W. Mayr falls w ∈ A sonst 1.1 Turing-Berechenbarkeit 187/388 Satz 114 A ist rekursiv ⇔ χA ist berechenbar. Beweis: Folgt aus der Definition von rekursiv: es gibt eine TM, die ja oder nein liefert. Wandle das Ergebnis in 1 oder 0. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 188/388 Satz 115 A ist rekursiv aufzählbar ⇔ χ0A ist berechenbar. Beweis: Folgt unmittelbar aus der Definition. Satz 116 A ist rekursiv ⇔ χ0A und χ0Ā sind berechenbar (⇔ A und Ā sind r.a.) Beweis: Nur ⇐ ist nichttrivial. Wir lassen hier eine TM für A und eine TM für Ā Schritt für Schritt parallel laufen. Info IV c Ernst W. Mayr 1.1 Turing-Berechenbarkeit 189/388 1.2 WHILE-Berechenbarkeit WHILE-Programme sind wie folgt definiert: Variablen: x1 , x2 , x3 , . . . Konstanten: 0, 1, 2, . . . Trennsymbole: ; := Operatoren: + - 6= Schlüsselwörter: WHILE DO END Info IV c Ernst W. Mayr 1.2 WHILE-Berechenbarkeit 190/388 Der Aufbau von WHILE-Programmen: xi := c, xi := xj + c, xi := xj − c sind WHILE-Programme Die Interpretation dieser Ausdrücke erfolgt, wie üblich, mit der Einschränkung, dass xj − c als 0 gewertet wird, falls c > xj . Sind P1 und P2 WHILE-Programme, so ist auch P1 ; P2 ein WHILE-Programm. Interpretation: Führe zuerst P1 und dann P2 aus. Ist P ein WHILE-Programm, so ist auch WHILE xi 6= 0 DO P END ein WHILE-Programm. Interpretation: Führe P solange aus, bis xi den Wert 0 hat. Achtung: Zuweisungen an xi im Innern von P beeinflussen dabei den Wert von xi ! Info IV c Ernst W. Mayr 1.2 WHILE-Berechenbarkeit 191/388 Satz 117 Ist eine Funktion WHILE-berechenbar, so ist sie auch Turing-berechenbar. Beweis: Die Turingmaschine merkt sich den Programmzähler des WHILE-Programms sowie die aktuellen Werte aller Variablen. Der Platz dafür muss notfalls immer wieder angepasst werden. Wir werden später auch die umgekehrte Aussage des obigen Satzes zeigen. Info IV c Ernst W. Mayr 1.2 WHILE-Berechenbarkeit 192/388 1.3 GOTO-Berechenbarkeit GOTO-Programme sind wie folgt definiert: Variablen: x1 , x2 , x3 , . . . Konstanten: 0, 1, 2, . . . Trennsymbole: ; := Operatoren: + - = Schlüsselwörter: IF THEN GOTO HALT Info IV c Ernst W. Mayr 1.3 GOTO-Berechenbarkeit 193/388 Ein GOTO-Programm ist eine Folge von markierten Anweisungen M1 : A1 ; M2 : A2 ; . . . ; Mk : Ak wobei die Ai Anweisungen und die Mi Zielmarken für Sprünge sind. Als Anweisungen können auftreten: Wertzuweisung: xi := xj ± c unbedingter Sprung: GOTO Mi bedingter Sprung: IF xj = c THEN GOTO Mi Stopanweisung: HALT Dabei ist c jeweils eine (beliebige) Konstante. Info IV c Ernst W. Mayr 1.3 GOTO-Berechenbarkeit 194/388 Satz 118 Jedes WHILE-Programm kann durch ein GOTO-Programm simuliert werden. Beweis: Ersetze jede WHILE-Schleife WHILE xi 6= 0 DO P END durch folgendes Konstrukt: M1 : M2 : Info IV c Ernst W. Mayr IF xi = 0 THEN GOTO M2 P; GOTO M1 ... 1.3 GOTO-Berechenbarkeit 195/388 Satz 119 Jedes GOTO-Programm kann durch ein WHILE-Programm simuliert werden. Info IV c Ernst W. Mayr 1.3 GOTO-Berechenbarkeit 196/388 Beweis: Gegeben sei das GOTO-Programm M1 : A1 ; M2 : A2 ; . . . ; Mk : Ak Wir simulieren dies durch ein WHILE-Programm mit genau einer WHILE-Schleife: c := 1; WHILE c 6= 0 DO IF c = 1 THEN A01 END; IF c = 2 THEN A02 END; .. . IF c = k THEN A0k END; END Info IV c Ernst W. Mayr 197/388 Beweis: wobei xj := xl ± b; c := c + 1 c := ` 0 Ai := IF xj = b THEN c := ` ELSE c := c + 1 END c := 0 falls Ai = xj := xl ± b falls Ai = GOTO M` falls Ai = IF xj = b THEN GOTO M` falls Ai = HALT Es bleibt als Übungsaufgabe überlassen, die IF-Anweisungen ebenfalls durch WHILE-Schleifen zu ersetzen. Info IV c Ernst W. Mayr 1.3 GOTO-Berechenbarkeit 197/388 Satz 120 Aus Turing-Berechenbarkeit folgt GOTO-Berechenbarkeit. Beweis: Die Konfiguration (α, q, β) einer (det.) 1-Band-TM wird in den Variablen xl , xQ , xr codiert. Die Zeichenreihen α und β werden als Zahlen (zu einer geeigneten Basis) aufgefasst, mit der niedrigstwertigen Ziffer bei der Position des Lese-/Schreibkopfes. Jedes Tupel der Übergangsfunktion der TM wird durch ein geeignetes kleines Programmstück simuliert. Dabei werden Operationen wie Multiplikation mit, Division durch und Modulorechnung zur Basis benötigt. Info IV c Ernst W. Mayr 1.3 GOTO-Berechenbarkeit 198/388 1.4 Primitiv-rekursive Funktionen Betrachte die kleinste Klasse der Funktion Nk0 → N0 , für die gilt: 1 Sie enthält die konstanten Funktionen. 2 Sie enthält die Nachfolgerfunktionen: n 7→ n + 1. 3 Sie enthält die Projektionsfunktionen: projk,i : Nk0 3 (x1 , . . . , xk ) 7→ xi ∈ N0 4 5 Sie ist abgeschlossen unter Komposition. Sie ist abgeschlossen unter primitiver Rekursion, d.h. mit g : Nn0 → N0 h : Nn+2 → N0 0 ist auch f (0, y1 , . . . , yn ) := g(y1 , . . . , yn ) f (m + 1, y1 , . . . , yn ) := h(f (m, y1 , . . . , yn ), m, y1 , . . . , yn ) (primitive Rekursion) in der Klasse (und sonst nichts). Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 199/388 Die soeben definierte Funktionenklasse sind die primitiv-rekursiven Funktionen. Beispiel 121 Die folgenden Funktionen sind primitiv-rekursiv: 1 (x, y) 7→ x + y; 2 (x, y) 7→ x ∗ y; 3 (x, y) 7→ max{x − y, 0}; 4 x 7→ 2x ; 5 x 7→ 2 .2 .. 2 2 Info IV c Ernst W. Mayr (Turm der Höhe x). 1.4 Primitiv-rekursive Funktionen 200/388 Satz 122 Jede primitiv-rekursive Funktion ist total. Beweis: Induktion über den Aufbau einer primitiv-rekursiven Funktion. Satz 123 Jede primitiv-rekursive Funktion ist berechenbar. Beweis: Induktion über den Aufbau einer primitiv-rekursiven Funktion. Korollar 124 Die primitiv-rekursiven Funktionen sind eine echte Teilklasse der berechenbaren totalen Funktionen. Es gibt nicht-totale berechenbare Funktionen. Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 201/388 Definition 125 Sei P (x) ein Prädikat, d.h. ein logischer Ausdruck, der in Abhängigkeit von x ∈ N0 den Wert true oder false liefert. Dann können wir diesem Prädikat in natürlicher Weise eine 0-1 Funktion P̂ : N0 → {0, 1} zuordnen, indem wir definieren, dass P̂ (x) = 1 genau dann, wenn P (x) = true ist. Wir nennen P (x) primitiv-rekursiv genau dann, wenn P̂ (x) primitiv-rekursiv ist. Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 202/388 Definition 126 Beschränkter max-Operator: Zu einem Prädikat P (x) definieren wir q : N0 → N0 ( 0 n 7→ max{x < n; P (x)} falls ¬P (x) für alle x < n sonst Dann gilt: Ist P primitiv-rekursiv, so auch q, denn: q(0) = 0 ( n falls P (n) q(n + 1) = q(n) sonst = q(n) + P̂ (n) ∗ (n − q(n)) Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 203/388 Definition 127 Beschränkter Existenzquantor: Zu einem Prädikat P (x) definieren wir ein neues Prädikat Q(x) mittels: Q(n) ist genau dann true, wenn ein x < n existiert, so dass P (x) = true. Dann gilt: Ist P primitiv-rekursiv, so auch Q, denn: Q̂(0) = 0 Q̂(n + 1) = P̂ (n) + Q̂(n) − P̂ (n) ∗ Q̂(n) Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 204/388 Beispiel 128 Zur bijektiven Abbildung von 2-Tupeln (bzw. n-Tupeln bei iterierter Anwendung der Paarbildung) natürlicher Zahlen in die Menge der natürlichen Zahlen verwendet man eine Paarfunktion, z.B.: 0 1 2 3 .. . 0 0 1 3 6 1 2 4 7 11 2 5 8 12 3 9 13 4 14 ··· n2 n1 Info IV c Ernst W. Mayr 205/388 Beispiel 128 Zur bijektiven Abbildung von 2-Tupeln (bzw. n-Tupeln bei iterierter Anwendung der Paarbildung) natürlicher Zahlen in die Menge der natürlichen Zahlen verwendet man eine Paarfunktion, z.B.: Betrachte: p : N20 → N0 mit p(n1 , n2 ) := (n1 +n2 )(n2 1 +n2 +1) + n2 c1 : N0 → N0 c1 (n) := s − (n − s(s+1) 2 ); i(i+1) s := max{i; 2 ≤ n} c2 : N0 → N0 c2 (n) := n − s(s+1) , 2 Info IV c Ernst W. Mayr wobei s wie oben 1.4 Primitiv-rekursive Funktionen 205/388 Satz 129 1 2 p stellt eine primitiv-rekursive, bijektive Paarfunktion von N20 nach N0 mit den Umkehrfunktionen c1 und c2 dar. Die Umkehrfunktionen c1 , c2 sind ebenfalls primitiv-rekursiv. Beweis: Übungsaufgabe. Info IV c Ernst W. Mayr 1.4 Primitiv-rekursive Funktionen 206/388 1.5 LOOP-Berechenbarkeit LOOP-Programme sind wie folgt definiert: Variablen: x1 , x2 , x3 , . . . Konstanten: 0, 1, 2, . . . Trennsymbole: ; := Operatoren: + Schlüsselwörter: LOOP DO END Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 207/388 Der Aufbau von LOOP-Programmen: xi := c, xi := xj + c, xi := xj − c sind LOOP-Programme. Die Interpretation dieser Ausdrücke erfolgt, wie üblich, mit der Einschränkung, dass xj − c als 0 gewertet wird, falls c > xj . Sind P1 und P2 LOOP-Programme, so ist auch P1 ; P2 ein LOOP-Programm. Interpretation: Führe zuerst P1 und dann P2 aus. Ist P ein LOOP-Programm, so ist auch LOOP xi DO P END ein LOOP-Programm. Interpretation: Führe P genau xi -mal aus. Achtung: Zuweisungen an xi im Innern von P haben keinen Einfluss auf die Anzahl der Schleifendurchläufe! Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 208/388 Definition 130 Eine Funktion f heißt LOOP-berechenbar genau dann, wenn es ein LOOP-Programm gibt, das f berechnet. LOOP-Programme können IF . . . THEN . . . ELSE . . . END Konstrukte simulieren. Der Ausdruck IF x = 0 THEN A END kann durch folgendes Programm nachgebildet werden: y := 1; LOOP x DO y := 0 END; LOOP y DO A END; LOOP-berechenbare Funktion sind immer total, denn: LOOP-Programme stoppen immer. Damit stellt sich natürlich die Frage, ob alle totalen Funktionen LOOP-berechenbar sind. Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 209/388 Satz 131 f ist primitiv-rekursiv ⇐⇒ f ist LOOP-berechenbar. Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 210/388 Beweis: Wir zeigen zunächst ⇐“: Sei also P ein LOOP-Programm, das ” f : Nn0 → N0 berechnet. P verwende die Variablen x1 , . . . , xk , k ≥ n. Zu zeigen: f ist primitiv-rekursiv. Der Beweis erfolgt durch strukturelle Induktion über den Aufbau von P . Info IV c Ernst W. Mayr 211/388 Beweis: Induktionsanfang: P : xi := xj ± c Wir zeigen: Es gibt eine primitiv-rekursive Funktion gP (ha1 , . . . , ak i) | {z } Belegung der Variablen beim Start von P = hb1 , . . . , bk i | {z } Belegung der Variablen am Ende von P Für P : xi := xj ± c erhält man: gP (ha1 , . . . , ak i) = ha1 , . . . , ai−1 , aj ± c, ai+1 , . . . , ak i Info IV c Ernst W. Mayr 211/388 Beweis: Induktionsschritt: Hier unterscheiden wir 2 Fälle: 1 Sei P : Q; R. Dann ist gP (x) = gR (gQ (x)). 2 Sei nun P : LOOP xi DO Q END. Idee: Definiere Funktion h(n, x), die die Belegung der Variablen berechnet, wenn man mit Belegung x startet und dann Q genau n mal ausführt. Dann ist: h(0, x) = x h(n + 1, x) = gQ (h(n, x)) und damit gP (x) = h(di (x), x), wobei di die i-te Umkehrfunktion von hx1 , . . . , xk i ist, also di (hx1 , . . . , xk i) = xi . Die Richtung ⇒“ wird durch strukturelle Induktion über den ” Aufbau von f gezeigt (Übungsaufgabe). Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 211/388 Definition 132 Die Ackermann-Funktion a : N20 → N0 : falls x = 0 y + 1 a(x, y) := a(x − 1, 1) falls x ≥ 1, y = 0 a(x − 1, a(x, y − 1)) falls x, y ≥ 1 Einige Eigenschaften der Ackermann-Funktion, die man per Induktion zeigen kann: 1 a(1, y) = y + 2, a(2, y) = 2y + 3 für alle y 2 y < a(x, y) 3 a(x, y) < a(x, y + 1) 4 a(x, y + 1) ≤ a(x + 1, y) 5 a(x, y) < a(x + 1, y) Info IV c Ernst W. Mayr ∀x, y ∀x, y ∀x, y ∀x, y 1.5 LOOP-Berechenbarkeit 212/388 Genauer: 0 1 y→ 2 3 4 5 0 1 x 2 ↓ 3 1 2 3 5 2 3 5 13 3 4 7 29 4 5 9 61 5 6 11 125 6 7 13 253 4 5 13 65533 65533 ... 265536 − 3 −3 ... Info IV c Ernst W. Mayr 22 65536 1.5 LOOP-Berechenbarkeit −3 22 265536 213/388 Lemma 133 Sei P ein LOOP-Programm mit den Variablen x1 , . . . , xk , und sei X X n0i ; ni ≤ n}, fP (n) = max{ i i wobei, für i = 1, . . . , k, n0i der Wert von xi nach Beendigung von P und ni der Startwert von xi vor Beginn von P ist. Dann gibt es ein t ∈ N, so dass ∀n ∈ N0 : fP (n) < a(t, n). Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 214/388 Beweis: durch Induktion über den Aufbau von P . Induktionsanfang: P = xi := xj ± c, o.E. c ∈ {0, 1}. Es ist klar, dass fP (n) ≤ 2n + 1 < 2n + 3 = a(2, n) für alle n ⇒ t = 2 tut es! Info IV c Ernst W. Mayr 215/388 Beweis: durch Induktion über den Aufbau von P . Induktionsschritt: 1. Fall: P = P1 ; P2 . Nach Induktionsannahme gibt es k1 , k2 ∈ N, so dass für i = 1, 2 und für alle n ∈ N0 fPi < a(ki , n). Damit fP (n) ≤ fP2 (fP1 (n)) ≤ fP2 (a(k1 , n)) Monotonie von fP2 < a(k2 , a(k1 , n)) I.A., setze k3 := max{k2 , k1 − 1}. ≤ a(k3 , a(k3 + 1, n)) Monotonie! = a(k3 + 1, n + 1) ≤ a(k3 + 2, n) Eigenschaft 4 der Ackermannfkt. und t = k3 + 2 tut es hier! Info IV c Ernst W. Mayr 215/388 Beweis: durch Induktion über den Aufbau von P . Induktionsschritt: 2. Fall: P = LOOP xi DO Q END. Die Abschätzung erfolgt analog zum 1. Fall und wird als Übungsaufgabe überlassen. Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 215/388 Satz 134 Die Ackermann-Funktion ist nicht LOOP-berechenbar. Beweis: Angenommen doch. Sei P ein zugehöriges LOOP-Programm, das g(n) := a(n, n) berechnet. Nach Definition von fP gilt g(n) ≤ fP (n) für alle n ∈ N0 . Wähle gemäß dem obigen Lemma t mit fP (·) < a(t, ·) und setze n = t: fP (t) < a(t, t) = g(t) ≤ fP (t) ⇒ Widerspruch! Info IV c Ernst W. Mayr 1.5 LOOP-Berechenbarkeit 216/388 1.6 µ-rekursive Funktionen Für eine Funktion f liefert der so genannte µ-Operator das kleinste Argument, für das f gleich 0 wird (falls ein solches existiert). Der µ-Operator gestattet so z.B., vorab die Anzahl der Durchläufe einer WHILE-Schleife zu bestimmen, bis die Laufvariable gleich 0 wird. Definition 135 Sei f eine (nicht notwendigerweise totale) k + 1-stellige Funktion. Die durch Anwendung des µ-Operators entstehende Funktion fµ ist definiert durch: fµ : Nk0 → N0 min{n ∈ N0 ; f (n, x1 , . . . , xk ) = 0} falls (x1 , . . . , xk ) 7→ f (m, x1 , . . . , xk ) definiert für alle m ≤ n ⊥ (undefiniert) sonst Info IV c Ernst W. Mayr 1.6 µ-rekursive Funktionen 217/388 Definition 136 Die Klasse der µ-rekursiven Funktionen ist die kleinste Klasse von (nicht notwendigerweise totalen) Funktionen, die die Basisfunktionen (konstante Funktionen, Nachfolgerfunktion, Projektionen) enthält und alle Funktionen, die man hieraus durch (evtl. wiederholte) Anwendung von Komposition, primitiver Rekursion und/oder des µ-Operators gewinnen kann. Satz 137 f µ-rekursiv ⇐⇒ f WHILE-berechenbar. Beweis: Der Beweis ist elementar. Info IV c Ernst W. Mayr 1.6 µ-rekursive Funktionen 218/388 2. Entscheidbarkeit, Halteproblem Wir wollen nun zeigen, dass es keinen Algorithmus geben kann, der als Eingabe ein (beliebiges) Programm P und Daten x für P erhält und (für jedes solches Paar (P, x)!) entscheidet, ob P hält, wenn es mit Eingabe x gestartet wird. Wir erinnern uns: 1 Eine Sprache A ist rekursiv gdw die charakteristische Funktion χA berechenbar ist. 2 Eine Sprache A ist rekursiv aufzählbar (r.a.) gdw die semi-charakteristische Funktion χ0A berechenbar ist. Info IV c Ernst W. Mayr 2.0 µ-rekursive Funktionen 219/388 2.1 Rekursive Aufzählbarkeit Definition 138 Eine Sprache A ⊆ Σ∗ heißt rekursiv auflistbar, falls es eine berechenbare Funktion f : N0 → Σ∗ gibt, so dass A = {f (0), f (1), f (2), . . .} . Bemerkung: Es ist nicht verlangt, dass die Auflistung in einer gewissen Reihenfolge (z.B. lexikalisch) erfolgt! Info IV c Ernst W. Mayr 2.1 Rekursive Aufzählbarkeit 220/388 Beispiel 139 Σ∗ (mit Σ = {0, 1}) ist rekursiv auflistbar. Wir betrachten dazu etwa folgende Funktion: alle nullstelligen Wörter alle einstelligen Wörter alle zweistelligen Wörter alle dreistelligen Wörter Info IV c Ernst W. Mayr f (0) = ( f (1) = 0 f (2) = 1 f (3) = 00 f (4) = 01 f (5) = 10 f (6) = 11 ( f (7) = 000 .. . 221/388 Beispiel 139 Eine weitere Möglichkeit, eine Funktion f anzugeben, die alle Wörter ∈ {0, 1}∗ auflistet, ist: f (n) = Binärkodierung von n + 1 ohne die führende 1 Also: f (0) = 1 f (1) = 10 f (2) = 11 f (3) = 100 .. .. . . Info IV c Ernst W. Mayr 221/388 Beispiel 139 LT M = {w ∈ {0, 1}∗ ; w ist Codierung einer TM} ist rekursiv auflistbar: Wir listen {0, 1}∗ rekursiv auf, prüfen jedes erzeugte Wort, ob es eine syntaktisch korrekte Codierung einer Turing-Maschine ist, und verwerfen es, falls nicht. Wir wählen stattdessen die kanonische Auflistung von {0, 1}∗ und ersetzen jedes dabei erzeugte Wort, das keine korrekte Codierung darstellt, durch den Code einer Standard-TM, die ∅ akzeptiert. Info IV c Ernst W. Mayr 2.1 Rekursive Aufzählbarkeit 221/388 Satz 140 Eine Sprache A ist genau dann rekursiv auflistbar, wenn sie rekursiv aufzählbar (semi-entscheidbar) ist. Info IV c Ernst W. Mayr 2.1 Rekursive Aufzählbarkeit 222/388 Beweis: Wir zeigen zunächst ⇒“. ” Sei f : N0 → Σ∗ eine berechenbare Funktion, die A auflistet. Betrachte folgenden Algorithmus: lies die Eingabe w ∈ Σ∗ x := 0 while true do if w = f (x) then return ( ja“); halt fi ” x := x + 1 od Info IV c Ernst W. Mayr 223/388 Beweis: Wir zeigen nun ⇐“. ” Sei P eine WHILE-Programm, das die semi-charakteristische Funktion χ0A berechnet, und sei f eine berechenbare Funktion, die Σ∗ auflistet. Betrachte folgenden Algorithmus: lies die Eingabe n ∈ N0 count := −1; k := −1 repeat k := k + 1 w := f (c1 (k)); m := c2 (k) if P hält bei Eingabe w in genau m Schritten then count := count + 1 until count = n return w Hier sind c1 und c2 die Umkehrfunktionen einer Paarfunktion. Info IV c Ernst W. Mayr 2.1 Rekursive Aufzählbarkeit 223/388 2.2 Halteproblem Definition 141 Unter dem speziellen Halteproblem Hs versteht man die folgende Sprache: Hs = {w ∈ {0, 1}∗ ; Mw angesetzt auf w hält} Hierbei ist (M , M0 , M1 , . . .) eine berechenbare Auflistung der Turing-Maschinen. Wir definieren weiter Definition 142 Ld = {w ∈ Σ∗ ; Mw akzeptiert w nicht} Info IV c Ernst W. Mayr 2.2 Halteproblem 224/388 Satz 143 Ld ist nicht rekursiv aufzählbar. Beweis: Wäre Ld r.a., dann gäbe es ein w, so dass Ld = L(Mw ). Dann gilt: Mw akzeptiert w nicht ⇔ ⇔ ⇔ w ∈ Ld w ∈ L(Mw ) Mw akzeptiert w =⇒“ Widerspruch! ” Korollar 144 Ld ist nicht entscheidbar. Info IV c Ernst W. Mayr 2.2 Halteproblem 225/388 Satz 145 Hs ist nicht entscheidbar. Beweis: Angenommen, es gäbe eine Turing-Maschine M , die Hs entscheidet. Indem man i.W. die Antworten von M umdreht, erhält man eine TM, die Ld entscheidet. Widerspruch! Info IV c Ernst W. Mayr 2.2 Halteproblem 226/388 2.3 Unentscheidbarkeit Definition 146 Unter dem (allgemeinen) Halteproblem H versteht man die Sprache H = {hx, wi ∈ {0, 1}∗ ; Mx angesetzt auf w hält} Satz 147 Das Halteproblem H ist nicht entscheidbar. Beweis: Eine TM, die H entscheidet, könnten wir benutzen, um eine TM zu konstruieren, die Hs entscheidet. Bemerkung: H und Hs sind beide rekursiv aufzählbar! Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 227/388 Definition 148 Seien A, B ⊆ Σ∗ . Dann heißt A (effektiv) reduzierbar auf B gdw ∃f : Σ∗ → Σ∗ , f total und berechenbar mit (∀w ∈ Σ∗ )[w ∈ A ⇔ f (w) ∈ B] . Wir schreiben auch A ,→f B bzw. A ,→ B . bzw. manchmal A ≤ B oder auch A f B . Ist A mittels f auf B reduzierbar, so gilt insbesondere f (A) ⊆ B und f (Ā) ⊆ B̄ . Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 228/388 Satz 149 Sei A ,→f B. (i) B rekursiv ⇒ A rekursiv. (ii) B rekursiv aufzählbar ⇒ A rekursiv aufzählbar. Beweis: (i) χA = χB ◦ f . (ii) χ0A = χ0B ◦ f . Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 229/388 Definition 150 Das Halteproblem auf leerem Band H0 ist H0 = {w ∈ {0, 1}∗ ; Mw hält auf leerem Band} . Satz 151 H0 ist unentscheidbar (nicht rekursiv). Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 230/388 Beweis: Betrachte die Abbildung f , die definiert ist durch: {0, 1}∗ 3 w 7→ f (w), f (w) ist die Gödelnummer einer TM, die, auf leerem Band angesetzt, zunächst c2 (w) auf das Band schreibt und sich dann wie Mc1 (w) (angesetzt auf c2 (w)) verhält. Falls das Band nicht leer ist, ist es unerheblich, wie sich Mf (w) verhält. f ist total und berechenbar. Es gilt: w ∈ H ⇔ Mc1 (w) angesetzt auf c2 (w) hält ⇔ Mf (w) hält auf leerem Band ⇔ f (w) ∈ H0 also H ,→f H0 und damit H0 unentscheidbar. Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 231/388 Bemerkung Es gibt also keine allgemeine algorithmische Methode, um zu entscheiden, ob ein Programm anhält. Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 232/388 Satz 152 (Rice) Sei R die Menge aller (TM)-berechenbaren Funktionen und S eine nichttriviale Teilmenge von R (also S 6= R, S 6= ∅). Dann ist G(S) := {w ∈ {0, 1}∗ ; die von Mw berechnete Funktion ist in S} unentscheidbar. Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 233/388 Beweis: Sei Ω die total undefinierte Funktion. 1. Fall: Ω ∈ S Sei q ∈ R − S (es gibt ein derartiges q, da S nichttrivial), Q eine TM für q. Zu w ∈ {0, 1}∗ sei f (w) ∈ {0, 1}∗ Gödelnummer einer TM, für die gilt: 1 bei Eingabe x ignoriert Mf (w) diese zunächst und verhält sich wie Mw auf leerem Band. 2 wenn obige Rechnung hält, dann verhält sich Mf (w) wie Q auf der Eingabe x. f ist total und berechenbar. Info IV c Ernst W. Mayr 234/388 Beweis: Sei Ω die total undefinierte Funktion. 1. Fall: Ω ∈ S w ∈ H0 ⇔ Mw hält auf leerem Band ⇔ Mf (w) berechnet die Funktion q (6= Ω) ⇔ die von Mf (w) -berechnete Funktion ist nicht in S ⇔ f (w) 6∈ G(S) Also: H̄0 ,→f G(S). H0 unentscheidbar (nicht rekursiv) ⇒ H̄0 unentscheidbar ⇒ G(S) unentscheidbar. Wir zeigen hier nur diesen Satz. Setzt man weitere Eigenschaften von S voraus, kann man sogar zeigen, dass G(S) nicht einmal rekursiv aufzählbar ist. Info IV c Ernst W. Mayr 234/388 Beweis: Sei Ω die total undefinierte Funktion. 2. Fall: Ω 6∈ S Seien q ∈ S, Q, f wie im Fall 1. w ∈ H0 ⇔ Mf (w) berechnet die Funktion q (6= Ω) ⇔ die von Mf (w) berechnete Funktion ist in S ⇔ f (w) ∈ G(S) Also: H0 ,→f G(S). H0 unentscheidbar ⇒ G(S) unentscheidbar. Info IV c Ernst W. Mayr 2.3 Unentscheidbarkeit 234/388 3. Anwendung der Unentscheidbarkeitsresultate auf kontextfreie Sprachen Wie wir gesehen haben, gilt: 1 die regulären Sprachen sind unter allen Booleschen Operationen abgeschlossen. 2 die kontextfreien Sprachen sind nicht unter Komplement und Durchschnitt abgeschlossen. Können wir entscheiden, ob der Durchschnitt zweier kontextfreier Sprachen leer ist? Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 235/388 Sie M eine (beliebige) TM (mit nur einem Band) mit Bandalphabet Σ und Zustandsmenge Q, sei # 6∈ Σ ∪ Q. Definition 153 Definiere die Sprachen (0) R R CM := {c0 #cR m ≥ 0, ci ist Konfi1 #c2 #c3 . . . c2m+1 ; guration von M , c0 ist Anfangskonfiguration auf leerem Band, c2m+1 ist Endkonfiguration oder c2m = c2m+1 und c2m ist Endkonfiguration, und c2j+1 ist Nachfolgekonfiguration von c2j für alle j } (1) R R CM := {c0 #cR wie oben, jetzt aber: 1 #c2 #c3 . . . c2m+1 ; c2j ist Nachfolgekonfiguration von c2j−1 für alle zutreffenden j ≥ 1} Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 236/388 (0) Bemerkung: CM enthält nicht nur echte“ Rechnungen von M , ” da c2j−1 → c2j nicht unbedingt ein Schritt sein muss; das fordern wir jeweils nur für c2j → c2j+1 . Lemma 154 (0) (1) Die Sprachen CM und CM sind deterministisch kontextfrei. Beweis: Es ist einfach, jeweils einen DPDA dafür zu konstruieren. Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 237/388 Bemerkung: Ein Kellerautomat ist lange nicht so mächtig wie eine Turingmaschine. Aber zwei Kellerautomaten (oder eine endliche Kontrolle mit zwei Kellern) sind so mächtig wie eine Turingmaschine (siehe Übung). Lemma 155 (0) (1) w ∈ H0 ⇔ CMw ∩ CMw 6= ∅ Beweis: Unmittelbar aus der Definition der beiden Sprachen! Bemerkung: Falls Mw deterministisch ist und w ∈ H0 , dann (0) (1) enthält CMw ∩ CMw genau ein Element, nämlich die eine Rechnung von Mw auf leerem Band. Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 238/388 Satz 156 Das Schnittproblem für kontextfreie Sprachen ist unentscheidbar! Beweis: siehe oben Wir haben sogar gezeigt: Das Schnittproblem für deterministisch kontextfreie Sprachen ist unentscheidbar! Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 239/388 In der Literatur wird dieser Satz üblicherweise mit dem Post’schen Korrespondenzproblem (PCP) bewiesen, das nach Emil Post (1897–1954) benannt ist. Definition 157 (Post’sches Korrespondenzproblem) Gegeben: (x1 , y1 ), (x2 , y2 ), . . . (xn , yn ) mit xi , yi ∈ Σ+ Frage: gibt es eine Folge von Indizes i1 , i2 , . . . ir ∈ {1, . . . , n}, so dass xi1 xi2 . . . xir = yi1 yi2 . . . yir ? Satz 158 PCP ist unentscheidbar. Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 240/388 Beweis: Wir skizzieren, wie man mit Hilfe des PCP die Berechnung einer (det.) TM simulieren kann. Wir haben dazu (u.a.) Paare (a, a) für alle a ∈ Σ (u1 u2 u3 , aqb) gemäß der inversen Übergangsfkt der TM, mit a, b ∈ Σ, q ∈ Q und u1 , u 2 , u 3 ∈ Σ ∪ Q Dies bedeutet, dass die TM bei der lokalen Konfiguration aqb diese im nächsten Schritt zu u1 u2 u3 ändert. Info IV c Ernst W. Mayr 241/388 Beweis: Die allgemeine Situation sieht dann so aus, dass eine geeignete Indexfolge i1 , . . . , ik folgende Zeichenreihen erzeugt: x y c1 c1 ... ... cr−1 cr−1 x1 ... xi−1 q xi xi+1 ... xs Es müssen nun die einzelnen xi durch Paare der Form (a, a) gematcht werden, lediglich xi−1 qxi kann nur durch (genau bzw. höchstens) ein Paar der zweiten Form gematcht werden. Damit ergibt sich wieder die allgemeine Situation wie oben, mit r um 1 erhöht, und man kann das Argument per Induktion abschließen. Wir überlassen es als Übungsaufgabe herauszufinden, wie auch Anfang und Ende der TM-Berechnung geeignet durch das PCP simuliert werden können. Info IV c Ernst W. Mayr 3.0 Unentscheidbarkeit 241/388 Kapitel III Algorithmen und Datenstrukturen 1. Analyse von Algorithmen Wir wollen die Ressourcen bestimmen, die, in Abhängigkeit von der Eingabe, ein Algorithmus benötigt, z.B. 1 Laufzeit 2 Speicherplatz 3 Anzahl Prozessoren 4 Programmlänge 5 Tinte 6 ... Info IV c Ernst W. Mayr 1.0 Unentscheidbarkeit 242/388 Beispiel 159 Prozedur für Fakultätsfunktion func f ak(n) m := 1 for i := 2 to n do m := m ∗ i do return (m) Diese Prozedur benötigt O(n) Schritte bzw. arithmetische Operationen. Jedoch: die Länge der Ausgabe ist etwa dlog2 n!e = Ω(n log n) Bits. Info IV c Ernst W. Mayr 1.0 Unentscheidbarkeit 243/388 Bemerkung: Um die Zahl n ∈ N0 in Binärdarstellung man ( 1 `(n) := 1 + blog2 (n)c ( 1 = dlog2 (n + 1)e hinzuschreiben, benötigt für n = 0 sonst für n = 0 sonst Um die Notation zu vereinfachen, vereinbaren wir im Zusammenhang mit Komplexitätsabschätzungen log(0) := 0 . Info IV c Ernst W. Mayr 1.0 Unentscheidbarkeit 244/388 1.1 Referenzmaschine Wir wählen als Referenzmaschine die Registermaschine (engl. random access machine, RAM) oder auch WHILE-Maschine, also eine Maschine, die WHILE-Programme verarbeiten kann, erweitert durch IF . . . THEN . . . ELSE . . . FI Multiplikation und Division indirekte Adressierung arithmetische Operationen wie Info IV c Ernst W. Mayr √ n, sin n,. . . 1.1 Referenzmaschine 245/388 1.2 Zeit- und Platzkomplexität Beim Zeitbedarf zählt das uniforme Kostenmodell die Anzahl der von der Registermaschine durchgeführten Elementarschritte, beim Platzbedarf die Anzahl der benutzten Speicherzellen. Das logarithmische Kostenmodell zählt für den Zeitbedarf eines jeden Elementarschrittes `(größter beteiligter Operand), beim Platzbedarf X `(größter in x gespeicherter Wert) , x also die maximale Anzahl der von allen Variablen x benötigten Speicherbits. Info IV c Ernst W. Mayr 1.2 Zeit- und Platzkomplexität 246/388 Beispiel 160 Wir betrachten die Prozedur func dbexp(n) m := 2 for i := 1 to n do m := m2 do return (m) n Die Komplexität von dbexp, die n 7→ 22 berechnet, ergibt sich bei Eingabe n zu uniform logarithmisch Info IV c Ernst W. Mayr Zeit Θ(n) Θ(2n ) 1.2 Zeit- und Platzkomplexität Platz Θ(1) Θ(2n ) 247/388 Bemerkung: Das (einfachere) uniforme Kostenmodell sollte also nur verwendet werden, wenn alle vom Algorithmus berechneten Werte gegenüber den Werten in der Eingabe nicht zu sehr wachsen, also z.B. nur polynomiell. Info IV c Ernst W. Mayr 1.2 Zeit- und Platzkomplexität 248/388 1.3 Worst Case-Analyse Sei A ein Algorithmus. Dann sei TA (x) := Laufzeit von A bei Eingabe x . Diese Funktion ist i.A. zu aufwändig und zu detailliert. Stattdessen: TA (n) := max TA (x) |x|=n Info IV c Ernst W. Mayr (= maximale Laufzeit bei Eingabelänge n) 1.3 Worst Case-Analyse 249/388 1.4 Average Case-Analyse Oft erscheint die Worst Case-Analyse als zu pessimistisch. Dann: P x; |x|=n TA (x) TAave (n) = |{x; |x| = n}| oder allgemeiner TAave (n) = X TA (x) · Pr {x | |x| = n} = E|x|=n [TA (x)] , wobei eine (im Allgemeinen beliebige) Wahrscheinlichkeitsverteilung zugrunde liegt. Info IV c Ernst W. Mayr 1.4 Average Case-Analyse 250/388 Bemerkung: Wir werden Laufzeiten TA (n) meist nur bis auf einen multiplikativen Faktor genau berechnen, d.h. das genaue Referenzmodell, Fragen der Implementierung, usw. spielen dabei eine eher untergeordnete Rolle. Info IV c Ernst W. Mayr 1.4 Average Case-Analyse 251/388 2. Sortierverfahren Unter einem Sortierverfahren versteht man ein algorithmisches Verfahren, das als Eingabe eine Folge a1 , . . . , an von n Schlüsseln ∈ Σ∗ erhält und als Ausgabe eine auf- oder absteigend sortierte Folge dieser Elemente liefert. Im Folgenden werden wir im Normalfall davon ausgehen, dass die Elemente aufsteigend sortiert werden sollen. Zur Vereinfachung nehmen wir im Normalfall auch an, dass alle Schlüssel paarweise verschieden sind. Für die betrachteten Sortierverfahren ist natürlich die Anzahl der Schlüsselvergleiche eine untere Schranke für die Laufzeit, und oft ist letztere von der gleichen Größenordnung, d.h. Laufzeit = O(Anzahl der Schlüsselvergleiche) . Info IV c Ernst W. Mayr 2.0 Average Case-Analyse 252/388 2.1 Selection-Sort Sei eine Folge a1 , . . . , an von Schlüsseln gegeben, indem ai im Element i eines Feldes A[1..n] abgespeichert ist. Algorithmus SelectionSort for i := n downto 2 do m := Index des maximalen Schlüssels in A[1..i] vertausche A[i] und A[m] od Nach Beendigung von SelectionSort ist das Feld A aufsteigend sortiert. Info IV c Ernst W. Mayr 2.1 Selection-Sort 253/388 Satz 161 SelectionSort benötigt zum Sortieren von n Elementen genau n 2 Vergleiche. Beweis: Die Anzahl der Vergleiche (zwischen Schlüsseln bzw. Elementen des Feldes A) zur Bestimmung des maximalen Schlüssels in A[1..i] ist i − 1. Damit ergibt sich die Laufzeit von SelectionSort zu TSelectionSort = n X i=2 Info IV c Ernst W. Mayr (i − 1) = n−1 X i=1 2.1 Selection-Sort n(n − 1) i= = 2 n . 2 254/388 2.2 Insertion-Sort Sei eine Folge a1 , . . . , an von Schlüsseln gegeben, indem ai im Element i eines Feldes A[1..n] abgespeichert ist. Algorithmus InsertionSort for i := 2 to n do m := Rang (∈ [1..i]) von A[i] in {A[1], . . . , A[i − 1]} a := A[i] schiebe A[m..i − 1] um eine Position nach rechts A[m] := a od Nach Beendigung von InsertionSort ist das Feld A aufsteigend sortiert. Info IV c Ernst W. Mayr 2.2 Insertion-Sort 255/388 Der Rang von A[i] in {A[1], . . . , A[i − 1]} kann trivial mit i − 1 Vergleichen bestimmt werden. Damit ergibt sich Satz 162 InsertionSort benötigt zum Sortieren von n Elementen n maximal 2 Vergleiche. Beweis: Übungsaufgabe! Info IV c Ernst W. Mayr 2.2 Insertion-Sort 256/388 Die Rangbestimmung kann durch binäre Suche verbessert werden. Dabei benötigen wir, um den Rang eines Elementes in einer k-elementigen Menge zu bestimmen, höchstens dlog2 (k + 1)e Vergleiche, wie man durch Induktion leicht sieht. Satz 163 InsertionSort mit binärer Suche für das Einsortieren benötigt zum Sortieren von n Elementen maximal n dld ne Vergleiche. Beweis: Die Abschätzung ergibt sich durch einfaches Einsetzen. Info IV c Ernst W. Mayr 2.2 Insertion-Sort 257/388 Achtung: Die Laufzeit von InsertionSort ist dennoch auch bei Verwendung von binärer Suche beim Einsortieren im schlechtesten Fall Ω(n2 ), wegen der notwendigen Verschiebung der Feldelemente. Verwendet man statt des Feldes eine doppelt verkettete Liste, so wird zwar das Einsortieren vereinfacht, es kann jedoch die binäre Suche nicht mehr effizient implementiert werden. Info IV c Ernst W. Mayr 2.2 Insertion-Sort 258/388 2.3 Merge-Sort Sei wiederum eine Folge a1 , . . . , an von Schlüsseln im Feld A[1..n] abgespeichert. Algorithmus MergeSort proc merge (r, s) co sortiere A[r..s]oc if s ≤ r return r+s fi merge(r, 2 ); merge( r+s + 1, s) 2 verschmelze die beiden sortierten Teilfolgen end merge(1, n) Info IV c Ernst W. Mayr 2.3 Merge-Sort 259/388 Das Verschmelzen sortierter Teilfolgen A[r..m] und A[m + 1, s] funktioniert wie folgt unter Benutzung eines Hilfsfeldes B[r, s]: i := r; j := m + 1; k := r while i ≤ m and j ≤ s do if A[i] < A[j] then B[k] := A[i]; i := i + 1 else B[k] := A[j]; j := j + 1 fi k := k + 1 od if i ≤ m then kopiere A[i, m] nach B[k, s] else kopiere A[j, s] nach B[k, s] fi kopiere B[r, s] nach A[r, s] zurück Nach Beendigung von MergeSort ist das Feld A aufsteigend sortiert. Info IV c Ernst W. Mayr 2.3 Merge-Sort 260/388 Satz 164 MergeSort sortiert ein Feld der Länge n mit maximal n · dld(n)e Vergleichen. Beweis: In jeder Rekursionstiefe werde der Vergleich dem kleineren Element zugeschlagen. Dann erhält jedes Element pro Rekursionstiefe höchstens einen Vergleich zugeschlagen. Info IV c Ernst W. Mayr 2.3 Merge-Sort 261/388 2.4 Quick-Sort Beim Quick-Sort-Verfahren wird in jeder Phase ein Element p der zu sortierenden Folge als Pivot-Element ausgewählt (wie dies geschehen kann, wird noch diskutiert). Dann wird in situ und mit einer linearen Anzahl von Vergleichen die zu sortierende Folge so umgeordnet, dass zuerst alle Elemente < p, dann p selbst und schließlich alle Elemente > p kommen. Die beiden Teilfolgen links und rechts von p werden dann mit Quick-Sort rekursiv sortiert (Quick-Sort ist also ein Divide-and-Conquer-Verfahren). Quick-Sort benötigt im schlechtesten Fall, nämlich wenn als Pivot-Element stets das kleinste oder größte der verbleibenden Elemente ausgewählt wird, n−1 X n (n − i) = 2 i=1 Vergleiche. Info IV c Ernst W. Mayr 2.4 Quick-Sort 262/388 Satz 165 QuickSort benötigt zum Sortieren eines Feldes der Länge n durchschnittlich nur 2 ln(2) · n ld(n) + O(n) viele Vergleiche. Beweis: Siehe Vorlesung Diskrete Strukturen II Info IV c Ernst W. Mayr 2.4 Quick-Sort 263/388 Entscheidend für die Laufzeit von Quick-Sort ist eine gute“ Wahl ” des Pivotelements. U.a. werden folgende Varianten verwendet: 1 Nimm stets das letzte Element der (Teil-)Folge als Pivotelement Nachteil: sehr schlecht bei vorsortierten Arrays! 2 Median-of-3 Verfahren: Wähle den Median (das mittlere Element) des ersten, mittleren und letzten Elements des Arrays Analyse Übungsaufgabe! 3 Wähle ein zufälliges Element als Pivotelement liefert die o.a. durchschnittliche Laufzeit, benötigt aber einen Zufallsgenerator. Info IV c Ernst W. Mayr 2.4 Quick-Sort 264/388 2.5 Heap-Sort Definition 166 Ein Heap ist ein Binärbaum, an dessen Knoten Schlüssel gespeichert sind, so dass gilt: 1 alle inneren Knoten bis auf maximal einen haben genau zwei Kinder; 2 alle Knoten mit weniger als zwei Kindern (also insbesondere die Blätter) befinden sich auf der untersten oder der zweituntersten Schicht; 3 die unterste Schicht ist von links nach rechts aufgefüllt; 4 für jeden Knoten (mit Ausnahme der Wurzel) gilt, dass sein Schlüssel kleiner ist als der seines Vaters (Heap-Bedingung). Info IV c Ernst W. Mayr 2.5 Heap-Sort 265/388 Bemerkungen: 1 Die hier definierte Variante ist ein max-Heap. 2 Die Bezeichnung heap wird in der Algorithmentheorie auch allgemeiner für Prioritätswarteschlangen benutzt! Info IV c Ernst W. Mayr 2.5 Heap-Sort 266/388 Beispiel 167 9 8 5 7 3 Info IV c Ernst W. Mayr 1 6 2 4 0 2.5 Heap-Sort 267/388 Der Algorithmus HeapSort besteht aus zwei Phasen. 1 In der ersten Phase wird aus der unsortierten Folge von n Elementen ein Heap gemäß Definition aufgebaut. 2 In der zweiten Phase wird dieser Heap ausgegeben, d.h. ihm wird n-mal jeweils das größte Element entnommen (das ja an der Wurzel steht), dieses Element wird in die zu sortierende Folge aufgenommen und die Heap-Eigenschaften wird wieder hergestellt. Info IV c Ernst W. Mayr 2.5 Heap-Sort 268/388 Betrachten wir nun zunächst den Algorithmus Reheap zur Korrektur der Datenstruktur, falls die Heap-Bedingung höchstens an der Wurzel verletzt ist. Algorithmus Reheap sei v die Wurzel des Heaps; while Heap-Eigenschaft in v nicht erfüllt do sei v 0 das Kind von v mit dem größeren Schlüssel vertausche die Schlüssel in v und v 0 v := v 0 od Info IV c Ernst W. Mayr 2.5 Heap-Sort 269/388 Zweite Phase von HeapSort for i := n downto 1 do sei r die Wurzel des Heaps sei k der in r gespeicherte Schlüssel A[i] := k sei b das rechteste Blatt in der untersten Schicht des Heaps kopiere den Schlüssel von b in die Wurzel r entferne das Blatt b Reheap od Nach Beendigung der zweiten Phase von HeapSort ist das Feld A[1..n] aufsteigend sortiert. Mit geeigneten (kleinen) Modifikationen kann HeapSort in situ implementiert werden. Die Schichten des Heaps werden dabei von oben nach unten und von links nach rechts im Feld A abgespeichert. Info IV c Ernst W. Mayr 2.5 Heap-Sort 270/388 In der ersten Phase von HeapSort müssen wir mit den gegebenen n Schlüsseln einen Heap erzeugen. Wir tun dies iterativ, indem wir aus zwei bereits erzeugten Heaps und einem weiteren Schlüssel einen neuen Heap formen, indem wir einen neuen Knoten erzeugen, der die Wurzel des neuen Heaps wird. Diesem neuen Knoten ordnen wir zunächst den zusätzlichen Schlüssel zu und und machen die beiden alten Heaps zu seinen Unterbäumen. Damit ist die Heap-Bedingung höchstens an der Wurzel des neuen Baums verletzt, was wir durch Ausführung der Reheap-Operation korrigieren können. Info IV c Ernst W. Mayr 2.5 Heap-Sort 271/388 Beispiel 168 [Initialisierung des Heaps] 3 3 6 5 8 2 1 0 6 9 4 7 5 8 7 0 2 9 8 9 2 7 0 Info IV c Ernst W. Mayr 1 9 1 3 6 4 4 5 8 5 6 2 2.5 Heap-Sort 7 0 4 3 1 272/388 Lemma 169 Die Reheap-Operation erfordert höchstens O(Tiefe des Heaps) Schritte. Beweis: Reheap führt pro Schicht des Heaps nur konstant viele Schritte aus. Info IV c Ernst W. Mayr 2.5 Heap-Sort 273/388 Lemma 170 Die Initialisierung des Heaps in der ersten Phase von HeapSort benötigt nur O(n) Schritte. Beweis: Sei d die Tiefe (Anzahl der Schichten) des (n-elementigen) Heaps. Die Anzahl der Knoten in Tiefe i ist ≤ 2i (die Wurzel habe Tiefe 0). Wenn ein solcher Knoten beim inkrementellen Aufbau des Heaps als Wurzel hinzugefügt wird, erfordert die Reheap-Operation ≤ d − i Schritte, insgesamt werden also ≤ d−1 X (d − i)2i = O(n) i=0 Schritte benötigt. Info IV c Ernst W. Mayr 2.5 Heap-Sort 274/388 Satz 171 HeapSort benötigt maximal O(n log n) Schritte. Beweis: In der zweiten Phase werden < n Reheap-Operationen auf Heaps der Tiefe ≤ log n durchgeführt. Bemerkung: 1 2 Eine genauere Analyse ergibt eine Schranke von 2n ld(n) + o(n). Carlsson hat eine Variante von HeapSort beschrieben, die mit n ld n + O(n log log n) Vergleichen auskommt: Svante Carlsson: A variant of heapsort with almost optimal number of comparisons. Inf. Process. Lett., 24(4):247–250, 1987 Info IV c Ernst W. Mayr 2.5 Heap-Sort 275/388 2.6 Vergleichsbasierte Sortierverfahren Alle bisher betrachteten Sortierverfahren sind vergleichsbasiert, d.h. sie greifen auf Schlüssel k, k 0 (außer in Zuweisungen) nur in Vergleichsoperationen der Form k < k 0 zu, verwenden aber nicht, dass etwa k ∈ N0 oder dass k ∈ Σ∗ . Satz 172 Jedes vergleichsbasierte Sortierverfahren benötigt im worst-case mindestens n ld n + O(n) Vergleiche und hat damit Laufzeit Ω(n log n). Info IV c Ernst W. Mayr 2.6 Vergleichsbasierte Sortierverfahren 276/388 Beweis: Wir benutzen ein so genanntes Gegenspielerargument (engl. adversary argument). Soll der Algorithmus n Schlüssel sortieren, legt der Gegenspieler den Wert eines jeden Schlüssels immer erst dann fest, wenn der Algorithmus das erste Mal auf ihn in einem Vergleich zugreift. Er bestimmt den Wert des Schlüssels so, dass der Algorithmus möglichst viele Vergleiche durchführen muss. Am Anfang (vor der ersten Vergleichsoperation des Algorithmus) sind alle n! Sortierungen der Schlüssel möglich, da der Gegenspieler jedem Schlüssel noch einen beliebigen Wert zuweisen kann. Info IV c Ernst W. Mayr 277/388 Beweis: Seien nun induktiv vor einer Vergleichsoperation A[i] < A[j] des Algorithmus noch r Sortierungen der Schlüssel möglich. Falls der Gegenspieler die Werte der in A[i] bzw. A[j] gespeicherten Schlüssel bereits früher festgelegt hat, ändert sich die Anzahl der möglichen Sortierungen durch den Vergleich nicht, dieser ist redundant. Info IV c Ernst W. Mayr 277/388 Beweis: Andernfalls kann der Gegenspieler einen oder beide Schlüssel so festlegen, dass immer noch mindestens r/2 Sortierungen möglich sind (wir verwenden hier, dass die Schlüssel stets paarweise verschieden sind). Nach k Vergleichen des Algorithmus sind also immer noch n!/2k Sortierungen möglich. Der Algorithmus muss jedoch Vergleiche ausführen, bis nur noch eine Sortierung möglich ist (die dann die Ausgabe des Sortieralgorithmus darstellt). Damit #Vergleiche ≥ dld(n!)e = n ld n + O(n) mit Hilfe der Stirlingschen Approximation für n!. Info IV c Ernst W. Mayr 2.6 Vergleichsbasierte Sortierverfahren 277/388 Alternativer Beweis mit Hilfe des Entscheidungsbaums Ein vergleichsbasierter Algorithmus kann auf die Werte der Schlüssel nur durch Vergleiche k < k 0 zugreifen. Wenn wir annehmen, dass alle Schlüssel paarweise verschieden sind, ergeben zu jedem Zeitpunkt die vom Algorithmus erhaltenen binären Antworten auf seine Anfragen der obigen Art an die Schlüsselmenge seine gesamte Information über die (tatsächliche) Ordnung der Schlüssel. Am Ende eines jeden Ablaufs des Algorithmus muss diese Information so sein, dass die tatsächliche Ordnung der Schlüssel eindeutig festliegt, dass also nur eine Permutation der n zu sortierenden Schlüssel mit der erhaltenen Folge von Binärantworten konsistent ist. Wir stellen alle möglichen Abläufe (d.h., Folgen von Vergleichen), die sich bei der Eingabe von n Schlüsseln ergeben können, in einem so genannten Entscheidungsbaum dar. Info IV c Ernst W. Mayr 2.6 Vergleichsbasierte Sortierverfahren 278/388 Entscheidungsbaum: k < k0 ? j n 0 k0 < k0 ? n 0 k00 < k00 ? 0 k0..0 < k0..0 ? 0 k1 < k1 ? j n 0 k01 < k01 ? 0 k0..1 < k0..1 ? 0 k10 < k10 ? Info IV c Ernst W. Mayr π0..1 0 k11 < k11 ? 0 k1..0 < k1..0 ? n π0..0 j j 0 k1..0 < k1..0 ? 0 k1..0 < k1..1 ? π1..0 π1..1 2.6 Vergleichsbasierte Sortierverfahren 279/388 Damit muss es für jede der n! Permutationen mindestens ein Blatt in diesem Entscheidungsbaum geben. Da dieser ein Binärbaum ist, folgt daraus: Die Tiefe des Entscheidungsbaums (und damit die Anzahl der vom Sortieralgorithmus benötigten Vergleiche im worst-case) ist ≥ dld(n!)e = n ld n + O(n) . Diese untere Schranke gilt sogar im Durchschnitt (über alle Permutationen). Info IV c Ernst W. Mayr 2.6 Vergleichsbasierte Sortierverfahren 280/388 2.7 Bucket-Sort Bucket-Sort ist ein nicht-vergleichsbasiertes Sortierverfahren. Hier können z.B. n Schlüssel aus {0, 1, . . . , B − 1}d in Zeit O(d(n + B)) sortiert werden, indem sie zuerst gemäß dem letzten Zeichen auf B Behälter verteilt werden, die so entstandene Teilsortierung dann stabil gemäß dem vorletzten Zeichen auf B Behälter verteilt wird, usw. bis zur ersten Position. Das letzte Zeichen eines jeden Schlüssels wird also als das niedrigwertigste aufgefasst. Bucket-Sort sortiert damit n Schlüssel aus {0, 1, . . . , B − 1}d in Zeit O(nd), also linear in der Länge der Eingabe (gemessen als Anzahl der Zeichen). Info IV c Ernst W. Mayr 2.7 Bucket-Sort 281/388 3. Suchverfahren Es ist eine Menge von Datensätzen gegeben, wobei jeder Datensatz Di durch einen eindeutigen Schlüssel ki gekennzeichnet ist. Der Zugriff zu den Datensätzen erfolgt per Zeiger über die zugeordneten Schlüssel, so dass wir uns nur mit der Verwaltung der Schlüssel beschäftigen. I. A. ist die Menge der Datensätze dynamisch, d.h. es können Datensätze neu hinzukommen oder gelöscht werden, oder Datensätze bzw. Schlüssel können geändert werden. Info IV c Ernst W. Mayr 3.0 Bucket-Sort 282/388 Definition 173 Ein Wörterbuch (engl. dictionary) ist eine Datenstruktur, die folgende Operationen auf einer Menge von Schlüsseln effizient unterstützt: 1 is member(k): teste, ob der Schlüssel k in der Schlüsselmenge enthalten ist; 2 insert(k): füge den Schlüssel k zur Schlüsselmenge hinzu, falls er noch nicht vorhanden ist; 3 delete(k): entferne den Schlüssel k aus der Schlüsselmenge, falls er dort vorhanden ist. Info IV c Ernst W. Mayr 3.0 Bucket-Sort 283/388 Es gibt zwei grundsätzlich verschiedene Ansätze, um Wörterbücher zu implementieren: Suchbäume Hashing (Streuspeicherverfahren) Wir betrachten zuerst Suchbäume. Wir nehmen an, dass die Schlüssel aus einer total geordneten Menge, dem Universum U stammen. Sind die Schlüssel nur in den Blättern des Suchbaums gespeichert, sprechen wir von einem externen Suchbaum, ansonsten von einem internen Suchbaum (wo dann der Einfachheit halber Schlüssel nur in den internen Knoten gespeichert werden). Info IV c Ernst W. Mayr 3.0 Bucket-Sort 284/388 3.1 Binäre/natürliche Suchbäume In binären Suchbäumen gilt für alle Knoten x key(x) ist größer als der größte Schlüssel im linken Unterbaum von x; key(x) ist kleiner als der kleinste Schlüssel im rechten Unterbaum von x. Info IV c Ernst W. Mayr 3.1 Binäre/natürliche Suchbäume 285/388 Die Wörterbuch-Operationen werden wie folgt realisiert: 1 2 3 is member(k): beginnend an der Wurzel des Suchbaums, wird der gesuchte Schlüssel k mit dem am Knoten gespeicherten Schlüssel k 0 verglichen. Falls k < k 0 (k > k 0 ), wird im linken (rechten) Unterbaum fortgefahren (falls der Unterbaum leer ist, ist der Schlüssel nicht vorhanden), ansonsten ist der Schlüssel gefunden. insert(k): es wird zuerst geprüft, ob k bereits im Suchbaum gespeichert ist; falls ja, ist die Operation beendet, falls nein, liefert die Suche die Position (den leeren Unterbaum), wo k hinzugefügt wird. delete(k): es wird zuerst geprüft, ob k im Suchbaum gespeichert ist; falls nein, ist die Operation beendet, falls ja, sei x der Knoten, in dem k gespeichert ist, und es sei x0 der linkste Knoten im rechten Unterbaum von x (x0 ist nicht unbedingt ein Blatt!); dann wird key(x0 ) im Knoten x gespeichert und x0 durch seinen rechten Unterbaum ersetzt (falls vorhanden) bzw. gelöscht. Spezialfälle, wie z.B., dass x0 nicht existiert, sind kanonisch zu behandeln. Info IV c Ernst W. Mayr 3.1 Binäre/natürliche Suchbäume 286/388 Beispiel 174 10 7 4 14 8 12 17 13 Der Schlüssel 13 wird hinzugefügt. Info IV c Ernst W. Mayr 3.1 Binäre/natürliche Suchbäume 287/388 Beispiel Der Schlüssel 10 (also die Wurzel) wird gelöscht: 10 7 4 14 8 12 17 13 Info IV c Ernst W. Mayr 288/388 Beispiel Der Schlüssel 10 (also die Wurzel) wird gelöscht: 12 7 4 14 8 17 13 Info IV c Ernst W. Mayr 3.1 Binäre/natürliche Suchbäume 288/388 Satz 175 In einem natürlichen Suchbaum der Höhe h benötigen die Wörterbuch-Operationen jeweils Zeit O(h). Beweis: Folgt aus der obigen Konstruktion! Bemerkung: Das Problem bei natürlichen Suchbäumen ist, dass sie sehr entartet sein können, z.B. bei n Schlüsseln eine Tiefe von n − 1 haben. Dies ergibt sich z.B., wenn die Schlüssel in aufsteigender Reihenfolge eingefügt werden. Info IV c Ernst W. Mayr 3.1 Binäre/natürliche Suchbäume 289/388 3.2 AVL-Bäume AVL-Bäume sind interne binäre Suchbäume, bei denen für jeden Knoten gilt, dass sich die Höhe seiner beiden Unterbäume um höchstens 1 unterscheidet. AVL-Bäume sind nach ihren Erfindern G. Adelson-Velskii und Y. Landis (1962) benannt. Satz 176 Ein AVL-Baum der Höhe h enthält mindestens Fh+3 − 1 und höchstens 2h+1 − 1 Knoten, wobei Fn die n-te Fibonacci-Zahl (F0 = 0, F1 = 1) und die Höhe die maximale Anzahl von Kanten auf einem Pfad von der Wurzel zu einem Blatt ist. Info IV c Ernst W. Mayr 3.2 AVL-Bäume 290/388 Beweis: Die obere Schranke ist klar, da ein Binärbaum der Höhe h höchstens h X 2j = 2h+1 − 1 j=0 Knoten enthalten kann. Info IV c Ernst W. Mayr 291/388 Beweis: Induktionsanfang: 1 ein AVL-Baum der Höhe h = 0 enthält mindestens einen Knoten, 1 ≥ F3 − 1 = 2 − 1 = 1 2 ein AVL-Baum der Höhe h = 1 enthält mindestens zwei Knoten, 2 ≥ F4 − 1 = 3 − 1 = 2 Info IV c Ernst W. Mayr 291/388 Beweis: Induktionsschluss: Ein AVL-Baum der Höhe h ≥ 2 mit minimaler Knotenzahl hat als Unterbäume der Wurzel einen AVL-Baum der Höhe h − 1 und einen der Höhe h − 2, jeweils mit minimaler Knotenzahl. Sei fh := 1 + minimale Knotenanzahl eines AVL-Baums der Höhe h . Dann gilt demgemäß f0 = 2 = F3 f1 = 3 = F4 fh − 1 = 1 + fh−1 − 1 + fh−2 − 1 , fh = fh−1 + fh−2 Info IV c Ernst W. Mayr 3.2 AVL-Bäume also = Fh+3 291/388 Korollar 177 Die Höhe eines AVL-Baums mit n Knoten ist Θ(log n). Satz 178 In einem AVL-Baum mit n Schlüsseln kann in Zeit O(log n) festgestellt werden, ob sich ein gegebener Schlüssel in der Schlüsselmenge befindet oder nicht. Beweis: Klar! Info IV c Ernst W. Mayr 3.2 AVL-Bäume 292/388 Beispiel 179 (Einfügen eines Knotens in AVL-Baum) 7 4 9 2 1 6 3 8 5 0 Info IV c Ernst W. Mayr 3.2 AVL-Bäume 293/388 2. In diesem Schritt wird die Höhenbedingung wieder hergestellt. Es dürfte klar sein, ZurdieWiederherstellung benutzen wireingefügten so dass Höhenbedingung nurder aufHöhenbedingung dem Pfad von der Wurzel zu dem genannte Rotationen undverfolgen Doppelrotationen. Knoten verletzt sein kann. Wir daher den Pfad von unten nach oben und stellen die Höhenbedingung wieder her. Dazu nutzen wir sogenannte Rotationen. Beispiel (Rotation um (x,umy)) Die folgende180 Skizze zeigt eine Rotation x-y: y b @ @ @ x b C @ C @ C C C CC C C C C C AC B C (y, +∞) C C (−∞, x) bx @ @ @by Rechtsrotation Linksrotation C C C AC C (−∞, x) (x, y) C C C BC C @ @ C C C CC C (x, y) (y, +∞) Wie man unschwer erkennen kann wird durch diese Operation die Höhe der Teilbäume verändert. Sehen wir uns daher ein Beispiel an, wie man die Rotation zum Wiederherstellen der Höhenbedingung verwenden kann: Info IV c Ernst W. Mayr b x HH 3.2 AVL-Bäume H y b HH 294/388 H C (−∞, x) C (x, y) C (x, y) C (y, +∞) Wie man unschwer erkennen kann wird durch Operation die Höhe der TeilBeispiel 181 (Wiederherstellung der diese Höhenbedingung) bäume verändert. Sehen wir uns daher ein Beispiel an, wie man die Rotation zum Wiederherstellen der Höhenbedingung verwenden kann: b x HH y b HH HH HH Rotation b y x b C 6 6 D @ @ C D @ @ C h-1 D h C C C 6 D 6 6 6 C C C C D D A C ? h-1 C C h-1 h-1 C D D h (−∞, x) C C C C D ? D (y, +∞) B C A C B C ? ? D ? (x, y) (−∞, x) (x, y) C D ? (y, +∞) Während im Knoten y die Höhenbedingung nach dem Einfügen noch gilt, ist sie in x verletzt. Nach der Rotation gilt die Höhenbedingung jedoch wieder. Die Höhe der Teilbäume von y ist gleich der Höhe der Teilbäume von x vor dem Einfügen. Damit ist die Höhenbedingung jetzt überall im Baum erfüllt. Mitunter muss man eine Doppelrotation vornehmen, um den Baum zu rebalancieren. Info IV 3.2 AVL-Bäume 295/388 c Ernst W. Mayr (y, +∞) Während im Knoten y die Höhenbedingung nach dem Einfügen noch gilt, ist sie in x verletzt. Nach der Rotation gilt die Höhenbedingung jedoch wieder. Die Höhe der Teilbäume182 von y(Doppelrotation ist gleich der Höhe der Teilbäume von x vor dem Einfügen. Damit Beispiel zur Rebalancierung) ist die Höhenbedingung jetzt überall im Baum erfüllt. Mitunter muss man eine Doppelrotation vornehmen, um den Baum zu rebalancieren. h b x PPP Pb z 6 D y b D D D 6 D D C 6 6 D D h C D D C h-1 D A D h D ? D (−∞, x) D CC C ? D D ? D (z, +∞) B D (y, z) ? h b y PPP b x b z @ @ @ @ 6 D D 6 6 D C 6 C D D D C D D D h h h-1 D D CC D C ? D D D A D B D (y, z) D D ? ? ? (−∞, x) (x, y) (z, +∞) (x, y) Info IV c Ernst W. Mayr 3.2 AVL-Bäume 296/388 Zur Rebalancierung des AVL-Baums sind Rotationen und Doppelrotationen nur entlang des Pfades zum eingefügten Knoten erforderlich. Damit ergibt sich Lemma 183 In einen AVL-Baum mit n Knoten kann ein neuer Schlüssel in Zeit O(log n) eingefügt werden. Ebenso kann man zeigen Lemma 184 In einen AVL-Baum mit n Knoten kann ein im Baum vorhandener Schlüssel in Zeit O(log n) gelöscht werden. Damit Satz 185 In einem AVL-Baum mit n Knoten kann jede Wörterbuch-Operation in Zeit O(log n) ausgeführt werden. Info IV c Ernst W. Mayr 3.2 AVL-Bäume 297/388 7 Beispiel 186 4 9 2 1 6 3 8 5 0 4 2 1 0 Info IV c Ernst W. Mayr 7 3 6 5 3.2 AVL-Bäume 9 8 298/388 Beispiel 187 (Rebalancierung mit Doppelrotation) 7 2 9 1 5 0 4 3 8 6 5 2 7 1 0 Info IV c Ernst W. Mayr 4 3 6 9 8 3.2 AVL-Bäume 299/388 3.3 (a, b)-Bäume Definition 188 Ein (a, b)-Baum ist ein externer Suchbaum, für den gilt: 1 alle Blätter haben die gleiche Tiefe 2 alle internen Knoten haben ≤ b Kinder 3 alle internen Knoten außer der Wurzel haben ≥ a, die Wurzel hat ≥ 2 Kinder 4 b ≥ 2a − 1 5 in jedem internen Knoten sind jeweils die größten Schlüssel seiner Unterbäume mit Ausnahme des letzten gespeichert Info IV c Ernst W. Mayr 3.3 (a, b)-Bäume 300/388 Beispiel 189 21·39 7·15 1·4 9 32 17 24 52·62 35 43·47 53·56 67 1 4 7 9 15 17 21 24 32 35 39 43 47 52 53 56 62 67 71 Info IV c Ernst W. Mayr 3.3 (a, b)-Bäume 301/388 Bemerkung: (a, b)-Bäume mit b = 2a − 1 heißen auch B-Bäume. Diese wurden erstmals in einer Arbeit von R. Bayer und E.M. McCreight im Jahr 1970 beschrieben. (2,3)-Bäume wurden von J. Hopcroft ebenfalls 1970 eingeführt. Insert-Operation: Übersteigt durch eine Insert-Operation ein Knoten die Anzahl der zulässigen Kinder, so wird er in zwei Knoten geteilt. Delete-Operation: Fällt durch eine Delete-Operation die Anzahl der Kinder eines Knoten unter a, so wird ein Kind vom linken oder rechten Geschwister des Knoten adoptiert. Info IV c Ernst W. Mayr 3.3 (a, b)-Bäume 302/388 Beispiel 190 (Füge 60“ in (2,3)-Baum ein) ” 21·39 7·15 1·4 9 32 17 24 52·62 35 43·47 53·56 67 1 4 7 9 15 17 21 24 32 35 39 43 47 52 53 56 62 67 71 Info IV c Ernst W. Mayr 303/388 Beispiel 190 (Füge 60“ in (2,3)-Baum ein) ” 21·39 7·15 1·4 9 32 17 24 52·62 35 43·47 53·56·60 67 1 4 7 9 15 17 21 24 32 35 39 43 47 52 53 56 60 62 67 71 Info IV c Ernst W. Mayr 303/388 Beispiel 190 (Füge 60“ in (2,3)-Baum ein) ” 21·39 7·15 1·4 9 32 17 24 52·56·62 35 43·47 53 60 67 1 4 7 9 15 17 21 24 32 35 39 43 47 52 53 56 60 62 67 71 Info IV c Ernst W. Mayr 303/388 Beispiel 190 (Füge 60“ in (2,3)-Baum ein) ” 39 21 56 7·15 1·4 9 32 17 24 52 35 43·47 62 53 60 67 1 4 7 9 15 17 21 24 32 35 39 43 47 52 53 56 60 62 67 71 Info IV c Ernst W. Mayr 3.3 (a, b)-Bäume 303/388 Korollar 191 In einem (a, b)-Baum mit n gespeicherten Schlüsseln können die Wörterbuchoperationen in Zeit O(loga n) durchgeführt werden. Bemerkung: Die Wahl von a und b hängt wesentlich von der Anwendung und der Größe des (a, b)-Baums ab. Liegt der (a, b)-Baum im RAM, dann wählt man b klein, um in jedem inneren Knoten den richtigen Unterbaum schnell zu finden. Andernfalls wählt man a groß. Der Baum hat dadurch nur geringe Tiefe, seine oberen Schichten können im RAM gehalten werden, und die Anzahl der Zugriffe auf den Sekundärspeicher (Festplatte) ist klein. Info IV c Ernst W. Mayr 3.3 (a, b)-Bäume 304/388 4. Hashing Hash- oder auch Streuspeicherverfahren sind dadurch gekennzeichnet, dass jedem Schlüssel aus einem Universum U durch eine (effizient berechenbare) Funktion h (die Hashfunktion) eine Adresse ∈ {0, . . . , m − 1} zugeordnet wird. Der Schlüssel k wird dann im Prinzip im Element A[h(k)] des m-elementigen Feldes A[0..m − 1] gespeichert. Im Idealfall sind dann die Wörterbuchoperationen effizient ausführbar, bestimmt durch den Aufwand für die Berechnung von h(k). Info IV c Ernst W. Mayr 4 Hashing 305/388 Da |U | m, kann h natürlich nicht injektiv sein, und es kommt zu Kollisionen: h(x) = h(y) für gewisse x 6= y . Normalerweise sind wir nur an einer kleineren Teilmenge S ⊂ U von Schlüsseln interessiert (|S| = n), und wir haben, der Speichereffizienz halber, z.B. m ∈ {n, . . . , 2n} Selbst in diesem Fall sind Kollisionen jedoch zu erwarten, wie z.B. das so genannte Geburtstagsparadoxon zeigt: Info IV c Ernst W. Mayr 4 Hashing 306/388 In einer Menge von mindestens 23 zufällig gewählten Personen gibt es mit Wahrscheinlichkeit größer als 12 zwei Personen, die am gleichen Tag des Jahres Geburtstag haben (Schaltjahre werden hier nicht berücksichtigt). Das Geburtstagsparadoxon ist äquivalent dazu, dass in einer Hashtabelle der Größe 365, die mindestens 23 Einträge enthält, wobei die Hashadressen sogar zufällig gewählt sind, bereits mit einer Wahrscheinlichkeit von mehr als 12 eine Kollision vorkommt. Info IV c Ernst W. Mayr 4 Hashing 307/388 Satz 192 In einer Hashtabelle der Größe m mit n Einträgen tritt mit einer Wahrscheinlichkeit von mindestens 1 − e−n(n−1)/(2m) mindestens eine Kollision auf, wenn für jeden Schlüssel die Hashadresse gleichverteilt ist. Beweis: Die Wahrscheinlichkeit, dass auch der i-te eingefügte Schlüssel keine Kollision verursacht, ist m − (i − 1) . m Die Wahrscheinlichkeit, dass für alle n Schlüssel keine Kollision eintritt, ist daher ! n n−1 X Y i m − (i − 1) = exp ln 1 − Pr {keine Kollision} = m m i=1 Info IV c Ernst W. Mayr i=0 308/388 Satz 192 In einer Hashtabelle der Größe m mit n Einträgen tritt mit einer Wahrscheinlichkeit von mindestens 1 − e−n(n−1)/(2m) mindestens eine Kollision auf, wenn für jeden Schlüssel die Hashadresse gleichverteilt ist. Beweis: Da ln(1 + x) ≤ x für alle x ∈ R, folgt damit ! n−1 X i Pr {keine Kollision} = exp ln 1 − m i=0 ! n−1 X i ≤ exp − m i=0 n(n − 1) . = exp − 2m Info IV c Ernst W. Mayr 4 Hashing 308/388 Korollar 193 √ Hat eine Hashtabelle der Größe m mindestens ω( m) Einträge, wobei für jeden Schlüssel die Hashadressen gleichverteilt sind, so tritt mit Wahrscheinlichkeit 1 − o(1) eine Kollision auf. Definition 194 Eine Hashfunktion h heißt ideal, wenn gilt (∀i ∈ {0, . . . , m − 1} X k∈U h(k)=i Pr {k} = 1 , m wobei Pr {k} die Wahrscheinlichkeit ist, mit der der Schlüssel k ∈ U vorkommt. Info IV c Ernst W. Mayr 4 Hashing 309/388 Beispiele für gebräuchliche Hashfunktionen: 1 Additionsmethode: h(k) = r X (k mod 2αi ) div 2βi ! mod m i=0 für αi ≥ βi ∈ {0, . . . , `(|U |) − 1} 2 Multiplikationsmethode: Sei a ∈ (0, 1) eine Konstante. h(k) = bm · (ka − bkac)c Eine gute Wahl für a ist z.B. √ 5−1 1 a= = ≈ 0, 618 . . . , 2 ϕ wobei ϕ = Info IV c Ernst W. Mayr √ 1+ 5 2 der Goldene Schnitt ist. 310/388 Beispiele für gebräuchliche Hashfunktionen: 3 Teilermethode: h(k) = k mod m , wobei m keine Zweier- oder Zehnerpotenz und auch nicht von der Form 2i − 1 sein sollte. Eine gute Wahl für m ist i.A. eine Primzahl, die nicht in der Nähe einer Zweierpotenz liegt. Info IV c Ernst W. Mayr 4 Hashing 310/388 4.1 Kollisionsauflösung Hashing durch Verkettung In jedem Feldelement der Hashtabelle wird eine lineare Liste der Schlüssel abgespeichert, die durch die Hashfunktion auf dieses Feldelement abgebildet werden. Die Implementierung der Operationen is member, insert und delete ist offensichtlich. n Sei α = m der Füllgrad der Hashtabelle. Dann beträgt, bei Gleichverteilung der Schlüssel, die Länge einer jeden der linearen Listen im Erwartungswert α und der Zeitaufwand für die Suche nach einem Schlüssel im α erfolgreichen Fall 1 + 2 erfolglosen Fall 1 + α Für die Operationen insert und delete ist darüber hinaus lediglich ein Zeitaufwand von O(1) erforderlich. Info IV c Ernst W. Mayr 311/388 Hashing durch Verkettung In jedem Feldelement der Hashtabelle wird eine lineare Liste der Schlüssel abgespeichert, die durch die Hashfunktion auf dieses Feldelement abgebildet werden. Die Implementierung der Operationen is member, insert und delete ist offensichtlich. n Sei α = m der Füllgrad der Hashtabelle. Dann beträgt, bei Gleichverteilung der Schlüssel, die Länge einer jeden der linearen Listen im Erwartungswert α und der Zeitaufwand für die Suche nach einem Schlüssel im α 2 erfolglosen Fall 1 + α erfolgreichen Fall 1 + Hashing durch Verkettung (engl. chaining) ist ein Beispiel für ein geschlossenes Hashverfahren. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 311/388 r 0 ha (x) fest, andernfalls gibt es auch hier m Möglichkeiten, a0 zu wählen. sen von Kollisionen Beispiel 195 (Hashing durch Verkettung) ategien für die Auflösung von Kollisionen sind: tten: 0 1 2 3 4 5 6 7 8 9 10 r r Alle Elemente, die auf 0 abgebildet wurden. r res Sortieren: Idee: Wird ein Element x auf den i-ten Speicherplatz in M bgebildet, so wird es dort gespeichert, falls der Platz noch nicht belegt ist. Info IV 4.0 Kollisionsauflösung 312/388 Sonst wird es im i + 1-ten Speicherplatz gespeichert, falls dieser noch frei ist, c Ernst W. Mayr Lineare Sondierung Man führt eine erweiterte Hashfunktion h(k, i) ein. Soll der Schlüssel k neu in die Hashtabelle eingefügt werden, wird die Folge h(k, 0), h(k, 1), h(k, 2), . . . durchlaufen, bis die erste freie Position in der Tabelle gefunden wird. Beim Verfahren des linearen Sondierens (engl. linear probing) ist h(k, i) = (h(k) + i) (mod m) . Für den Zeitaufwand für die Suche nach einem Schlüssel kann man zeigen im 1 1 1+ erfolgreichen Fall: 2 1−α 1 1 erfolglosen Fall: 1+ 2 (1 − α)2 Info IV c Ernst W. Mayr 313/388 Lineare Sondierung Man führt eine erweiterte Hashfunktion h(k, i) ein. Soll der Schlüssel k neu in die Hashtabelle eingefügt werden, wird die Folge h(k, 0), h(k, 1), h(k, 2), . . . durchlaufen, bis die erste freie Position in der Tabelle gefunden wird. Beim Verfahren des linearen Sondierens (engl. linear probing) ist h(k, i) = (h(k) + i) (mod m) . Die Implementierung von insert ist kanonisch, bei delete ist jedoch Sorge zu tragen, dass keine der Sondierungsfolgen h(k, 0), h(k, 1), h(k, 2), . . . unterbrochen wird. Oft werden gelöschte Elemente daher nicht wirklich entfernt, sondern nur als gelöscht markiert. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 313/388 Ein großes Problem der linearen Sondierung ist, dass sich durch Kollisionen große zusammenhängende Bereiche von belegten Positionen der Hashtabelle ergeben können, wodurch die Suchfolge bei nachfolgenden Einfügungen sehr lang werden kann und auch solche Bereiche immer mehr zusammenwachsen können. Dieses Problem wird als primäre Häufung (engl. primary clustering) bezeichnet. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 314/388 Lineares Sortieren: Idee: Wird ein Element x auf den i-ten Speicherplat abgebildet, so wird es dort gespeichert, falls der Platz noch nicht be Sonst wird es im i + 1-ten Speicherplatz gespeichert, falls dieser noch Beispiel 196 (Lineare Sondierung) andernfalls . . . 0 1 2 3 4 5 6 7 8 9 10 r r r r r r r r Überläufer der 0 Überläufer der 5 Faustregel: Diese Möglichkeit ist nur brauchbar, falls |M | |S|. Doppeltes Hashen: h(k, i) = h1 (k) + i · h2 (k) mod m, wobei h1 und h Info Hashfunktionen IV 315/388 sind. 4.0 Kollisionsauflösung c Ernst W. Mayr Quadratische Sondierung Beim Verfahren des quadratischen Sondierens (engl. quadratic probing) ist h(k, i) = (h(k) − (−1)i (di/2e2 )) (mod m) . Surjektivität der Folge h(k, 0), h(k, 1), h(k, 2), . . . kann garantiert werden, wenn z.B. m prim und m ≡ 3 mod 4 ist. Für den Zeitaufwand für die Suche nach einem Schlüssel kann man zeigen im 1 α erfolgreichen Fall: 1 − + ln 2 1−α 2 1 α + ln erfolglosen Fall: 1 + 1−α 1−α Für die Implementierung von delete gilt die gleiche Bemerkung wie beim linearen Sondieren. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 316/388 Doppeltes Hashing Beim Verfahren des doppelten Hashings (engl. double hashing) ist h(k, i) = (h(k) + i · h0 (k)) (mod m) . Dabei sollte h0 (k) für alle k teilerfremd zu m sein, z.B. h0 (k) = 1 + (k mod (m − 1)) oder h0 (k) = 1 + (k mod (m − 2)). Surjektivität der Folge h(k, 0), h(k, 1), h(k, 2), . . . kann dann garantiert werden, wenn m prim ist. Für den Zeitaufwand für die Suche nach einem Schlüssel kann man zeigen im 1 1 erfolgreichen Fall: ln α 1−α 1 erfolglosen Fall: 1−α Für die Implementierung von delete gilt die gleiche Bemerkung wie beim linearen Sondieren. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 317/388 Bemerkung: Hashing mit Kollisionsauflösung durch lineares oder quadratisches Sondieren, wie auch doppeltes Hashing, sind Beispiele für so genannte offene Hashverfahren, da die Schlüssel nicht unbedingt an ihrer (ersten) Hashadresse abgespeichert werden. Info IV c Ernst W. Mayr 4.0 Kollisionsauflösung 318/388 Vergleiche für erfolgreiche Suche (abh. vom Füllgrad) 50 Lineare Sondierung Quadratische Sondierung Doppeltes Hashing Verkettung 40 30 20 10 0 0 0.1 Info IV c Ernst W. Mayr 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 319/388 Vergleiche für erfolglose Suche (abh. vom Füllgrad) 50 Lineare Sondierung Quadratische Sondierung Doppeltes Hashing Verkettung 40 30 20 10 0 0 0.1 Info IV c Ernst W. Mayr 0.2 0.3 0.4 0.5 4.0 Kollisionsauflösung 0.6 0.7 0.8 0.9 1 319/388 4.1 Universelle Hashfunktionen Definition 197 Eine Menge H von Hashfunktionen heißt universell, falls gilt: ∀x, y ∈ U, x 6= y |{h ∈ H; h(x) = h(y)}| 1 ≤ |H| m | {z } Pr{h(x)=h(y)} Satz 198 Sei H eine universelle Familie von Hashfunktionen (für eine Hashtabelle der Größe m, sei S ⊂ U eine feste Menge von Schlüsseln mit |S| = n ≤ m, und sei h ∈ H eine zufällig gewählte Hashfunktion (wobei alle Hashfunktionen ∈ H gleich wahrscheinlich sind). Dann ist die erwartete Anzahl von Kollisionen eines festen Schlüssels x ∈ S mit anderen Schlüsseln in S kleiner als 1. Info IV c Ernst W. Mayr 4.1 Universelle Hashfunktionen 320/388 Beweis: Es gilt E[# Kollisionen mit x] = X 1 n−1 = < 1. m m y∈S y6=x Sei nun m = p eine Primzahl. Dann ist Zp = {0, 1, . . . , p − 1} ein Körper. Wir betrachten im Folgenden U = {0, 1, . . . , p − 1}r+1 . Info IV c Ernst W. Mayr 4.1 Universelle Hashfunktionen 321/388 Sei die Familie H = {hα ; α ∈ U } von Hashfunktionen definiert durch ! r X αi · xi mod p hα (x0 , . . . , xr ) = i=0 Satz 199 H ist universell. Info IV c Ernst W. Mayr 4.1 Universelle Hashfunktionen 322/388 Beweis: Sei x 6= y, o.B.d.A. x0 6= y0 . Dann gilt hα (x) = hα (y) gdw α0 (y0 − x0 ) = r X αi (xi − yi ) . i=1 Für jede Wahl von (α1 , . . . , αr ) gibt es daher genau ein α0 , das zu einer Kollision führt. Es gilt daher pr 1 1 |{h ∈ H; h(x) = h(y)}| = r+1 = = |H| p p m Info IV c Ernst W. Mayr 4.1 Universelle Hashfunktionen 323/388 5. Vorrangwarteschlangen (priority queues) Definition 200 Eine Vorrangwarteschlange (priority queue) ist eine Datenstruktur, die die folgenden Operationen effizient unterstützt: 1 Insert 2 ExtractMin Extrahieren und Löschen des Elements mit dem kleinsten Schlüssel 3 DecreaseKey Verkleinern eines Schlüssels 4 Union (meld) Vereinigung zweier (disjunkter) Priority Queues Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 324/388 Wir besprechen die Implementierung einer Vorrangwarteschlange als Binomial Heap. Diese Implementierung ist (relativ) einfach, aber asymptotisch bei weitem nicht so gut wie modernere Datenstrukturen für Priority Queues, z.B. Fibonacci Heaps (die in der weiterführenden Vorlesung EA1 besprochen werden). Hier ist ein kurzer Vergleich der Zeitkomplexitäten: Insert ExtractMin DecreaseKey Union Info IV c Ernst W. Mayr BinHeap O(log n) O(log n) O(log n) O(log n) worst case FibHeap O(1) O(log n) O(1) O(1) amortisiert 5 Vorrangwarteschlangen (priority queues) 325/388 Definition 201 Der Binomialbaum B0 besteht aus genau einem Knoten. Den Binomialbaum Bk , k ≥ 1, erhält man, indem man die Wurzel eines Bk−1 zu einem zusätzlichen Kind der Wurzel eines zweiten Bk−1 macht. B0 Info IV c Ernst W. Mayr B1 B2 5 Vorrangwarteschlangen (priority queues) B3 326/388 Rekursiver Aufbau des Binomialbaums Bk (rekursive Verfolgung des rechten Zweigs) Bk Bk Bk−1 ... Bk−1 Info IV c Ernst W. Mayr Bk−1 Bk−2 5 Vorrangwarteschlangen (priority queues) B2 B1 B0 327/388 Rekursiver Aufbau des Binomialbaums Bk (rekursive Verfolgung des linken Zweigs) Bk Bk Bk−1 Bk−2 Bk−1 Bk−1 Info IV c Ernst W. Mayr B0 B0 B1 5 Vorrangwarteschlangen (priority queues) 328/388 Satz 202 Für den Binomialbaum Bk , k ≥ 0, gilt: 1 2 3 er hat Höhe k und enthält 2k Knoten; er enthält genau ki Knoten der Tiefe i, für alle i ∈ {0, . . . , k}; seine Wurzel hat k Kinder, alle anderen Knoten haben < k Kinder. Beweis: Der Beweis ergibt sich sofort aus dem rekursiven Aufbau des Bk und der Rekursionsformel k k−1 k−1 = + i i i−1 für Binomialkoeffizienten. Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 329/388 Definition 203 Ein Binomial Heap ist eine Menge H von Binomialbäumen, wobei jedem Knoten v ein Schlüssel key(v) zugeordnet ist, so dass folgende Eigenschaften gelten: 1 jeder Binomialbaum ∈ H erfüllt die Heap-Bedingung und ist ein min-Heap: (∀ Knoten v, w)[v Vater von w ⇒ key(v) ≤ key(w)] 2 H enthält für jedes k ∈ N0 höchstens einen Bk Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 330/388 Für jeden Binomial Heap H gilt also 1 Enthält H n Schlüssel, n ∈ N, so besteht H höchstens aus max{1, dld ne} Binomialbäumen. 2 In jedem von H’s Binomialbäumen ist ein kleinster Schlüssel an der Wurzel gespeichert; verlinkt man daher die Wurzeln aller Binomialbäume von H in einer zirkulären Liste, kann ein minimaler Schlüssel in H durch einfaches Durchlaufen dieser Liste gefunden werden. Korollar 204 In einem Binomial Heap mit n Schlüsseln benötigt FindMin Zeit O(log n). Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 331/388 Wir betrachten nun die Realisierung der Union-Operation. Hierbei wird vorausgesetzt, dass die Objektmengen, zu denen die Schlüssel in den beiden zu verschmelzenden Binomial Heaps H1 und H2 gehören, disjunkt sind. Es ist jedoch durchaus möglich, dass der gleiche Schlüssel für mehrere Objekte vorkommt. 1. Fall H1 und H2 enthalten jeweils nur einen Binomialbaum Bk (mit dem gleichen Index k): In diesem Fall fügen wir den Bk , dessen Wurzel den größeren Schlüssel hat, als neuen Unterbaum der Wurzel des anderen Bk ein, gemäß der rekursiven Struktur der Binomialbäume. Es entsteht ein Bk+1 , für den per Konstruktion weiterhin die Heap-Bedingung erfüllt ist. Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 332/388 2. Fall Sonst. Sei H1 = {Bi1 ; i ∈ I1 ⊂ N0 } und sei H2 = {Bi2 ; i ∈ I2 ⊂ N0 }. Wir durchlaufen dann alle Indizes k ∈ [0, max{I1 ∪ I2 }] in aufsteigender Reihenfolge und führen folgende Schritte durch: 1 falls kein Binomialbaum mit Index k vorhanden ist: noop 2 falls genau ein Binomialbaum mit Index k vorhanden ist, wird dieser in den verschmolzenen Binomial Heap übernommen 3 falls genau zwei Binomialbäume mit Index k vorhanden sind, werden diese gemäß dem 1. Fall verschmolzen; der entstehende Bk+1 wird im nächsten Schleifendurchlauf wieder betrachtet. Dadurch kann auch der folgende Fall eintreten! 4 falls genau drei Binomialbäume mit Index k vorhanden sind, wird einer davon in den verschmolzenen Binomial Heap übernommen; die beiden anderen werden gemäß dem 1. Fall verschmolzen; der entstehende Bk+1 wird im nächsten Schleifendurchlauf wieder betrachtet. Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 333/388 Man beachte, dass nie mehr als 3 Binomialbäume mit gleichem Index auftreten können! Bemerkung: Es besteht eine einfache Analogie zur Addition zweier Binärzahlen, wobei das Verschmelzen zweier gleich großer Binomialbäume dem Auftreten eines Übertrags entspricht! Lemma 205 Die Union-Operation zweier Binomial Heaps mit zusammen n Schlüsseln kann in Zeit O(log n) durchgeführt werden. Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 334/388 Die Operation Insert(H, k): 1 2 erzeuge einen neuen Binomial Heap H0 = {B0 } mit k als einzigem Schlüssel H := Union(H, H0 ) Falls H n Schlüssel enthält, beträgt die Laufzeit der Insert-Operation offensichtlich O(log n). Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 335/388 Die Operation ExtractMin(H): 1 durchlaufe die Liste der Wurzeln der Binomialbäume in H und finde den/einen Baum mit minimaler Wurzel 2 gib den Schlüssel dieser Wurzel zurück 3 entferne diesen Binomialbaum aus H 4 5 erzeuge einen neuen Binomial Heap H0 aus den Unterbäumen der Wurzel dieses Baums H := Union(H, H0 ) Falls H n Schlüssel enthält, beträgt die Laufzeit der ExtractMin-Operation offensichtlich O(log n). Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 336/388 Die Operation DecreaseKey(H, v, k) (diese Operation ersetzt, falls k < key(v), key(v) durch k): 1 sei Bi der Binomialbaum in H, der den Knoten v enthält 2 falls k < key(v), ersetze key(v) durch k 3 stelle, falls nötig, die Heap-Bedingung auf dem Pfad von v zur Wurzel von Bi wieder her, indem, solange nötig, der Schlüssel eines Knotens mit dem seines Vaters ausgetauscht wird Falls H n Schlüssel enthält, beträgt die Laufzeit der DecreaseKey-Operation offensichtlich O(log n). Info IV c Ernst W. Mayr 5 Vorrangwarteschlangen (priority queues) 337/388 6. Mengendarstellungen — Union-Find-Strukturen Gegeben ist eine (endliche) Menge S von Objekten, die in Klassen Xi partitioniert ist: S = X1 ] X2 ] . . . ] Xl Für jede Klasse Xi gibt es dabei einen Repräsentanten ri ∈ Xi . Es wird eine Datenstruktur gesucht, die die folgenden Operationen effizient unterstützt: 1 Init(S): jedes Element ∈ S bildet eine eigene Klasse mit sich selbst als Repräsentant 2 Union(r, s): vereinige die beiden Klassen mit r bzw. s als Repräsentanten, wähle r als Repräsentant der neuen Klasse (die beiden alten Klassen verschwinden) 3 Find(x): bestimme zu x ∈ S den Repräsentanten der eindeutigen aktuellen Klasse, die x enthält Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 338/388 Eine entsprechende Datenstruktur nennt man auch Union-Find-Struktur. Eine triviale Implementierung, in der zu jedem Element aus S sein Repräsentant (bzw. ein Verweis darauf) gespeichert wird, benötigt im worst case Laufzeit Ω(|S|) für die Union-Operation. Um logarithmische Laufzeit zu erreichen, realisieren wir die Datenstruktur als Vereinigung von zur Wurzel hin gerichteten Bäumen. Dabei bilden die Repräsentanten die Wurzeln und die restlichen Elemente der Klasse die restlichen Knoten. Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 339/388 Beispiel 206 c d Info IV c Ernst W. Mayr b a g h e 6 Mengendarstellungen — Union-Find-Strukturen f 340/388 Die Operationen Find und Union werden wie folgt implementiert: Find(x) verfolge von x aus den Pfad zur Wurzel und gib diese aus; die worst-case Laufzeit ist proportional zur maximalen Höhe eines Baums in der Union-Find-Struktur. Union(r, s) hänge die Wurzel des niedrigeren Baums als neues Kind der Wurzel des anderen Baums ein; vertausche notfalls r und s, damit r an der Wurzel des neuen Baums zu liegen kommt. Wir nennen die bei der Union-Operation verfolgte Strategie gewichtete Vereinigung. Um sie effizient implementieren zu können, wird für jeden Baum der Union-Find-Struktur seine Höhe mitgeführt. Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 341/388 Lemma 207 Sei T ein Baum einer Union-Find-Struktur mit gewichteter Vereinigung. Dann gilt für seine Höhe h(T ) h(T ) ≤ ld(|T |) , wobei |T | die Anzahl der Knoten in T bezeichnet. Beweis: Beweis durch Induktion über die Höhe. Induktionsanfang: Für Bäume der Höhe 0 oder 1 stimmt die Behauptung. Info IV c Ernst W. Mayr 342/388 Lemma 207 Sei T ein Baum einer Union-Find-Struktur mit gewichteter Vereinigung. Dann gilt für seine Höhe h(T ) h(T ) ≤ ld(|T |) , wobei |T | die Anzahl der Knoten in T bezeichnet. Beweis: Induktionsschluss: Sei o.B.d.A. h(Tr ) ≥ h(Ts ). Ist h(Tr ) > h(Ts ), so ist die neue Höhe = h(Tr ) und die Behauptung erfüllt. Ist h(Tr ) = h(Ts ), so ist die neue Höhe = h(Tr ) + 1, und es gilt: ld(|Tr | + |Ts |) ≥ ld(2 min{|Tr |, |Ts |}) = 1 + ld(min{|Tr |, |Ts |}) ≥ 1 + h(Ts ) Info IV c Ernst W. Mayr gemäß I.A. 6 Mengendarstellungen — Union-Find-Strukturen 342/388 Satz 208 In einer Union-Find-Datenstruktur mit gewichteter Vereinigung lässt sich die Union-Operation in Zeit O(1), die Find-Operation in Zeit O(log n) durchführen. Beweis: Die Kosten der Find-Operation sind durch die Tiefe der Bäume beschränkt. Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 343/388 Bei einer Operation Find(x) durchlaufen wir im zu x gehörigen Baum den Pfad von x zur Wurzel r. Nach Erreichen von r können wir alle Kanten auf diesem Pfad direkt auf r umlenken und damit zukünftige Find-Operationen beschleunigen. Bemerkung: Eine andere Variante ist, für jeden Knoten y auf diesem Pfad die Kante von y zu seinem Vater auf seinen Großvater umzulenken. Dadurch wird der Pfad i.W. durch zwei Pfade der halben Länge ersetzt, die Umsetzung kann jedoch bereits beim Durchlaufen des Pfades von x aus zu r erfolgen. Strategien wie die gerade beschriebenen zur Verkürzung von Find-Suchpfaden nennt man Pfadkompression (engl. path compression). Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 344/388 Satz 209 Union-Find mit Pfadkompression (und ohne gewichtete Vereinigung) erfordert Zeit Θ(log n) pro Operation im worst-case. Union-Find mit gewichteter Vereinigung und mit Pfadkompression benötigt für eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m log∗ n). Union-Find mit gewichteter Vereinigung und mit Pfadkompression benötigt für eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m · α(m, n)). Dabei ist α(m, n) eine Inverse der Ackermannfunktion, definiert durch j m k α(m, n) := min{i; A i, ≥ ld n} n Beweis: Ohne Beweis. Info IV c Ernst W. Mayr 6 Mengendarstellungen — Union-Find-Strukturen 345/388 7. Graphenalgorithmen 7.1 Kürzeste Pfade Gegeben: Digraph G = (V, A), |V | = n, |A| = m, mit einer Längenfunktion d : A → Q+ , sowie ein Startknoten s ∈ V . Gesucht: für alle t ∈ V \ {s} die Entfernung (bzw. ein kürzester Pfad) von s nach t. Im Folgenden bezeichne für einen Knoten v ∈ V Γ+ (v) die von v aus mittels einer Kante erreichbare Nachbarschaft von v: Γ+ (v) = {w ∈ V ; (v, w) ∈ A} Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 346/388 Der Algorithmus Dijkstra(G, d, s): W := {s} for all v ∈ V do falls v = s 0 ρ[v] := d(s, v) falls v ∈ Γ+ (s) sonst (∞ pred[v] := s falls v ∈ Γ+ (s) nil sonst while W 6= V do bestimme x0 ∈ V \ W so, dass ρ[x0 ] = min{ρ[v]; v ∈ V \ W } W := W ∪ {x0 } for all v ∈ Γ+ (x0 ) ∩ (V \ W ) do if ρ[v] > ρ[x0 ] + d(x0 , v) then ρ[v] := ρ[x0 ] + d(x0 , v); pred[v] := x0 return ρ, pred Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 347/388 Satz 210 Der Algorithmus Dijkstra bestimmt, für s und für alle t ∈ V , einen kürzesten Pfad bzw. die Länge eines solchen von s nach t. Bemerkung: Wir nennen das entsprechende algorithmische Problem das single source shortest path Problem (sssp). Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 348/388 Beweis: Wir zeigen folgende Invarianten: 1 ∀v ∈ W : ρ[v] = Länge eines kürzesten Pfades von s nach v 2 ∀v ∈ V \ W : ρ[v] = Länge eines kürzesten Pfades von s nach v, der als innere Knoten nur solche aus W enthält 3 die im Feld pred gespeicherten Verweise liefern jeweils die genannten Pfade Induktionsanfang: Die Invarianten sind durch die im Algorithmus erfolgte Initialisierung gewährleistet. Info IV c Ernst W. Mayr 349/388 EN Beweis: Induktionsschritt: Betrachte den Schleifendurchlauf mit W := W ∪ {x0 }. Es ist gemäß I.A. ρ[x0 ] gleich der Länge eines kürzesten Pfades von s nach x0 , der als innere Knoten nur solche aus (dem alten) W enthält. Angenommen, 85 es gäbe einen kürzeren Pfad P 0 . Sei y 6= x0 der erste Knoten auf P 0 außerhalb W . Dann gilt nach W Wahl von x0 : ρ[y] ≥ ρ[x0 ], also Länge(P 0 ) ≥ ρ[y] ≥ ρ[x0 ] = Länge(P ) , P und damit Widerspruch! sr pred[x0 ] r r y r x0 P 0 Wir verwenden hier essentiell, dass d ≥ 0. Die beiden anderen Invarianten sind damit klar. bt doch einen anderen, kürzeren s − x0 Pfad P 0 . Dann mindestens einen Knoten enthalten, der außerhalb von W Info IV 7.1 Kürzeste Pfade 0 erste Knoten auf c Ernst W. P Mayraußerhalb von W . 349/388 Eine naive Implementierung von Dijkstra’s Algorithmus (mit ρ als Array) ergibt eine Laufzeit O(n2 ). Implementiert man dagegen ρ als Priority Queue (wobei jedes v ∈ V mit dem Schlüssel ρ[v] eingetragen wird), so ergibt sich Satz 211 Für die Laufzeit des Dijkstra-Algorithmus für das Single-Source-Shortest-Path-Problem gilt: # Aufrufe Insert ExtractMin DecreaseKey Insgesamt Info IV c Ernst W. Mayr n n−1 ≤m Kosten pro Aufruf BinHeaps FibHeaps O(log n) O(1) O(log n) O(log n) O(log n) O(1) O((n + m) log n) O(m + n log n) 7.1 Kürzeste Pfade 350/388 Gegeben: Digraph G = (V, A), V = {v1 , . . . , vn }, |A| = m, mit einer Längenfunktion d : A → Q+ . Gesucht: für alle s, t ∈ V die Entfernung (bzw. ein kürzester Pfad) von s nach t. Bemerkung: Wir nennen das entsprechende algorithmische Problem das all pairs shortest path Problem (apsp). Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 351/388 Der Algorithmus Floyd-Warshall(G, d): for all i, j ∈ {1, . . . , n} do falls i = j 0 0 D [i, j] := d(vi , vj ) falls (vi , vj ) ∈ A ∞ sonst for k = 1 to n do ∀i, j: Dk [i, j] := min{Dk−1 [i, j], Dk−1 [i, k] + Dk−1 [k, j]} return Dn Satz 212 Der Floyd-Warshall-Algorithmus berechnet in Zeit O(n3 ) die kürzeste Entfernung für alle s, t ∈ V . Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 352/388 Beweis: Es ist leicht zu sehen, dass Dk [i, j] die Länge eines kürzesten Pfades von vi nach vj ist, der als innere Knoten nur solche ∈ {v1 , . . . , vk } benützt (i und j selbst können > k sein). Damit ergibt sich die Korrektheit des Algorithmus durch Induktion. Die Schranke für die Laufzeit ist offensichtlich. Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 353/388 Bemerkungen 1 Der Floyd-Warshall-Algorithmus funktioniert auch mit negativen Kantenlängen, solange der Graph keine Kreise negativer Länge enthält (im letzteren Fall ist der kürzeste Abstand nicht überall wohldefiniert, sondern wird −∞). Das Vorhandensein negativer Kreise kann an den Werten der Diagonale von Dn erkannt werden. 2 Man beachte die Ähnlichkeit des Algorithmus zum Algorithmus für die Konstruktion eines regulären Ausdrucks zu einem gegebenen endlichen Automaten. 3 Für ungerichtete Graphen mit trivialer Längenfunktion (also Kantenlänge = 1) liefert Breitensuche eine effizientere Methode! Info IV c Ernst W. Mayr 7.1 Kürzeste Pfade 354/388 7.2 Transitive Hülle Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die transitive Hülle G∗ = (V, A∗ ) von G, wobei gilt: A∗ = {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w} Bemerkungen 1 Für Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist in A∗ gdw die Entfernung von v nach w endlich ist. 2 Für die Transitive Hülle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden. 3 In ungerichteten Graphen entspricht die Berechnung der Transitiven Hülle der Bestimmung der Zusammenhangskomponenten. Info IV c Ernst W. Mayr 7.2 Transitive Hülle 355/388 7.3 Minimale Spannbäume Sei G = (V, E) ein zusammenhängender, ungerichteter Graph mit einer Gewichtsfunktion w : E → Q+ . Das Gewicht P eines Teilgraphen G0 = (V 0 , E 0 ) von G ist dann w(G0 ) = e∈E 0 w(e). Definition 213 Ein minimaler Spannbaum von G = (V, E) ist ein Spannbaum von G (also ein Baum (V, E 0 ) mit E 0 ⊆ E) mit minimalem Gewicht unter allen Spannbäumen von G. Anwendungen: Verdrahtungs- und Routingprobleme, Zuverlässigkeit von Netzwerken Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 356/388 Lemma 214 (rote Regel) Sei G = (V, E), e ∈ E schwerste Kante auf einem Kreis C in G. Dann gibt es einen minimalen Spannbaum von G, der e nicht enthält (d.h. dann ist jeder minimale Spannbaum von G − e auch minimaler Spannbaum von G). Ist e die einzige schwerste Kante auf einem Kreis C in G, dann ist e in keinem minimalen Spannbaum von G enthalten. Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 357/388 Beweis: Sei e schwerste Kante in C, und sei M ein minimaler Spannbaum von G, der e enthält. Durch Entfernen von e zerfällt M in zwei Teilbäume, die, da C ein Kreis ist, durch eine geeignete Kante f 6= e aus C wieder verbunden werden können. Der dadurch entstehende Spannbaum M 0 von G enthält e nicht und hat das Gewicht w(M 0 ) = w(M ) − w(e) + w(f ) . Falls e einzige schwerste Kante in C ist, wäre w(M 0 ) < w(M ) im Widerspruch zur Tatsache, dass M minimaler Spannbaum von G ist. Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 358/388 Der Algorithmus Kruskal(V, E, w): sortiere E aufsteigend: w(e1 ) ≤ w(e2 ) ≤ . . . ≤ w(em ) initialisiere Union-Find-Struktur für V T := ∅ for i = 1 to m do bestimme die Endpunkte v und w von ei if Find(v) 6= Find(w) then T := T ∪ {ei } Union(Find(v),Find(w)) return T Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 359/388 Satz 215 Kruskal’s Algorithmus bestimmt einen minimalen Spannbaum des zusammenhängenden Graphen G = (V, E) in Zeit O(m log n). Beweis: Find(v) = Find(w) gdw die Kante (v, w) schwerste Kante auf einem Kreis in G ist. Die Korrektheit des Algorithmus folgt damit aus dem vorigen Lemma. Die Laufzeit für das Sortieren beträgt O(m log n) (m ≥ n − 1, da G zusammenhängend). Bei geeigneter Implementierung (gewichtete Vereinigung) ist die Zeitkomplexität jeder Find-Operation O(log n). Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 360/388 Lemma 216 (blaue Regel) Sei G = (V, E), (W, V \ W ) ein Schnitt von G (d.h. ∅ = 6 W 6= V ). Sei ferner e eine leichteste Kante ∈ W × (V \ W ) ∩ E. Dann gibt es einen minimalen Spannbaum von G, der e enthält. Ist e die einzige leichteste Kante in dem Schnitt, dann ist e in jedem minimalen Spannbaum von G enthalten. Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 361/388 Beweis: Sei (W, V \ W ) ein Schnitt in G und e leichteste Kante in diesem Schnitt. Sei ferner M ein minimaler Spannbaum von G, der e nicht enthält. Durch Hinzufügen von e zu M entsteht (genau) ein Kreis, der, da M ein Spannbaum ist, mindestens eine weitere Kante f aus dem Schnitt (W, V \ W ) enthält. Entfernt man nun f , so entsteht wieder ein Spannbaum M 0 , mit dem Gewicht w(M 0 ) = w(M ) − w(f ) + w(e) . Falls e einzige leichteste Kante im Schnitt ist, wäre w(M 0 ) < w(M ) im Widerspruch zur Tatsache, dass M minimaler Spannbaum von G ist. Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 362/388 Der Algorithmus Prim(V, E, w): W := {s} für ein beliebiges s ∈ V ; T := ∅ initialisiere Priority-Queue-Struktur R für V , Schlüssel ρ(v) von v gleich falls v = s 0 ρ(v) := d(s, v) falls v ∈ Γ(s) sonst (∞ pred[v] := s falls v ∈ Γ(s) nil sonst while W 6= V do x := ExtractMin(R) W := W ∪ {x}; T := T ∪ {x, pred[x]} for all v ∈ Γ(x) ∩ (V \ W ) do if ρ(v) > w(x, v) then DecreaseKey(R, v, w(x, v)); pred[v] := x return T Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 363/388 Satz 217 Prim’s Algorithmus bestimmt einen minimalen Spannbaum des zusammenhängenden Graphen G = (V, E) in Zeit O(m + n log n) (bei Verwendung von Fibonacci-Heaps). Beweis: Betrachte in jeder Iteration den Schnitt (W, V \ W ). Die Korrektheit des Algorithmus folgt damit aus dem vorigen Lemma. Der Algorithmus benötigt i.W. ≤ m DecreaseKey-Operationen und n − 1 ExtractMin-Operationen einer Priority-Queue. Damit ergibt sich die behauptete Zeitkomplexität. Info IV c Ernst W. Mayr 7.3 Minimale Spannbäume 364/388 Kapitel IV Komplexitätstheorie 1. Definitionen Definition 218 Sei M eine deterministische Turingmaschine und Σ = {0, 1}. 1 2 3 TIMEM (x) := Anzahl der Schritte, die M bei Eingabe x ∈ Σ∗ durchführt DTIME(f ) := Menge aller Sprachen, für die es eine deterministische Mehrband-Turingmaschine M gibt mit TIMEM (x) ≤ f (|x|) für alle x ∈ Σ∗ [ P= DTIME(p) p Polynom P ist die Menge der polynomiell lösbaren Probleme, es wird allgemein mit der Klasse der effizient lösbaren Probleme gleichgesetzt. Info IV c Ernst W. Mayr 1 Definitionen 365/388 Beispiel 219 (Probleme in P) 2-COLORING: Gegeben ein Graph G = (V, E), ist χ(G) ≤ 2? 2-COLORING ∈ P, da χ(G) ≤ 2 gdw G bipartit. Shortest-Distance: Gegeben ein gewichteter Digraph G = (V, E, d), s, t ∈ V und eine Zahl D, ist die Entfernung von s nach t in G ≤ D? Die Frage kann z.B. mit Dijkstra’s Algorithmus in polynomieller Zeit entschieden werden. Maximaler Fluss: Gegeben ein gewichteter Digraph G = (V, E, c) und s, t ∈ V (c wird als Kapazität interpretiert), was ist der maximale Fluss von s nach t? Dafür gibt es zahlreiche (auf dem max-flow-min-cut Prinzip basierende) polynomielle Algorithmen. ... Info IV c Ernst W. Mayr 1 Definitionen 366/388 Definition 220 Sei N eine nichtdeterministische Turingmaschine. Dann 1 minimale Anzahl der Schritte, die N benötigt, falls x ∈ L(N ) TIMEN (x) := um x ∈ Σ∗ zu akzeptieren 0 sonst 2 NTIME(f ) := Menge aller Sprachen, für die es eine nichtdeterministische Mehrband-Turingmaschine N gibt mit TIMEN (x) ≤ f (|x|) für alle x ∈ Σ∗ 3 NP = [ NTIME(p) p Polynom Info IV c Ernst W. Mayr 1 Definitionen 367/388 Man beachte, da wir bei nichtdeterministischen Maschinen i.W. an akzeptierenden Berechnungen interessiert sind, die etwas ungewöhnliche Festlegung für x 6∈ L(N ). Eine alternative Definition für N P ist Definition 221 N P ist die Klasse der Probleme L, für die es ein Prädikat P ∈ P und ein Polynom p gibt, so dass (∀x ∈ Σ∗ ) [x ∈ L ⇔ (∃y ∈ Σ∗ )[|y| ≤ p(|x|) ∧ P (x, y)]] Info IV c Ernst W. Mayr 1 Definitionen 368/388 Beispiel 222 (Probleme in N P) k-COLORING: Gegeben ein Graph G = (V, E), ist χ(G) ≤ k? k-COLORING ist in N P, da eine nichtdet. TM eine gültige k-Färbung raten und dann verifizieren kann (in der alternativen Definition wäre y die Beschreibung einer solchen k-Färbung!) COLORING: Gegeben ein Graph G = (V, E) und k ∈ N, ist χ(G) ≤ k? Begründung i.W. wie oben; hier ist jedoch k Teil der Probleminstanz, also der Eingabe! SAT: Gegeben eine boolesche Formel F , hat F eine erfüllende Belegung? Eine nichtdet. TM kann einfach eine erfüllende Belegung, falls eine solche existiert, raten und verifizieren. Info IV c Ernst W. Mayr 1 Definitionen 369/388 Eine der wichtigsten offenen Fragen der Informatik (und nicht nur der Theoretischen Informatik!) ist P =? N P Eine der wichtigsten offenen Fragen der Theoretischen Informatik ist Wie könnte man P = 6 N P beweisen? Info IV c Ernst W. Mayr 1 Definitionen 370/388 2. N P-Vollständigkeit Definition 223 Seien A ⊆ Σ∗ und B ⊆ Γ∗ Sprachen. Dann heißt A polynomiell reduzierbar auf B (polynomiell many-one-reduzierbar; i.Z. A p B oder A m-1 B oder auch A ≤p B), falls es eine polynomiell p berechenbare totale Funktion f : Σ∗ → Γ∗ gibt, so dass gilt (∀x ∈ Σ∗ )[x ∈ A ⇔ f (x) ∈ B] Bemerkungen: 1 Die Relation ist transitiv, d.h. p A p B ∧ B p C ⇒ A p C 2 A p B ∧ B ∈ P ⇒ A ∈ P 3 A p B ∧ B ∈ N P ⇒ A ∈ N P Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 371/388 Definition 224 1 Eine Sprache A heißt N P-schwer (oder N P-hart, engl. N P-hard), falls für alle Sprachen B aus N P gilt: B p A 2 Eine Sprache A heißt N P-vollständig (engl. N P-complete), falls A ∈ N P und A N P-schwer ist. Intuitiv sind die N P-vollständigen Probleme die “schwersten” Probleme in N P. N P-harte Probleme sind “mindestens so schwer” wie alle Probleme in N P, müssen aber selbst nicht in N P sein, können also noch viel höhere Komplexität haben. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 372/388 Satz 225 SAT ist N P-vollständig. Beweis: Offensichtlich ist SAT ∈ N P. Es bleibt zu zeigen, dass SAT N P-hart ist, d.h. ∀L ∈ N P L p SAT . Wir tun dies, indem wir die Berechnung einer nichtdet. TM so in einer Formel kodieren, dass diese genau dann erfüllbar ist, wenn die Maschine in polynomiell vielen Schritten akzeptiert. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 373/388 Beweis (Forts.): Für jedes L ∈ N P gibt es eine Maschine N und ein Polynom p, so dass (∀x ∈ L) [TIMEN (x) ≤ p(|x|)]. Für die Reduktion zeigen wir jetzt, wie man daraus eine Formel F = F (x) von in |x| polynomieller Größe konstruiert, mit x = x1 · · · xn ∈ L gdw F ist erfüllbar Die Formel F besteht aus mehreren Teilen: F =R∧A∧U ∧E Info IV c Ernst W. Mayr 374/388 Beweis (Forts.): Wir führen folgende Variablen ein: s – die i-te Zelle des Bandes enthält zum Zeitpunkt t das Bi,t Symbol s ∈ Σ, Σ das Bandalphabet von N ; Ztq – die Turingmaschine befindet sich zum Zeitpunkt t im Zustand q ∈ Q, Q die Zustandsmenge von N ; Pti – der Schreib-/Lesekopf der Turingmaschine befindet sich zum Zeitpunkt t an Position i. Für |x| = n sei t̂ = p(n). Dann ist 0 ≤ t ≤ t̂, −t̂ ≤ i ≤ t̂, q ∈ Q und s ∈ Σ. Insgesamt haben wir also nur O(t̂2 ) = O(p(n)2 ) viele Variablen. Info IV c Ernst W. Mayr 374/388 Beweis (Forts.): Die Teilformel R gibt die Randbedingungen, dass 1 die Turingmaschine zu jedem Zeitpunkt t auf genau einem Feld i steht ^ _ Pti ∧ 2 die Turingmaschine zu jedem Zeitpunkt t in genau einem Zustand q ist _ ^ 0≤t≤t̂ 3 Pti ⇒ ¬Ptj , i6=j −t̂≤i≤t̂ 0≤t≤t̂ ^ Ztq ∧ 0 ^ Ztq ⇒ ¬Ztq und q6=q 0 q∈Q zu jedem Zeitpunkt t an jeder Bandposition i genau ein Symbol s steht ! ^ _ 0≤t≤t̂ −t̂≤i≤t̂ Info IV c Ernst W. Mayr s∈Σ s Bi,t ∧ ^ 0 s s Bi,t ⇒ ¬Bi,t s6=s0 374/388 Beweis (Forts.): Die Teilformel A gibt die Anfangsbedingung, dass zum Zeitpunkt 0 die Turingmaschine im Startzustand q0 an Position 1 des Bandes ist und auf dem Band die Eingabe x1 · · ·xn steht: Z0q0 ∧ P01 ∧ ^ 1≤i≤n xi Bi,0 ∧ ^ Bi,0 , −t̂≤i<1∨ n<i≤t̂ wobei das Leerzeichen ist. Info IV c Ernst W. Mayr 374/388 Beweis (Forts.): Die Teilformel U stellt sicher, dass die Übergänge zwischen zwei Zeitpunkten t und t + 1 entsprechend der Übergangsrelation δ : Q × Σ → 2Q×Σ×{−1,0,1} der Turingmaschine sind. Die Teilformel U ergibt sich aus der Konjunktion von s s ¬Pti ∧ Bi,t ⇒ Bi,t+1 und _ Pti ∧ 0 0 q i+d s s Bi,t ∧ Ztq ⇒ Bi,t+1 ∧ Zt+1 ∧ Pt+1 (q 0 ,s0 ,d)∈δ(q,s) für alle 0 ≤ t < t̂ und alle −t̂ ≤ i ≤ t̂. Info IV c Ernst W. Mayr 374/388 Beweis (Forts.): Die Teilformel E modelliert schließlich die Bedingung, dass die Turingmaschine einen akzeptierenden Zustand erreicht. O.B.d.A. nehmen wir an, dass N nach Erreichen eines Endzustandes (also q ∈ Qf ) in diesem verbleibt, d.h. für alle q ∈ Qf , s ∈ Σ gilt δ(q, s) = (q, s, 0). Dann ist E gegeben durch: _ Ztq q∈Qf 0≤t≤t̂ Daher ergibt sich: x ∈ L gdw F ist erfüllbar. Beachte: Für n = |x| hat F die Größe O(p(n)3 ). Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 374/388 Definition 226 3SAT ist die Menge der booleschen Formeln in konjunktiver Normalform, die in jeder Klausel höchstens drei Literale enthalten und die erfüllbar sind. Satz 227 3SAT ist N P-vollständig. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 375/388 Beweis: Offensichtlich ist 3SAT ∈ N P. Es bleibt zu zeigen, dass 3SAT N P-schwer ist. Wir tun dies, indem wir SAT polynomiell auf 3SAT reduzieren. Info IV c Ernst W. Mayr 376/388 Beweis: Sei F eine beliebige boolesche Formel in konjunktiver Normalform. Wir ersetzen jede Klausel (x1 ∨ x2 ∨ . . . ∨ xk ) (xi bezeichnet hier ein beliebiges Literal) durch (x1 ∨ x2 ∨ z2 ) ∧ (z2 ∨ x3 ∨ z3 ) ∧ . . . ∧ (zk−2 ∨ xk−1 ∨ xk ) , wobei z2 , . . . , zk−2 neue Variable sind. Es gibt eine Belegung für die zi , so dass alle Klauseln erfüllt sind, gdw mindestens eines der Literale xj wahr ist. Die Größe der konstruierten Formel ist polynomiell in der Größe der Ausgangsklausel. Daraus folgt, dass die obige Umformung eine p -Reduktion ist. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 376/388 Satz 228 3-COLORING ist N P-vollständig. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 377/388 Beweis: Es ist wiederum klar, dass 3-COLORING ∈ N P. Um zu zeigen, dass 3-COLORING N P-schwer ist, reduzieren wir 3SAT auf 3-COLORING. Sei also eine boolesche Formel mit den Literalen x1 , x1 , . . . , xn , xn und den Klauseln c1 , . . . , cm gegeben. Info IV c Ernst W. Mayr 378/388 Beweis: Wir konstruieren dazu folgenden Graphen: x1 x1 c1 x2 x3 x2 x3 c2 xr xn xr xn cm Die ersten beiden Klauseln sind hier c1 = x1 ∨ x2 ∨ x¯3 c2 = x¯1 ∨ x3 ∨ xr Info IV c Ernst W. Mayr 378/388 Beweis: Um zu erzwingen, dass alle Variablen nur mit Farben ∈ {0, 1} gefärbt werden, verbinden wir alle “Literal”-Knoten mit einem zusätzlichen Knoten, der (per Vereinbarung) die Farbe 2 erhält. 2 x1 1 x1 x2 x2 0 0 1 0 2 0 c1 x3 0 2 Info IV c Ernst W. Mayr c2 xr xr xn xn 1 0 1 1 0 1 1 2 1 x3 0 1 2 cm 0 378/388 Beweis: Wie am Beispiel der Klausel c2 ersichtlich, muss der unterste Knoten (der Ausgang) der Klausel die Farbe 0 erhalten, falls alle Literale der Klausel die Farbe 0 haben. Falls nicht alle Literale einer Klausel die Farbe 0 haben, kann der Ausgang der Klausel, wie am Beispiel von c1 ersichtlich, mit der Farbe 2 gefärbt werden. Wir führen nun noch einen weiteren Hilfsknoten ein, der (per Vereinbarung) mit der Farbe 0 gefärbt wird (ansonsten werden die Farben entsprechend umbenannt). Damit ergibt sich: Info IV c Ernst W. Mayr 378/388 Beweis: x1 1 2 x1 x2 x2 0 0 1 0 2 0 c1 x3 0 2 c2 xr xr xn xn 1 0 1 1 0 1 1 2 1 x3 0 cm 1 2 0 0 und es gilt: F erfüllbar ⇐⇒ G mit 3 Farben färbbar. Info IV c Ernst W. Mayr 2 N P-Vollständigkeit 378/388 2.1 Weitere Varianten von SAT Auch die folgenden Varianten von 3SAT sind N P-vollständig: UNIQUE 3SAT Instanz: Ausdruck in 3CNF-Form Frage: Gibt es eine Belegung, so dass in jeder Klausel genau ein Literal wahr wird? NOT-ALL-EQUAL 3SAT Instanz: Ausdruck in 3CNF-Form Frage: Gibt es eine Belegung, so dass in jeder Klausel mindestens ein wahres und mindestens ein falsches Literal vorkommt? Info IV c Ernst W. Mayr 2.1 Weitere Varianten von SAT 379/388 Definition 229 Sei F ein boolescher Ausdruck in CNF. Der zu F gehörige Klauselgraph enthält einen Knoten xi für jede Variable (!) xi und einen Knoten Cj für jede Klausel Cj in F . Die Kante {xi , Cj } existiert genau dann, wenn Cj das Literal xi oder xi enthält. Info IV c Ernst W. Mayr 2.1 Weitere Varianten von SAT 380/388 Und noch einige N P-vollständige Varianten von 3SAT: PLANAR 3SAT Instanz: Ausdruck in 3CNF-Form, dessen Klauselgraph planar ist Frage: Ist der Ausdruck erfüllbar? R-3SAT (restricted 3SAT) Instanz: Ausdruck in 3CNF-Form, in dem jede Variable höchstens 5 mal auftritt Frage: Ist der Ausdruck erfüllbar? Info IV c Ernst W. Mayr 2.1 Weitere Varianten von SAT 381/388 2.2 Weitere NP-vollständige Probleme Definition 230 Das Clique-Problem ist Instanz: Graph G = (V, E), k ∈ N Frage: Enthält G einen vollständigen (knoteninduzierten) Teilgraphen mit mindestens k Knoten? Info IV c Ernst W. Mayr 2.2 Weitere NP-vollständige Probleme 382/388 Definition 231 Sei G = (V, E) ein Graph. Eine Knotenmenge I ⊆ V heißt unabhängig (in G), falls I × I ∩ E = ∅. Definition 232 Das Independent Set-Problem ist Instanz: Graph G = (V, E), k ∈ N Frage: Enthält G eine unabhängige Teilmenge I der Knoten mit |I| ≥ k? Info IV c Ernst W. Mayr 2.2 Weitere NP-vollständige Probleme 383/388 Satz 233 Die Probleme CLIQUE und INDEPENDENT-SET sind N P-vollständig. Beweis: siehe z.B. Garey, Michael R. and David S. Johnson: Computers and intractability. A guide to the theory of N P -completeness. W.H. Freeman and Company:New York-San Francisco, 1979 Beobachtung: G hat eine Clique ≥ k gdw der Komplementärgraph Ḡ eine unabhängige Knotenmenge der Größe ≥ k hat. Info IV c Ernst W. Mayr 2.2 Weitere NP-vollständige Probleme 384/388 Die folgenden Entscheidungsprobleme sind N P-vollständig: HAMILTONSCHER KREIS (HC) Instanz: Graph G = (V, E) (oder Digraph) Frage: Gibt es in G einen Kreis, der jeden Knoten genau einmal enthält? VERTEX-COVER (VC) Instanz: Graph G = (V, E), k ∈ N Frage: Gibt es eine Teilmenge V 0 ⊆ V der Knoten, |V 0 | ≤ k, so dass jede Kante in G zu einem Knoten in V 0 inzident ist? Info IV c Ernst W. Mayr 2.2 Weitere NP-vollständige Probleme 385/388 Ebenso sind N P-vollständig: 3-PARTITION Instanz: 3n (nicht notwendig paarweise verschiedene) Zahlen ai ∈ N, i = 1, . . . , 3n Frage: Können die 3n Zahlen so in n Tripel partitioniert werden, dass alle Tripelsummen gleich sind? PARTITION Instanz: a1 , . . . , an ∈ N Frage: Gibt es I ⊂ {1, . . . , n} mit X X ai = ai ? i∈I i6∈I (0-1) KNAPSACK Instanz: a1 , . . . , an , b ∈ N Frage: Gibt es I ⊆ {1, . . . , n} mit X ai = b ? i∈I Info IV c Ernst W. Mayr 2.2 Weitere NP-vollständige Probleme 386/388 2.3 Stark/schwach NP-vollständige Probleme Definition 234 1 Ein Problem heißt stark N P-vollständig, falls es auch N P-vollständig bleibt, wenn in den Probleminstanzen auftretende Zahlen in unärer Darstellung geschrieben werden. 2 Ein Algorithmus heißt pseudopolynomiell, falls es polynomiell ist, wenn die Probleminstanzen in unärer Darstellung geschrieben werden. 3 Ein Problem heißt schwach N P-vollständig, falls es N P-vollständig ist und einen pseudopolynomiellen Algorithmus besitzt. Info IV c Ernst W. Mayr 2.3 Stark/schwach NP-vollständige Probleme 387/388 Satz 235 3-PARTITION ist stark-N P-vollständig. PARTITION und KNAPSACK sind schwach-N P-vollständig. Beweis: ohne Beweis; siehe GJ Info IV c Ernst W. Mayr 2.3 Stark/schwach NP-vollständige Probleme 388/388