Kapitel 1.5: Äquivalenz von RAM und TM Berechenbarkeit und Komplexitätstheorie 5. Vorlesung Jede RAM-berechenbare Funktion kann auch ” von einer Turingmaschine berechnet werden und umgekehrt.“ D.h.: Martin Dietzfelbinger Die beiden Modelle haben die gleiche Berechnungskraft“. ” Beweismethode: Wechselseitige Simulation. 13. November 2009 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 FG Komplexitätstheorie und Effiziente Algorithmen TM auf RAM: Satz 1.5.1 BuK – 13.11.2009 1 Zeitbedarf Zu jeder TM M = (Q, Σ, . . . ) können wir (konstruktiv/algorithmisch!) eine RAM M finden, Erweiterung von Satz 1.5.1: die dasselbe Ein-/Ausgabeverhalten wie M hat, Zahl der Schritte von M auf x ist O(|x| + tM (x)), falls M auf x hält. d.h.: für jedes x = a1 · · · an ∈ Σ∗ gilt: Überlege dazu: • M hält auf Eingabe x = a1 . . . an ⇒ M hält auf Eingabe x = (a1, . . . , an) und die Ausgabe von M auf x ist fM (x). • Initialisierung: O(|Γ|), also konstant • Jeder Schritt: O(|Γ|), also konstant • Nachbearbeitung: O(|fM (x)| + 1), also O(|x| + tM (x)) • M hält nicht auf x ⇒ M hält nicht auf x. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 2 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 3 (Logarithmische) Kosten der Simulation Bemerkung: Die Kosten der Berechnung von M auf x im logarithmischen Kostenmaß sind O(tM (x) · log(tM (x))). Erinnerung: Logarithmische Kosten veranschlagen s = |bin(s)| für jede in einem Schritt gelesene Zahl s. Alle verwendeten Zahlen sind konstant (durch |Γ| beschränkt), außer: Rhead ≤ 2tM (x) + 1. Kosten eines Schritts im logarithmischen Kostenmaß: O(log(Rhead)), also O(log(tM (x))). Gesamtkosten: tM (x) · O(log(tM (x))), also O(tM (x) log(tM (x))). FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 4 Simulation von RAM auf TM (1.5.2) • Kann entlang derselben Ideen auch Turingmaschinen in C-/Java-/Pascal/. . . -Programmen simulieren. Idealisierung: Speicher. Unbegrenzte Rechenzeit, FG Komplexitätstheorie und Effiziente Algorithmen unbegrenzter BuK – 13.11.2009 5 Definition (1.5.2): Zahlfunktionen auf TM TM M = (Q, {0, 1, #}, Γ, B, q0, F, δ) Jede RAM-berechenbare Funktion kann auch ” von einer Turingmaschine berechnet werden.“ Typischer Input: 100#1101#1#0#11 Entspricht Zahlentupel (4, 13, 1, 0, 3) Achtung! Für (a1, . . . , an) ∈ Seq(N) ist RAMs arbeiten mit Zahlen, TMn mit Zeichenreihen. f˜M (a1, . . . , an) = (b1, . . . , bm), Wie können Turingmaschinen Zahlfunktionen berechnen? Lösung: wenn fM (bin(a1)# · · · #bin(an)) = bin(b1)# · · · #bin(bm). Wenn z.B. M auf Eingabe 100#1101#1#0#11 (Binär-)Kodierung die Ausgabe 10101#110100 erzeugt, ist f˜M (4, 13, 1, 0, 3) = (21, 52). FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 6 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 7 Definitionsbereich DM von f˜M : Definition (1.5.2) Die Menge der Tupel (a1, . . . , an) ∈ Seq(N), für die fM (bin(a1)# · · · #bin(an)) die Form bin(b1)# · · · #bin(bm) hat. Bemerkung ( Syntaxcheck“): ” Es ist sehr einfach (DFA!), zu testen, ob eine Eingabe x das Format bin(a1)# · · · #bin(an) hat, ebenso für die Ausgabe. Konsequenz: Wir nehmen an, dass M fehlerhafte Eingaben und Ausgaben erkennt und geeignet behandelt. . . . und ignorieren ab hier Syntaxfehler in Ein-/Ausgabe von M . BuK – 13.11.2009 (a) Eine Zahlfunktion f : D → Seq(N) mit D ⊆ Seq(N) heißt partiell rekursiv, wenn es eine TM M mit f = f˜M gibt. (b) Eine Menge A ⊆ Seq(N) heißt rekursiv aufzählbar, wenn es eine TM M = (Q, {0, 1, #}, . . .) gibt mit LM = {bin(a1)# · · · #bin(an) | (a1, . . . , an) ∈ A}. (b’) Eine Menge A ⊆ N heißt rekursiv aufzählbar, wenn es eine TM M = (Q, {0, 1}, . . .) gibt mit LM = {bin(a) | a ∈ A}. (c) Eine Menge A ⊆ Seq(N) heißt rekursiv, wenn es eine TM M gibt, die auf allen Eingaben hält, mit LM = {bin(a1)# · · · #bin(an) | (a1, . . . , an) ∈ A}. Mögliche Reaktion, je nach Bedarf: Anhalten mit vorgeschriebener Ausgabe 0, ε, usw. – Verwerfen – Endlosschleife – . . . FG Komplexitätstheorie und Effiziente Algorithmen Änderung im Vergleich zum Skript! 8 Beispiele . . . usw. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 9 Satz 1.5.5 Rekursive Zahlenmenge: {p ∈ N | p ist Primzahl} Rekursive Menge von Paaren: {(a, b) ∈ N2 | a, b teilerfremd} Rekursive Menge von Tupeln: {(a1, . . . , an) ∈ Seq(N) | a1 ≤ . . . ≤ an} Es sei D ⊆ Seq(N) und f : D → Seq(N) eine Funktion. M sei eine RAM, die f berechnet. Dann gilt: Es existiert eine Turingmaschine M mit f = f˜M . Rekursive Funktion: N2 (a, b) → (a div b, a mod b) Insbesondere: Wenn für A ⊆ Seq(N) eine RAM M existiert, die die charakteristische Funktion cA von A berechnet, dann ist A rekursiv (d.h. cA kann von einer TM M berechnet werden). Für jedes Beispiel: Überlege, wie eine TM für die Sprache/Funktion jeweils vorgehen könnte! Beweis: Wir beschreiben, wie eine Mehrband-TM M arbeitet, die dies leistet. Rekursive Funktion: N2 (a, b) → a + b Wieder: M kann mechanisch“ (algorithmisch) aus dem Pro” gramm von M erzeugt werden. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 10 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 11 Idee: Halte die Registerinhalte von M in Binärdarstellung auf einem Band von M , zusammen mit den Registernummern. ··· Befehlszählerstand: Wert in {0, 1, . . . , l − 1}. Wird in der Steuereinheit von M gespeichert. BB ##bin(i1)#bin(b1)##bin(i2)#bin(b2)## · · · · · · ##bin(im)#bin(bm)## BB · · · Programm von M hat drei Teile: stellt Registerinhalte Ri1 = b1, . . . , Rim = bm dar. (Alle anderen Registerinhalte sind 0.) 1. Initialisierung : Umbau der Eingabe auf das für die Simulation benötigte Format; Beispiel: R0 = 5, R3 = 0, R4 = 12, R7 = 3. Darstellung auf dem Band: 2. Schritt-für-Schritt-Simulation; · · · B ##100#1100##11#0##0#101##111#11## B · · · 3. Nachbearbeitung : Umbau der Ausgabe auf das für Turingmaschinen geforderte Format. Register mit Inhalt 0 dürfen, müssen aber nicht explizit dargestellt sein. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 12 FG Komplexitätstheorie und Effiziente Algorithmen Initialisierung: Schritt-für-Schritt-Simulation: Input für RAM M : (a1, . . . , an). Für jede Zeile Eingabeformat für TM M : bin(a1)# · · · #bin(an) 0 ≤ z < l, des Programms von M hat das Programm der TM M ein BB ##bin(1)#bin(a1)##bin(3)#bin(a2)## · · · ##bin(2n − 1)#bin(an)##bin(0)#bin(n)## Leicht zu konstruieren! Zähle mit Binärzähler die Eingabezahlen nacheinander ab, nach Lesen von aj schreibe: . . . ##bin(2j−1)#bin(aj )## . . .. (Details: Skript.) FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 13 z : Bz , Benötigtes Format: ··· BuK – 13.11.2009 14 Teilprogramm“ TPz , ” (Block von Zeilen in der Turingtafel/Übergangsfunktionstabelle). Zweck des Teilprogramms TPz : Simuliere den Schritt zu Befehlszeile z. Struktur von TPz hängt vom Maschinenbefehl in Zeile z ab. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 15 Beispiel: 10: Ri ← Rj · Rk Beispiel: 10: Ri ← Rj · Rk Teilprogramm TP10 tut folgendes: 4. (Finde Position von Register Ri) 1. (Finde Inhalt von Register Rj ) Suche auf Band 1 das Teilwort ui = ##bin(i)#. Suche auf Band 1 das Teilwort uj = ##bin(j)#. Kontext: ##bin(i)#e1 · · · em## Kontext: ##bin(j)#b1 · · · br ## Übertrage alles rechts hiervon auf Band 3. Kopiere b1 · · · br auf Band 2. Falls ##bin(j)# nicht auf Band 1: Schreibe 0 auf Band 2. Übertrage Restinschrift zurück von Band 3. 2. Analog: schreibe Inhalt von Rk auf Band 3. Falls ui auf Band 1 nicht gefunden: hänge neuen Eintrag bin(i)#d1 · · · ds## rechts an Band 1 an. 3. Unterprogramm: Multipliziere Zahlen auf Band 2, 3. – Resultat: d1 · · · ds auf Band 2 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 Überschreibe #e1 · · · em## mit #d1 · · · ds## von Band 2. 16 5. Lösche Bänder 2 und 3; fahre Kopf auf Band 1 auf Ausgangsposition FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 17 Andere Befehle: Analog (auch Übung). Wenige, einfache Maschinenbefehle → wenige, einfache Fälle! 6. (Falls l ≥ 12:) Springe zum Teilprogramm TP11. (Falls l = 11, springe zur Nachbearbeitung.) Wenn M auf Input a hält: Befehlszähler erhält schließlich einen Wert ≥ l. In den Teilprogrammen Nachbearbeitung. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 18 TPz erfolgt FG Komplexitätstheorie und Effiziente Algorithmen Sprung BuK – 13.11.2009 zur 19 Nachbearbeitung: Erreicht: Beispiel: Aus der Bandinschrift Ein-/Ausgabeverhalten der TM M bildet das der RAM M exakt nach. Anzahl der Schritte der TM? ##11#101##10#1111##1001#11 Satz 1.5.5, Fortsetzung: ##110#11101##0#100##101#10##, – entspricht Registerinhalten R3 = 5, R2 = 15, R9 = 3, R6 = 29, R0 = 4, R5 = 2 erzeugt die Nachbearbeitung die Ausgabe-Bandinschrift Wenn cM,logar(a) die Kosten der Rechnung von M auf a = (a1, . . . , an) ∈ D im logarithmischen Kostenmaß bezeichnet dann macht die simulierende TM M auf Input a O((cM,logar(a) + a + b)3) Schritte, wenn b = f˜M (a) ist. TM-Laufzeit beschränkt durch Polynom in logarithmischen Kosten auf der RAM. 0#101#10#0, entsprechend der RAM-Ausgabe (0, 5, 2, 0). Mechanismen: Binäres Zählen, Textsuche, Umkopieren. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 20 Beweisskizze: FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 21 • s := max. Länge der Inschrift von Band 1 Bemerkung: Polynomielle Beschränkung funktioniert nicht mit dem uniformen Kostenmaß auf der RAM. • t := max. Bitlänge eines Registerinhaltes Beispiel: Starte mit Konstante 3, Input r. • 1 RAM-Schritt kostet O(s + t ) TM-Schritte In O(r) Schritten erzeuge Zahl 32 mit ≈ 2r · log 3 Bits. • es gibt ≤ ca := cM,logar(a) RAM-Schritte TM braucht zur Bearbeitung so langer Zahlen Zeit Ω(2r ): exponentiell in der Schrittzahl der RAM. r 2 • Phase 2 macht O(ca(s + t2)) Schritte • s = O(a log(a) + ca). • t = O(a + ca). Alternative: Wenn die RAM die Multiplikations-Operation nicht benutzt, kann man auch mit dem uniformen Kostenmaß vorgehen (s. Übung). • Also: Phase 2 macht O((a + ca) ) Schritte. 3 • Vorbearbeitung: O(a log(a)) Schritte. • Nachbearbeitung: O((s + b)2) Schritte. • Zusammen: O((a + b + ca)3). FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 22 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 23 Kapitel 1.3: Nichtdeterministische Turingmaschinen Nichtdeterministische Turingmaschinen • kein Modell für realistischen Rechner . . . und Chomsky-0-Grammatiken (1.3.2): später • wie weiß die Maschine, was sie als nächstes tun soll?“: ” kein echtes Problem, denn eine nichtdeterministische TM rechnet nicht einfach Schritt für Schritt 1.3.1 Nichtdeterministische TM • deterministisch“: in jeder Konfiguration genau eine ” Nachfolgekonfiguration . . . oder keine → Haltekonfiguration • nichtdeterministisch“: es ist erlaubt, dass in man” chen Konfigurationen mehr als eine Nachfolgekonfiguration existiert FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 24 Definition (1.3.1) Eine nichtdeterministische Turingmaschine (NTM) M besteht aus 7 Komponenten: Q, Σ, Γ, B, q0, F : wie bei gewöhnlichen TM • abstraktes Modell • erleichtert (manchmal) Programmierung (in diesem Kapitel) • hilft bei der Definition interessanter Sprachklassen (Theorie der NP-Vollständigkeit) FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 25 Beispiel 1.3.2: Exaktes Rucksackproblem Problem RUCKSACK∗ (auch: SUBSET SUM): Input: n Objekte mit Volumina a1, . . . , an ∈ N, Rucksack mit Kapazität b ∈ N. δ : Q × Γ → P(Q × Γ × {L, R, N }) In einer Situation (q, a) (Zustand, gelesener Buchstabe) gibt es keinen, einen, oder mehr als einen möglichen Zug (q , a, D) . Frage: Kann man aus den Objekten einige auswählen, so dass sie den Rucksack exakt füllen, d.h. dass ihr Gesamtvolumen genau b ist? Gibt es eine Teilmenge I ⊆ {1, . . . , n} mit i∈I ai = b? Die möglichen Züge sind die Elemente von δ(q, a). Wenn |δ(q, a)| ≥ 2, dann existiert eine Auswahl oder Verzweigungsmöglichkeit. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 26 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 27 NTM für RUCKSACK∗ Formalisierung durch Sprache 3 Phasen: auf Input w passiert folgendes: L:= RUCKSACK∗ {bin(a1)# · · · #bin(an)#bin(b) | n ∈ N, a1, . . . , an, b ≥ 1 , ai = b}. ∃I ⊆ {1, . . . , n} : i∈I Das Entscheidungsproblem RUCKSACK∗ ist genau das Wortproblem für LRUCKSACK∗ . Beispiel: 1. Syntaxcheck: Hat w das richtige Format? Ist w ∈ L(1(0 + 1)∗(#1(0 + 1)∗)+)? Bei Erfolg: Erreiche Zustand q2, Kopf auf erstem Inputzeichen. Sonst: Halte verwerfend. 2. Wähle nichtdeterministisch“ einige der Zahlen aus. ” Formal: Ersetze einige der #-Zeichen durch ∗. 3. Streiche die per bin(ai)∗ markierten Zahlen. 1010#101#1000#11#1101 ∈ LRUCKSACK∗ ; 110#10#1010#110#1111 ∈ / L RUCKSACK∗ FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 4. Addiere (Übung!) die restlichen Zahlen und prüfe, ob die Summe b ist. . 28 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 29 NTM für RUCKSACK∗: technisch NTM für RUCKSACK∗: Eigenschaften 1. Syntaxcheck: wie ein DFA Bei Erfolg: Erreiche Zustand q2, Kopf auf erstem Inputzeichen; sonst: Halte verwerfend. Eingabe (a1, . . . , an, b) bestehe aus n + 1 Zahlen, syntaktisch korrekt. 2. δ(q2, a) = {(q2, a, R)}, für a ∈ Σ. Entspricht: 2n Teilmengen I ⊆ {1, . . . , n} Falls i∈I ai = b, wird akzeptiert, sonst verworfen. δ(q2, #) = {(q2, ∗, R), (q2, #, R)}, für a ∈ Σ. δ(q2, B) = {(q3, B, L)}. Manche Berechnungen akzeptieren, manche verwerfen. 3. Überschreibe bin(ai)∗ mit Nullen: 00 · · · 0# (Skript: Deterministische TM für diese Aufgabe.) 4. Addiere die verbleibenden Zahlen und prüfe, ob die Summe b ist. Falls ja, akzeptiere, falls nein, verwerfe. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 Nach Phase 2 sind genau 2n viele verschiedene Situationen möglich. 30 (Willkürliche) Festlegung: NTM M akzeptiert w, falls mindestens eine der möglichen Berechnungen akzeptiert. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 31 • Schreibe k M k. Semantik von NTM Definition (1.3.3) • Iteration k ∗M k wird definiert wie bei TM. NTM M = (Q, Σ, Γ, B, q0, F, δ) sei gegeben. • Menge KM der Konfigurationen: wie bei TM Startkonfiguration initM (x): wie bei TM • Sei k = α1(q, a)α2 Konfiguration. Für jedes Tripel (q , a, D) ∈ δ(q, a) gibt es eine Nachfolgekonfiguration k von k, und zwar: k wird aus k gebildet wie bei (deterministischen) TM, unter Benutzung des Zuges“ (q , a, D). ” FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 32 Definition (1.3.3) BuK – 13.11.2009 33 • initM (x) = k0 k1 k2 · · · NTM M = (Q, Σ, Γ, B, q0, F, δ) sei gegeben. • k = α1(q, a)α2 ∈ KM heißt Haltekonfiguration, wenn δ(q, a) = ∅ ist. Akzeptierend: q ∈ F Verwerfend: q ∈ Q − F • Folge FG Komplexitätstheorie und Effiziente Algorithmen (ohne Ende) heißt nicht-haltende Berechnung von M auf x. • akzeptierende Berechnung“: endet in akzeptierender ” Haltekonfiguration • verwerfende Berechnung“: ” Haltekonfiguration endet in verwerfender initM (x) = k0 k1 · · · kt heißt eine haltende Berechnung von M auf x falls kt Haltekonfiguration. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 34 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 35 Definition (1.3.4) Wir definieren für NTM M nicht: NTM M = (Q, Σ, Γ, B, q0, F, δ) sei gegeben. HM und fM . ∗ • M akzeptiert x ∈ Σ , wenn M mindestens eine akzeptierende Berechnung für x hat, d.h. (3 Zeilen im Skript S. 62 streichen.) wenn es eine Berechnung initM (x) = k0 k1 · · · kt gibt, so dass kt akzeptierende Haltekonfiguration ist. Achtung: Es ist dann unwichtig, ob es auch verwerfende oder nicht haltende Berechnungen gibt. • LM := {x ∈ Σ∗ | M akzeptiert x}. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 36 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 Zeitschritte Wurzel Berechnungsbaum In einem Berechnungsbaum sind alle möglichen Berechnungen einer NTM M auf einem Input x zusammengefasst. k’1 . . . Jede Berechnung ist ein Weg aus Konfigurationen, alle Wege haben einen gemeinsamen Startpunkt, die Startkonfiguration. k0 init M(x) 0 k’’1 k’’’ 1 1 k’2 k’’2 . . . 2 . . . t k k 1 k k 2 37 3 k 4 Nachfolge− konfigurationen von k t+1 "verwirf" "akzeptiere" . FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 38 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 39 • jeder Berechnung initM (x) = k0 k1 · · · kt · · · (endlich oder unendlich) entspricht ein Pfad im Baum; Berechnungsbaum – Definition (1.3.7) CT(M, x) ( computation tree“) ist ein endlicher ” oder unendlicher gerichteter Baum, folgendermaßen gebaut: (i) Wurzel, mit initM (x) markiert. (ii) Hat ein Knoten v im Baum Markierung k = α1(q, a)α2 und ist δ(q, a) = {(q1, a1, D1), . . . , (qs, as, Ds)}, und sind k1, . . . , ks die Nachfolgekonfigurationen von k zu den s Zügen in δ(q, a), so hat v Nachfolger v1, . . . , vs, die mit k1, . . . , ks markiert sind. • ein Knoten mit Markierung k ist Blatt ⇔ k Haltekonfiguration; • M akzeptiert x ⇔ CT(M, x) hat mindestens ein akzeptierendes Blatt“. ” CT(M, x) enthält alle Berechnungen von M auf x als Pfade! FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 40 Endlichkeit des Berechnungsbaums FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 41 Modellvarianten, Programmiertricks . . . genau wie bei den (deterministischen) TMs. Bemerkung (1.3.8) Besonders wichtig: Nichtdeterministische Turingmaschinen mit k Bändern: definiert genau wie bei deterministischen TMn. CT(M, x) hat endlich viele Knoten ⇔ jede Berechnung von M auf x Satz (1.3.5) M sei NTM mit k Bändern. Dann gilt: (a) Es gibt eine 1-Band-NTM M mit LM = LM endet nach endlich vielen Schritten. Beweis: ⇒“: trivial. ” ⇐“: Wenn CT(M, x) unendlich ist, kann man per Induktion ” einen unendlichen Weg in CT(M, x) konstruieren; dies ist eine nicht abbrechende Berechnung; Details siehe Skript. (b) Wenn jede Berechnung von M auf Inputs x ∈ Σn nach höchstens t(n) Schritten anhält, so kann die NTM M in (a) so konstruiert werden, dass jede Berechnung von M auf Inputs x ∈ Σn nach höchstens O(t(n)2) Schritten anhält. Fazit: Benutze k Bänder, wenn bequem. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 42 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 43 Beispiel 1.3.6: Oberfolgenproblem Beispiel: Oberfolgenproblem Teilfolge“: 1000 ist Teilfolge von 001011001 ” Def.: u = b1 · · · bm heißt Teilfolge von x = a1 · · · an, wenn es 1 ≤ i1 < · · · < im ≤ n gibt, so dass b1 · · · bm = ai1 · · · aim . Gegeben: Beliebige r.a. Sprache L = LM , M TM. Oberfolge“: ” Def.: x heißt Oberfolge von u, wenn u Teilfolge von x ist. L ist die Menge der Oberfolgen von Wörtern in L. L := {x ∈ Σ∗ | ∃w ∈ L : w ist Teilfolge von x}. Wir entwerfen eine 2-Band-NTM für L. Beispiel: 001011001 ist Oberfolge von 1000, aber 001011101 ist nicht Oberfolge von 1000. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 44 Beispiel: Oberfolgenproblem Input: x = a1 . . . an FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 45 Beispiel: Oberfolgenproblem 2 Phasen: 1: Lese x von links nach rechts, wähle nichtdeterministisch“ ” Zeichen aus, die auf Band 2 kopiert werden. Fahre Kopf auf Band 2 zum Ausgangspunkt zurück. δ(q0, a, B) = {(q0, a, a, R, R), (q0, a, B, R, N )}, für a ∈ Σ; In Phase 1 gibt es genau 2n verschiedene Abläufe. Auf Input x = abac steht auf Band 2 nach Phase 1 eines der folgenden Wörter: abac, aba, abc, ab, aac, aa, ac, a, bac, ba, bc, b, ac, a, c, ε. δ(q0, B, B) = {(q1, B, B, N, L)}; (16 Abläufe, 14 verschiedene Wörter als Resultat möglich.) δ(q1, B, a) = {(q1, B, a, N, L)}, für a ∈ Σ; Es gilt: M akzeptiert x genau dann wenn x eine Teilfolge y ∈ LM hat, d.h. wenn x ∈ L ist. δ(q1, B, B) = {(q0M , B, B, N, R)}. 2: Lasse M auf der Inschrift von Band 2 ablaufen. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 46 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 47 Gewöhnliche TM ist praktisch“ ein Spezialfall von NTM: ” Sei M = (Q, Σ, Γ, B, q0, F, δ) eine deterministische TM. Technik: Aufzähler für Δ∗ Z.B.: Δ = {a, b, c} Betrachte δ̂ : Q × Γ → P(Q × Γ × {L, R, N }) mit δ̂(q, a) := {(q , a , D)}, ∅, Erzeuge nacheinander: ε, a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa, aab, aac, . . . falls δ(q, a) = (q , a , D); falls δ(q, a) = − (undefiniert). Dasselbe Verhalten, Sprachen gleich: LM = LM̂ . Berechnungen in M (eindeutig!) entsprechen nungsbäumen in M , die zu Wegen entartet sind. Lemma (1.3.10) Berech- Frage: Kann man mit NTM mehr berechnen“ als mit TM? ” Nein! Sei Δ Alphabet. Dann existiert eine deterministische 1-BandTM, die auf Eingabe ε unendlich lange läuft und dabei nacheinander die Konfiguration (qfertig , B) und dann die Konfigurationen (qfertig , a1)a2 · · · an erreicht, für alle a1 · · · an ∈ Δ+. Idee: Zähle im d-ären System. (Details: Skript, Übung). FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 48 Satz (1.3.11) Ist L = LM für eine nichtdeterministische TM M , dann ist L rekursiv aufzählbar. Beweis: Gegeben sei NTM M = (Q, Σ, Γ, B, q0, F, δ). Simulation“: Beschreibe Arbeitsweise einer TM M . ” Menge der Einzelzüge“ von M : ” Z := Q × Γ × {L, R, N } (Endliche Menge!) Jede Berechnung k0 k1 k2 . . . entspricht einer (eindeutigen) Zugfolge (z1, z2, . . .) in Z. Aber: Nicht jede Zugfolge liefert eine Berechnung! FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 50 FG Komplexitätstheorie und Effiziente Algorithmen Beispiel Rucksack-NTM: Konfiguration (q0, 1)1#11#1#100 ... (q2, 1)1#11#1#100 1(q2, 1)#11#1#100 11(q2, #)11#1#100 11 ∗ (q2, 1)1#1#10 11 ∗ 1(q2, 1)#1#10 11 ∗ 11(q2, #)1#10 11 ∗ 11#(q2, 1)#10 ... (q4, 0)0#11#1#100 ... BuK – 13.11.2009 49 Zug (q0, 1, R) ... (q2, 1, R) (q2, 1, R) (q2, ∗, R) (q2, 1, R) (q2, 1, R) (q2, #, R) (q2, 1, R) ... ... ... FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 51 M erzeugt auf Band 3 nacheinander jede mögliche endliche Folge z1z2 . . . zr ∈ Z ∗. TM M hat drei Bänder. Band 1: Eingabe x, nie verändert. Für jede dieser Folgen z1z2 . . . zr wird folgendes getan: Band 2: Arbeitsband von M . (∗) Kopiere x von Band 1 auf Band 2. Band 3: Zugfolgen (z1, z2, . . .). Rechne auf Band 2 wie M , führe dabei im i-ten Schritt Zug zi aus, falls dies mit δ konsistent ist. Wie hat man sich Band 3 vorzustellen? Alphabet Z = Q × Γ × {L, R, N } Endliche Menge!! Falls nach r Schritten eine akzeptierende Haltekonfiguration von M erreicht wird: halte, akzeptiere. Sonst (d.h.: Zug nicht möglich, Rechnung stoppt verwerfend oder nach r Schritten keine akzeptierende Haltekonfiguration erreicht): Lösche Band 2, erzeuge auf Band 1 nächste Zugfolge, gehe zu (∗) . FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 52 Beobachtung: Wenn x ∈ LM , es also mindestens eine akzeptierende Berechnung k0 k1 k2 . . . von M gibt, dann wird irgendwann eine Zugfolge erzeugt, die einer akzeptierenden Berechnung von M entspricht ⇒ M hält akzeptierend. Wenn M akzeptierend hält, dann hat M soeben eine akzeptierende Berechnung von M durchgeführt. ⇒ x ∈ LM BuK – 13.11.2009 53 Ergänzung (1.3.12) Leichte Modifikation von M kann beobachten, ob CT(M, x) endlich ist und x nicht akzeptiert wird. (⇔ Für ein r führen alle mit δ konsistenten Zugfolgen der Länge r in eine verwerfende Haltekonfiguration.) Dann: Lasse die simulierende TM M verwerfend halten. Fazit: Wenn alle nicht akzeptierenden Berechnungsbäume von M endlich sind, dann ist LM rekursiv und M (modifiziert) hält auf allen Eingaben. Beachte: HM ist die Menge aller x mit: x ∈ LM oder CTM (x) ist endlich. (Für diese x endet die beschriebene Prozedur nach endlich vielen Schritten.) Also: M akzeptiert x ⇔ x ∈ LM . D.h.: LM = LM . FG Komplexitätstheorie und Effiziente Algorithmen FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 54 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 55 Zeitaufwand der Simulation: 1.4 Struktur- und Abschlusseigenschaften |Z|r · O(|x| + r) = O(|Z|t · (|x| + t)) = O(|Z|t · t). Satz (1.4.1) Wenn L, L1, L2 ⊆ Σ∗ Sprachen sind, dann gilt: 0≤r≤t Konsequenz: Wenn t : N → R+ so ist, dass für jedes x ∈ Σ∗ jede Berechnung von M auf x höchstens t(|x|) Schritte macht, dann ist die simulierende Turingmaschine M O(2c·t(n))zeitbeschränkt, für c = 1 + log |Z|. (Exponentieller Blow-up) Benutze NTM als bequeme Programmiertechnik! Hilfreich z.B. für den Nachweis von Abschlusseigenschaften. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 (a) L ist rekursiv ⇒ L ist rekursiv. (b) L1, L2 sind rekursiv ⇒ L1 ∩ L2 und L1 ∪ L2 sind rekursiv. (c) L ist rekursiv ⇔ cL ist rekursiv, wo 1, falls x ∈ L cL(x) = 0, sonst die charakteristische Funktion von L bedeutet. (d) L1, L2 sind rekursiv ⇒ L1L2 ist rekursiv. 56 (e) L ist rekursiv ⇒ L∗ ist rekursiv. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 57 1.4 Struktur- und Abschlusseigenschaften Beweis: Jeweils Konstruktion einer neuen TM aus gegebenen TMn. (Details: Tafel, Skript, Übung.) Beweisideen: (c) Sei L = LM mit M = (Q, Σ, Γ, B, q0, F, δ). Modifiziere M so, zu neuer TM M : Lasse M laufen. Wenn M in Zustand q ∈ F [q ∈ / F ] hält, schreibe 1B [0B] aufs Band und halte mit dem Kopf unter der 1 [0]. Einer der beiden Fälle tritt immer ein, also hält M auf allen Inputs. Umkehrung: ähnlich (Übung.) FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 58 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 59 1.4 Struktur- und Abschlusseigenschaften 1.4 Struktur- und Abschlusseigenschaften Beweisideen: Beweisideen: (d) Sei L1 = LM1 und L2 = LM2 ; beide TM halten auf allen Inputs. – M ist neue 2-Band-TM. Auf Eingabe x erzeugt M nacheinander jede Aufteilung x = x1x2 (genau |x| + 1 Möglichkeiten) und lässt für jeden dieser Fälle auf Band 2 TM M1 auf x1 und danach TM M2 auf x2 ablaufen. Sobald einmal beide Berechnungen akzeptiert haben, akzeptiert M . Wenn M für keine der |x| + 1 Aufteilungen akzeptiert hat, dann verwirft M . FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 (e) Sei L = LM für eine TM M , die auf jeder Eingabe hält. M ist 2-Band-TM, die folgendes tut: x steht auf Band 1. Erzeuge auf einer zweiten Spur unter x systematisch jede der 2|x| 0-1-Folgen der Länge |x|. Man benutzt die 1-en als Trennsymbole und erhält so eine Einteilung von x in Teilworte: x = x1 . . . xk . 60 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 61 Struktur- und Abschlusseigenschaften Für jede Einteilung lasse M auf jedem der Teilworte ablaufen. Satz (1.4.2) Sobald einmal alle diese Berechnungen akzeptiert haben, akzeptiert M . Wenn L, L1, L2 ⊆ Σ∗ rekursiv aufzählbare Sprachen sind, dann gilt: Wenn M für keine der 2|x| Aufteilungen akzeptiert hat, dann verwirft M . (a) L1 ∩ L2 ist rekursiv aufzählbar. (b) L1 ∪ L2 ist rekursiv aufzählbar. (c) L1L2 ist rekursiv aufzählbar. (d) L∗ ist rekursiv aufzählbar. Beweis: Jeweils Konstruktion einer neuen TM oder NTM aus gegebenen TMn. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 62 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 63 Zu (b): Paralleles Laufenlassen zweier Turingmaschinen Struktur- und Abschlusseigenschaften (hier: auf demselben Input) ... Satz (1.4.4) B B B e i n g a b e B B B Für jede Sprache L ⊆ Σ∗ gilt: ... L ist rekursiv ⇔ L und L sind rekursiv aufzählbar. ... B e i n g a b e B B B B B M1 AKZ Beweis: ⇒“: leicht. ” ⇐“: Gegeben: TM M1 für L und M2 für L. ” Neue 2-Band-TM M : Tut auf Eingabe x folgendes: ... M2 Lasse M1 und M2 Flagregister parallel Zu (c) und (d): Benutze NTM. (Auch für (b) verwendbar.) FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 auf Eingabe x laufen. 64 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 65 Bezeichnung rekursiv aufzählbar“ ” Definition 1.4.5 Sobald M1 hält und akzeptiert, hält und akzeptiert M . Sobald M2 hält und akzeptiert, hält und verwirft M . Eine Mehrband-TM N heißt ein Aufzähler für L ⊆ Σ∗, falls N auf Eingabe ε auf einem besonderen Ausgabeband (Kopf kann sich nur nach rechts bewegen, jede Zelle nur 1× beschreiben) eine Zeichenfolge Genau eines der beiden Ereignisse tritt ein! Und: x ∈ L ⇔ M akzeptiert x. #x1#x2#x3# · · · , x1, x2, x3 . . . ∈ Σ∗, # ∈ Σ, schreibt, wobei L = {x1, x2, x3, . . .} ist. Achtung: Wiederholungen sind nicht verboten. Wenn |L| = ∞, hält N nicht an. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 66 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 67 Bezeichnung rekursiv aufzählbar“ ” Beweis des Satzes: 2 Konstruktionen. ⇐“: Gegeben: Aufzähler N für L. ” Wir bauen eine 3-Band-TM M für L. Satz 1.4.6 L ist rekursiv aufzählbar ⇔ es gibt einen Aufzähler für L. M tut folgendes, auf Eingabe x (Band 1, nie verändert): . B B B a 1 a 2 a 3 ... M: an B B B ... Eingabe x für M : N # x # x # x # 1 2 3 Bänder von N a r b e i t s b a n d + v o n + N FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 68 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 69 ⇒“: (Achtung: Abweichung vom Skript) ” Gegeben: TM M = (Q, Σ, Γ, B, q0, F, δ) mit L = LM . Wiederhole: 1. Lasse N (weiter)laufen, bis ein # geschrieben wurde. Z = Q × Γ × {L, R, N }: Menge aller Züge von M . 2. Unterbreche N . Aufzähler N hat 3 Arbeitsbänder und ein Ausgabeband. 3. Das letzte Wort links vom # wird mit x verglichen. N arbeitet wie folgt, auf leerem Input. 4. Bei Übereinstimmung: halte und akzeptiere. 5. Sonst: Gehe zu 1. Klar: x ∈ L ⇔ x wird von N geschrieben ⇔ TM M akzeptiert x. D.h.: L = LM . FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 70 FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 71 N erzeugt auf Band 3 nacheinander jedes Wort x#z1 . . . zr in Σ∗{#}Z ∗. (Benutze Lemma 1.3.10.) Man kontrolliert leicht nach: Jede akzeptierende Berechnung von M auf einem x wird unendlich oft erzeugt. Wiederhole folgendes: Jedes x ∈ LM = L wird unendlich oft auf das Ausgabeband geschrieben. (∗) Erzeuge auf Band 3 das nächste Wort x#z1 . . . zr . Kopiere x# von Band 3 auf Band 1 und x auf Band 2. Rechne auf Band 2 wie M , führe dabei im i-ten Schritt Zug zi aus, falls dies mit δ konsistent ist. Falls diese Rechnung nach ≤ r Schritten zu einer akzeptierenden Haltekonfiguration von M führt: Kopiere x# von Band 1 auf das Ausgabeband. Modifikation: Man schreibt nur dann x#, wenn die Zugfolge z1 . . . zr von M nach genau r Schritten akzeptierend hält. Dadurch wird erreicht, dass jedes Wort von L nur ein einziges Mal ausgegeben wird. Gehe zu (∗). FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 72 Kanonische Aufzählung FG Komplexitätstheorie und Effiziente Algorithmen L ⊆ Σ∗ ist rekursiv ε, 0, 1, 2, 00, 01, 02, 10, 11, 12, 20, 21, 22, 000, 001, 002, 010, 011, 012, 020, 021, 022, 100, 101, . . . ⇔ es gibt einen Aufzähler N für L, der die Elemente von L in kanonischer Reihenfolge ausgibt. ∗ Kanonische Anordnung“ von Σ , für Σ = {0, 1, . . . , b − 1}: ” x <kan y :⇔ |x| < |y| oder (|x| = |y| ∧ (x)b < (y)b) sortieren, bei FG Komplexitätstheorie und Effiziente Algorithmen Längengleichheit BuK – 13.11.2009 73 Satz (Skript: nach Bem. 1.4.8) Beispiel: Σ = {0, 1, 2} (erst nach Länge lexikographisch) BuK – 13.11.2009 74 Beweis: 1. Fall: L ist endlich. Dann ist L rekursiv und eine TM kann die Elemente von L in kanonischer Reihenfolge aufschreiben. (Speichere alle x ∈ L in der Steuereinheit.) 2. Fall: L ist unendlich. Übung! FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 75 Bis nächste Woche • Folien nacharbeiten! • Skript S. 85–90: Simulation RAM auf TM. • Skript S. 55–66: NTMn. • Skript S. 74–79, 82: Abschlusseigenschaften, Bezeichnung rekursiv aufzählbar“. ” • Übungsaufgaben drucken und vorbereiten. FG Komplexitätstheorie und Effiziente Algorithmen BuK – 13.11.2009 76