Theoretische Informatik 1 Search - Beweis der Korrektheit David Kappel Institut für Grundlagen der Informationsverarbeitung TU Graz SS 2013 Algemeine Anmerkungen zur Übung • 9 Aufgabenblätter, 3 Abgabetermine • Blätter werden in 3er-Serien ausgegeben • Ausarbeitung max. in 3er Gruppen • mit * markierte Aufgaben sind besonders knifflig • Auch ohne *-Aufgaben kann die volle Punktezahl (100 Punkte) erreicht werden • Eine Abgabe pro Gruppe und Blatt • Angabe = Deckblatt der Abgabe • JFlap Programme in digitaler Form per E-Mail abgeben • Erste Blätter online: Abgabe am 26.April Aufgabenblatt 1 - Fleißiger Biber Deterministische 1-Band Turing Maschine ADD (4 Punkte) Folgende deterministische 1-Band Turingmaschine (DTM) sei gegeben: Notation: a;b,c a . . . altes Bandsymbol b . . . neues Bandsymbol c . . . Kopfbewegung Maschinen dieser Art werden als ‘fleißige Biber ’ bezeichnet. Sie zeichnen sich dadurch aus, dass sie ohne Eingabe eine möglichst lange Sequenz von 1en ausgeben und dann halten. Aufgabenblatt 1 - Fleißiger Biber 1. Zeigen Sie, dass diese Maschine genau 6 1er ausgibt und dann im Haltezustand hält. Geben Sie die Anzahl der Berechnungsschritte an, die für die Berechnung benötigt werden. (5 Punkte) 2. Sei m die Anzahl der Zustände (exklusive Haltezustand) einer Turingmaschine mit Σ = {} und Γ = {, 0, 1}. G(m) soll die maximale Anzahl an 1en bezeichnen, die eine DTM mit m Zuständen ausgeben kann bevor sie im Haltezustand hält. Zeigen Sie G(m) ∈ Ω(2m ). (5 Punkte) Aufgabenblatt 1 - Fleißiger Biber 3. Entwerfen Sie eine DTM mit 4 Zuständen (exklusive Haltezustand), Bandalphabet Γ = {, 0, 1} und Eingabealphabet Σ = {}, die eine möglichst lange, durchgehende Sequenz von 1en ausgibt und dann im Haltezustand hält. Implementieren Sie diese TM in JFlap. Gezählt werden nur Maschinen die eine durchgehende Sequenz schreiben. Wenn die Maschine hält dürfen nur 1en auf dem Band stehen, keine 0en und keine Lücken durch . Sei n die Länge der Ausgabe. Die Anzahl der Punkte für dieses Beispiel berechnet sich zu min(bn/5c, 5). (5* Punkte) Aufgabenblatt 2 - Perfektes Matching a1 b1 a2 b2 a3 b3 a4 b4 Gegeben sei ein bipartiter Graph G = (E, V ) mit zwei disjunkten Knotenmengen gleicher Größe A ∈ V und B ∈ V , sowie Kanten (a, b) ∈ E mit a ∈ A und b ∈ B. Als Matching M ⊆ E zwischen zwei Knotenmengen A und B bezeichnet man eine Zuordnung zwischen A und B, sodass keine zwei Kanten aus M einen gemeinsamen Knoten haben. M heißt perfektes Matching, wenn gilt: 2 · |M| = |V | also jeder Knoten aus A einem Knoten aus B zugeordnet wurde (siehe Abbildung links). Aufgabenblatt 2 - Perfektes Matching Wir erweitern den Graphen nun um 2 Knoten q und s, sowie Kanten zwischen q und allen Knoten aus A, und zwischen allen Knoten aus B und s (siehe Abbildung rechts). q a1 b1 a2 b2 a3 b3 a4 b4 s Als Fluss zwischen dem Quellknoten q und einer Senke s bezeichnet man eine Funktion f : E → R+ , die jeder Kante e ∈ E im Graphen einen Wert f (e) zuweist. Wir schränken die Kapazität, d.h. den maximalen Fluss durch jede Kante mit 1 ein, 0 ≤ f (e) ≤ 1. Außerdem muss der Fluss im Graphen immer erhalten bleiben. Daher muss die Summe von ein und ausgehenden Flüsse für jeden Knoten 0 sein. Ausgenommen von dieser Regel sind natürlich die Quelle und Senke. Für diese gilt offensichtlich f (q) = f (s). Aufgabenblatt 2 - Perfektes Matching 1. Beweisen Sie, dass ein perfektes Matching in diesem Graphen mit |A| = |B| = k genau dann existiert wenn f (q) = f (s) = k . (5 Punkte) 2. Ein gerichteter azyklischer Graph (DAG) ist ein gerichteter Graph ohne geschlossene Pfade. Eine Quelle in einem DAG ist ein Knoten ohne eingehende Kanten, eine Senke ist ein Knoten ohne ausgehende Kanten. Beweisen Sie, dass jeder (endliche) DAG zumindest eine Quelle und eine Senke hat. (5 Punkte) Aufgabenblatt 3 - Formale Sprachen Die Sprache COUNT3 sei gegeben als COUNT3 = {an bn cn | n ∈ N}. Wörter dieser Sprache sind demnach abc, aabbcc, aaabbbccc, ... 1. Entwerfen Sie eine 1-Band-DTM die COUNT3 entscheidet. (5 Punkte) 2. Beweisen Sie formal, dass diese Maschine korrekt funktioniert, d.h. dass sie genau dann den Haltezustand erreicht, wenn die Eingabe ein Element aus COUNT3 ist. (5 Punkte) 3. Analysieren Sie die Laufzeit der Turingmaschine und zeigen Sie COUNT3 ∈ P. (5 Punkte) Formaler Beweis der Korrektheit von Search Beweis der Korrektheit von Algorithmen mit Schleife → Schleifeninvariante S = {1} markiere Knoten 1 solange S 6= {} : wähle ein i ∈ S und entferne i aus S ∀ Kanten (i, j) ∈ E, wenn j nicht markiert: füge j zu S hinzu und markiere j Wenn Knoten n markiert ist, antworte mit ‘ja’, sonst mit ‘nein’ Schleifeninvariante Eigenschaft einer Schleife die in jeder Iteration, an einem bestimmten Punkt in der Schleife, erfüllt ist Beispiel: Multiplikation (z = a · b) durch Addition x =a y =b z=0 while x > 0 do z =z +y x =x −1 end Schleifeninvariante: (x · y ) + z = a · b Search - Beweis der Korrektheit Wähle in jedem Schleifendurchgang ein i ein s ∈ Si : X = {t ∈ V \ Mi |s − → t} Si+1 = Si \ {s} ∪ X Mi+1 = Mi ∪ X Schleifeninvariante P(i) (Beachte: Si ⊆ Mi ): In jeder Iteration 2 Möglichkeiten: n wurde bereits markiert, oder es ist noch ein Knoten ‘vorrätig’, der nach n führt. ∗ + 1− → n ⇐⇒ n ∈ Mi ∨ ∃h ∈ Si : h −−−→ n V \Mi Beweise P(0), wobei S0 = {1}, M0 = {1}: ∗ + 1− → n ⇐⇒ n = 1 ∨ 1 −−−−→ n + V \{1} ∗ P(0) ist erfüllt lt. Def. von − → und − → als transitive bzw. reflexiv-transitive Hülle von − →. Search - Beweis der Korrektheit Zeige P(i) ⇒ P(i + 1): + ∗ P(i) ≡ 1 − → n ⇐⇒ n ∈ Mi ∨ ∃h ∈ Si : h −−−→ n V \Mi + + ⇐⇒ n ∈ Mi ∨ ∃h ∈ Si \ {s} : h −−−→ n ∨ s −−−→ n V \Mi V \Mi ∗ ⇐⇒ . . . ∨ . . . ∨ ∃t ∈ V \ Mi : s − → t −−−→ n V \Mi ∗ ⇐⇒ . . . ∨ . . . ∨ ∃t ∈ X : t −−−−→ n V \Mi+1 + ⇐⇒ . . . ∨ . . . ∨ n ∈ X ∨ ∃t ∈ X : t −−−−→ n V \Mi+1 + ⇐⇒ n ∈ Mi ∪ X ∨ ∃h ∈ Si \ {s} ∪ X : h −−−−→ n ≡ P(i + 1) | {z } | {z } V \Mi+1 =Mi+1 =Si+1 Search - Beweis der Korrektheit Schleifenabbruch bei Si = {}: P(i) ∧ Si = {} =⇒ ∗ =⇒ 1 − → n ⇐⇒ n ∈ Mi ∨ ∃h ∈ {} : . . . ∗ =⇒ 1 − → n ⇐⇒ n ∈ Mi Die gegebene JA-NEIN-Antwort ist daher korrekt. Der Algorithmus terminiert, da jeder der (endlich vielen) Knoten höchstens einmal markiert und zu S hinzugefügt werden kann und bei jedem Durchgang mindestens ein Knoten aus S entfernt wird.