Handout - Institut für Theoretische Informatik - Technische ...
Handout - Institut für Theoretische Informatik - Technische ...
Handout - Institut für Theoretische Informatik - Technische ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Theoretische</strong> <strong>Informatik</strong> 2<br />
Jürgen Koslowski<br />
<strong>Institut</strong> <strong>für</strong> <strong>Theoretische</strong> <strong>Informatik</strong><br />
<strong>Technische</strong> Universität Braunschweig<br />
SS 2012<br />
http://www.iti.cs.tu-bs.de/˜koslowj/Theo1<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 1 / 215
Übersicht: Turingmaschinen I<br />
1 Hintergrund und Motivation<br />
Ziele der Vorlesungen “<strong>Theoretische</strong> <strong>Informatik</strong> 2”<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 2 / 215
Übersicht: Turingmaschinen I<br />
2 3. Turingmaschinen<br />
3.0 Vorüberlegung<br />
3.0.0 Turingmaschinen formal<br />
3.0.1 Darstellung von Turingmaschinen<br />
3.1 Entscheidbare Sprachen/Probleme<br />
3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
3.3 Abschlußeigenschaften (semi-)entscheidbarer Sprachen<br />
3.4 Turing-berechenbare partielle Funktionen<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 3 / 215
Übersicht: Church-Turing These I<br />
3 4. Church-Turing-These<br />
4.0 Vorbemerkungen<br />
4.1 RAM<br />
4.1.0 Befehlssatz einer RAM<br />
4.1.2 Simulation einer TM durch eine RAM<br />
4.1.2 RAM-Berechenbarkeit<br />
4.2 Rekursive Funktionen<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 4 / 215
Übersicht: Unentscheidbare Probleme I<br />
4 5. Unentscheidbare Probleme<br />
5.0 Problemstellung<br />
5.1 Universelle Turingmaschine<br />
5.2 Das Halteproblem<br />
5.3 Weitere unentscheidbare Probleme<br />
5.3.0 Das Akzeptanzproblem<br />
5.3.1 Akzeptanz des leeren Worts<br />
5.3.2 Terminierung eines Algorithmus<br />
5.4 Satz von Rice<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 5 / 215
Übersicht: Komplexitätstheorie I<br />
5 6. Komplexität von Algorithmen<br />
6.0 Übersicht<br />
6.0.1 Wiederholung: Groß-O-Notation<br />
6.1 Beispiele effizienter Algorithmen<br />
6.2 Die Komplexitätsklassen P und NP<br />
6.3 Die Klasse FP von Berechnungsproblemen<br />
6.4 FP -Reduzierbarkeit<br />
6.4.1 2-Sat ∈ P<br />
6.5 Robustheit der Klassen P und N P<br />
6.6 Einige Probleme aus NP<br />
6.7 NP -Vollständigkeit und Cooke’scher Satz<br />
6.8 Weitere NP -vollständige Probleme<br />
6.9 Die Klasse coNP<br />
6.10 Komplexität von Optimierungsproblemen<br />
6.11 Approximation von Optimierungsproblemen<br />
6.12 Raumkomplexität<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 6 / 215
Hintergrund und Motivation Ziele der Vorlesungen “<strong>Theoretische</strong> <strong>Informatik</strong> 2”<br />
In Fortsetzung der VL “<strong>Theoretische</strong> <strong>Informatik</strong> 1” werden zunächst<br />
Turingmaschinen als weiteres Maschinenmodell eingeführt, dessen<br />
Fähigkeiten über die der Kellerautomaten hinausgehen. Es wird sich als<br />
das mächtigste (klassische) Maschinenmodell erweisen, ebenso mächtig<br />
wie alle heute gebräuchlichen Computer. (Um weitergehende Fähigkeiten<br />
zu realisieren, braucht man einen “Quantencomputer”.)<br />
Die Klasse der von TM’n akzeptierten semi-entscheidbaren Sprachen hat<br />
die kanonische Unterklasse der entscheidbaren Sprachen; diese werden von<br />
TM’n akzeptiert, die bei jeder Eingabe halten. Das wirft die Frage der<br />
Entscheidbarkeit bzw. Nichtentscheidbarkeit formaler Sprachen auf. Hier<br />
lernen wir schon das neue Verfahren der Reduktion von Problemen bzw.<br />
Sprachen kennen.<br />
TM’n lassen sich auch zur Lösung von Berechnungsproblemen (kurz<br />
B-Problemen) verwenden. Das liefert eine Theorie der “Turingberechenbaren<br />
(partiellen) Funktionen” der Form N p f<br />
N, p ∈ N .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 7 / 215
Hintergrund und Motivation Ziele der Vorlesungen “<strong>Theoretische</strong> <strong>Informatik</strong> 2”<br />
Alternativ kann man ausgehend von einfachen Grundfunktionen N p N<br />
mittels simpler Konstruktionsverfahren neue partielle Funktionen N p N<br />
generieren. Das liefert erst die Klasse der primitiv rekursiven Funktionen,<br />
und anschließend die Klasse der µ-rekursiven partiellen Funktionen.<br />
Letztere stimmt mit der obigen Klasse der Turing-brechenbaren partiellen<br />
Funktionen überein.<br />
In der Komplexitätstheorie geht es darum, wie effizient E-Probleme gelöst<br />
werden können. Das wesentliche Kriterium besteht darin, ob bei<br />
Verwendung von dTM’n bzw. nTMn immer eine Laufzeit realisiert werden<br />
kann, die polynomial in der Größe der Eingabe ist.<br />
B-Probleme, deren zugrundeliegendes E-Problem nicht effizient lösbar ist,<br />
sind selbst nicht effizient lösbar. In solchen Fällen kann man versuchen,<br />
möglichst gute Lösungen wenigstens zu approximieren. Das führt zum<br />
Begriff des Optimierungsproblems.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 8 / 215
3. Turingmaschinen<br />
Kapitel 3<br />
Turingmaschinen<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 9 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
3.0 Vorüberlegung<br />
Idee: der eingeschränkt zugängliche Keller eines Kellerautomaten wird<br />
durch ein frei zugängliches, beidseitig potentiell unendliches Turingband<br />
ersetzt, auf dessen Zellen Symbole aus einem Bandalphabet mit Hilfe eines<br />
Schreib-Lesekopfes geschrieben werden können:<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 10 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Der Schreib-Lesekopf kann verschiedene Zustände einnehmen; dabei<br />
werden wie gewöhnlich Anfangs- und Endzustände unterschieden.<br />
In jedem Schritt darf der Schreib-Lesekopf den Zustand ändern sowie<br />
ein Symbol schreiben und/oder (je nach Vereinbarung) sich um<br />
maximal ein Feld zur Seite bewegen.<br />
Zu jedem Zeitpunkt darf das Band nur endlich viele relevante<br />
Symbole enthalten; alle übrigen Felder müssen “leer” sein. Um dies<br />
anzuzeigen, wird ein spezielles Bandsymbol # eingeführt.<br />
Beim Berechnungsstart soll die Eingabe w ∈ Σ ∗ zusammenhängend<br />
auf dem Band stehen! Dies ist scheinbar ein konzeptioneller<br />
Unterschied zu Kellerautomaten und erst recht zu endlichen<br />
Automaten, bei denen die Eingabe immer extern vorlag und in nicht<br />
näher spezifizierter Weise von links nach rechts gelesen wurde<br />
(Stichwort: Online Algorithmus ).<br />
Bei Wikipedia findet man folgende Visualisierungen von Turingmaschinen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 11 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
3.0.0 Turingmaschinen formal<br />
Wir werden verschiedene Varianten von Turingmaschinen kennenlernen, die<br />
sich letztendlich alle gegenseitig simulieren können. Zunächst beginnen wir<br />
mit zwei Basismodellen. Diese unterscheiden sich darin, ob der Kopf pro<br />
Schritt nur zu einer Aktion (Schreiben bzw. Bewegen), oder zu beiden<br />
Aktionen fähig ist, sind ansonsten aber äquivalent.<br />
Bei den Varianten kann man die Form des Bandes ändern (einseitig<br />
unendlich statt beidseitig unendlich), die Anzahl der Spuren auf dem<br />
Band, oder gar die Anzahl der Bänder und Köpfe. Insbesondere<br />
Turingmaschinen mit mehreren Bändern und Köpfen erlauben eine<br />
einfachere Umsetzung konkreter Algorithmen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 12 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Definition (TM, die entweder schreiben, oder sich bewegen kann)<br />
Eine Turing-Maschine mit erweitertem Bandalphabet (TMeB)<br />
M = 〈Q, B, Σ, δ, q 0 , q F 〉 besteht aus<br />
einer endlichen Menge Q von (äußeren) Zuständen;<br />
einem endlichen Bandalphabet B mit ausgezeichnetem Element #<br />
(dem Blankzeichen),<br />
einem endlichen Eingabealphabet Σ mit Σ ⊆ B − {#} ;<br />
einer Relation Q × B δ Q × (B + {L, R});<br />
je einem Anfangs- und Endzustand q 0 ∈ Q bzw. q F ∈ Q .<br />
Eine Standard-TM á la TU-BS (STM) erfüllt B = Σ + {#} .<br />
M heißt deterministisch (dTM), falls δ eine partielle Funktion ist.<br />
Interpretation von δ : abhängig vom aktuellen Zustand und Bandsymbol<br />
ändert sich der Zustand, und das Bandsymbol kann entweder<br />
überschrieben werden, oder der Kopf wandert auf ein Nachbarfeld.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 13 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Von Beginn an lassen wir neben den Symbolen aus Σ und dem<br />
Blankzeichen # weitere Hilfssymbole im Bandalphabet zu. Dies können<br />
z.B. Randbegrenzer, Trennsymbole oder spezielle Löschsymbole sein.<br />
Definition (TM, die gleichzeitig schreiben und sich bewegen kann)<br />
M = 〈Q, B, Σ, δ, q 0 , q F 〉 wie oben, mit dem Unterschied, daß die Relation<br />
Q × B δ Q × (B + {L, R}) ersetzt wird durch<br />
Q × B δ Q × B × {N, L, R}<br />
In diesem Fall wird pro Schritt zwingend ein Bandsymbol geschrieben (dies<br />
schließt die Möglichkeit ein, das aktuelle Bandsymbol zu reproduzieren),<br />
und dann ein Schritt auf ein Nachbarfeld ausgeführt ( L bzw. R ), oder<br />
auf dem aktuellen Feld verharrt ( N ).<br />
Offenbar kann man jeden Schritt einer solchen Maschine mit höchstens<br />
zwei Schritten einer Maschine simulieren, die entweder schreiben oder sich<br />
bewegen kann. Umgekehrt ist die Simulation noch einfacher (vergl. HA).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 14 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Im Gegensatz zu Kellerautomaten fällt die fehlende Abhängigkeit der<br />
Übergangsrelation von den Elementen des Alphabets Σ auf. In der Tat<br />
dient Σ einzig zur Bestimmung der erlaubten Eingaben.<br />
Bei der informellen Betrachtung hatten wir gefordert, die Eingabe w ∈ Σ ∗<br />
solle vor Beginn der Berechnung auf dem Band stehen. Die Analogie zu<br />
Kellerautomaten kann wie folgt bewahrt werden: die Übergangsrelationen<br />
δ(a) , a ∈ Σ , dienen allein dazu, die externe(!) Eingabe auf das Band zu<br />
schreiben. Alle eigentlichen Berechnungsschritte erfolgen dann spontan,<br />
zweckmäßigerweise vom rechten(!) Rand der Eingabe ausgehend (aber<br />
andere Konventionen sind genauso verbreitet).<br />
Strenggenommen kann man auf die Forderung Σ ⊆ B − {#} und damit<br />
die “Internalisierbarkeit” der Eingaben verzichten (auch eine Konvention),<br />
aber da<strong>für</strong> nicht-triviale Übergangsrelationen δ(a) , a ∈ Σ , zulassen.<br />
Diesen Gedanken werden wir aber hier nicht weiterverfolgen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 15 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Eine TM-Konfiguration soll den aktuellen Zustand, den nicht- trivialen<br />
Bandinhalt und die Position des Kopfes bestimmen. Die Konvention,<br />
Eingaben zunächst zu internalisieren, erübrigt die Buchführung über den<br />
noch zu bearbeitenden Teil der Eingabe.<br />
Definition (vorläufig)<br />
Unter einer Konfiguration einer TM versteht man ein Paar<br />
〈q, ω〉 ∈ Q × B + , wobei genau ein Symbol des nichttrivialen Bandinhalts<br />
ω durch Unterstreichung markiert ist, was die Kopfposition festlegt.<br />
ω soll den Bereich des Bandes minimal überdecken, der die Kopfposition<br />
und alle von # verschiedenen Symbole umfaßt. Daher sollten keine<br />
führenden oder folgenden Blankzeichen # auftreten, sofern es sich nicht<br />
um den Inhalt der Kopfposition handelt.<br />
Etwas genauer: ω sollte ein Element sein von<br />
((B − {#}) × B ∗ + {ε}) × B × (B ∗ × (B − {#}) + {ε}))<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 16 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Definition (Fortsetzung)<br />
Konfigurationen der Form 〈q 0 , s 0 . . . s n−2 s n−1 〉 mit n > 0 bzw. 〈q 0 , #〉<br />
heißen Initialkonfigurationen. Ist <strong>für</strong> 〈q, ω l sω r 〉 die Menge 〈q, s〉δ leer,<br />
sprechen wir von einer Haltekonfiguration. Im Fall von 〈q, s〉δ ≠ ∅ können<br />
sich bei einer Folgekonfiguration ( ⊢ ) Zustand, Inhalt des aktuellen Feldes<br />
und neue Kopfposition gemäß den Elementen von 〈q, s〉δ ändern.<br />
Unter einer Berechnung mit Eingabe w ∈ Σ ∗ versteht man eine endliche<br />
oder unendliche Konfigurationenfolge K i ⊢ K i+1 , wobei K 0 eine<br />
Initialkonfiguration mit Eingabe w , und im endlichen Fall die letzte<br />
Konfiguration eine Haltekonfiguration ist.<br />
Eine Berechnung akzeptiert ihre Eingabe genau dann, wenn sie in einer<br />
Haltekonfiguration mit Zustand q F endet.<br />
Die spezielle Form der Initialkonfiguration resultiert aus einem Linksschritt<br />
nach Übertragung der Eingabe auf des Band von links nach rechts.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 17 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
3.0.1 Darstellung von Turingmaschinen<br />
Wir entwickeln die graphische Darstellung von Kellerautomaten fort. Falls<br />
b ∈ B so schreiben wir<br />
q<br />
b/ϕ<br />
p<br />
anstelle von<br />
〈〈q, b〉, 〈p, ϕ〉〉 ∈ δ<br />
wobei ϕ ∈ B + {L, R} oder ϕ ∈ B × {N, L, R} gilt. Der (äußere)<br />
Anfangs- und Endzustand wird markiert wie zuvor.<br />
Die Einschränkungen bzgl. der Komponierbarkeit solcher Übergänge bei<br />
Kellerautomaten gilt sinngemäß auch <strong>für</strong> Turingmaschinen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 18 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Beispiel<br />
L = { a n b n c n : n ∈ N } mittels einer Maschine, deren Kopf entweder<br />
schreibt, oder sich bewegt. Setze B = {a, b, c, x, #} , wobei x als<br />
spezielles Löschsymbol dient.<br />
x/L<br />
x, c/L<br />
start<br />
q 0<br />
c/x<br />
q c<br />
#/#<br />
x, b, c/R<br />
#/L<br />
q a<br />
q F<br />
a/x<br />
q b<br />
b/x<br />
x, b/L<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 19 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Beispiel<br />
L = { a n b n c n : n ∈ N } mittels einer Maschine, deren Kopf gleichzeitig<br />
schreibt und sich bewegt; B wie oben.<br />
x/〈#, L〉<br />
c/〈c, L〉<br />
start<br />
q 0<br />
c/〈#, L〉<br />
q c<br />
#/〈#, N〉<br />
#/〈#, L〉 q F<br />
{b, x, c} ∋ z/〈z, R〉 q a<br />
a/〈x, R〉<br />
q b<br />
b/〈x, L〉<br />
b/〈b, L〉<br />
(Wird die Eingabe akzeptiert, ist das Band hinterher leer.)<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 20 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Definition<br />
Sprachen, die von einer STM akzeptiert werden, heißen semi-entscheidbar<br />
Satz<br />
Sprachen, die von einer TMeB akzeptiert werden, sind semi-entscheidbar.<br />
Beweis. [falls Σ echte Teilmenge von B − {#} ist]<br />
Ersetzt man das Alphabet Σ einer TMeB M = 〈Q, B, Σ, δ, q 0 , q F 〉 durch<br />
B − {#} , so erhält man eine STM M ′ , die Eingaben aus (B − {#}) ∗<br />
verarbeiten kann. Zur Einschränkung auf Eingaben aus Σ ∗ schalten wir<br />
einen Präprozessor M Σ := 〈{r 0 , r 1 , r F = q 0 }, B, B − {#}, ρ, r 0 , r F 〉 mit<br />
x/L<br />
start<br />
r 0<br />
#/R<br />
x/R<br />
r 1<br />
#/L<br />
r F<br />
wobei x ∈ Σ<br />
davor. Dieser akzeptiert Σ ∗ ⊆ (B − {#}) ∗ und reproduziert <strong>für</strong> Wörter<br />
aus Σ ∗ die Initialkonfiguration. Natürlich muß {r 1 , r 2 } ∩ Q = ∅ gelten.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 21 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Satz<br />
Sprachen, die von TMeB’n akzeptiert werden, deren Kopf schreiben und<br />
sich bewegen kann, sind semi-entscheidbar (vergl. HA).<br />
Andere Varianten von TM’n sind gleich mächtig zu STM’n:<br />
Definition<br />
Eine Mehr-Spur Turingmaschine verwendet ein Bandalphabet der Form<br />
B n mit Σ ⊆ B − {#} . Eingaben stehen auf Spur 0.<br />
Satz<br />
Von Mehr-Spur TM’n akzeptierte Sprachen sind semi-entscheidbar.<br />
Beweis.<br />
Mit B ′ := B n , # ′ := 〈 # : i < n 〉 und Σ ′ := Σ × {#} n−1 ∼ = Σ erhält<br />
man eine konventionelle TM.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 22 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Definition<br />
Für eine n-Band TM M = 〈Q, B, n, Σ, δ, q 0 , q F 〉 hat δ die Form<br />
Q × B n δ Q ×(B+{L, R}) n bzw. Q × B n δ Q ×(B×{L, R, N}) n<br />
Der Konfigurationsbegriff ist entsprechend zu erweitern. Berechnungen<br />
starten mit der Eingabe auf Band 0 . Die graphische Darstellung verwendet<br />
Label der Form β/A 0 , A 1 , . . . , A n−1 mit β ∈ B n und n Aktionen A i .<br />
Satz<br />
Von n-Band TM’n akzeptierte Sprachen sind semi-entscheidbar.<br />
Beweis (Idee)<br />
Simulation durch 2n -Spur TM, bei deren geraden Spuren den Bändern<br />
entsprechen, und auf deren ungeraden Spuren über die jeweiligen<br />
Kopfpositionen buchgeführt wird.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 23 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Beispiel<br />
Die Sprache L = { w ∈ {0, 1} ∗ : |w| 0 = |w| 2 1 } ist semi-entscheidbar:<br />
Idee: Wir verwenden eine 3-Band dSTM, bei der die Nullen und Einsen<br />
der Eingabe auf B 0 zunächst auf die Bänder B 1 bzw. B 2 verschoben<br />
werden. Dort finden alle weiteren Berechnungen statt. Wegen<br />
(n − 1) 2 = n 2 − 2n + 1 = n 2 − 2(n − 1) − 1<br />
können wir dann ggf. in mehreren Durchläufen auf diesen Bändern<br />
zunächst je eine Null und eine Eins, und dann <strong>für</strong> jede verbliebene Eins<br />
weitere zwei Nullen löschen. Dabei werden die Einsen auf B 2 in beiden<br />
Richtungen, die Nullen auf B 1 aber nur in einer Richtung durchlaufen.<br />
Gelingt die Löschung aller Symbole, wird die Eingabe akzeptiert.<br />
Bei der umseitigen Realisierung sind Aktionen, die weder Kopfposition<br />
noch Bandinhalt verändern, durch “ − ” abgekürzt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 24 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Beispiel (Fortsetzung)<br />
start q 0<br />
〈0, #, #〉/〈#, L〉, 〈0, L〉, 〈#, N〉<br />
〈1, #, #〉/〈#, L〉, 〈#, N〉, 〈1, L〉<br />
q 2<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈#, R〉<br />
〈#, #, #〉/−, 〈#, R〉, 〈#, R〉<br />
〈#, 0, #〉/−, 〈#, R〉, 〈#, R〉<br />
q 1<br />
q 6<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈1, R〉<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈1, N〉<br />
〈#, #, #〉/−, −, −<br />
〈#, #, #〉/−, −, −<br />
q F<br />
〈#, #, #〉/−, −, −<br />
〈#, #, #〉/−, −, −<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈1, N〉<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈1, L〉<br />
q 3<br />
〈#, 0, #〉/−, 〈#, R〉, 〈#, L〉<br />
q 4<br />
〈#, 0, 1〉/−, 〈#, R〉, 〈#, L〉<br />
q 5<br />
In Zukunft werden wir nicht alle TM’n so detailliert beschreiben können,<br />
sondern uns meist auf informelle Spezifikationen beschränken.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 25 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Satz<br />
Jede semi-entscheidbare Sprache wird von einer dTM akzeptiert.<br />
Beweis<br />
Betrachte eine 1-Band TM M = 〈Q, B, Σ, δ, q 0 , q F 〉 mit L(M) = L . Für<br />
jedes Paar 〈q, b〉 ∈ Q × B bezeichne ρ〈q, b〉 die Anzahl der verfügbaren<br />
Übergänge; diese werden von 0 bis ρ〈q, b〉 − 1 durchnummeriert. Setze<br />
r := max{ ρ〈q, b〉 : 〈q, b〉 ∈ Q × B } und Z r := { n ∈ N : n < r }<br />
Falls r > 1 ist M nicht deterministisch und wir konstruieren eine<br />
deterministische 4-Band Maschine M ′ mit L(M ′ ) = L :<br />
B 0 enthält die Eingabe w ∈ Σ ∗ ;<br />
auf B 1 werden systematisch die Zahlen k ∈ N erzeugt (unär);<br />
auf B 2 werden systematisch die k -Tupel ϕ ∈ (Z r ) k erzeugt;<br />
Band B 3 dient zur Simulation des durch ϕ spezifizierten<br />
Anfangsstücks einer M -Berechung der Länge ≤ k mit Eingabe w .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 26 / 215
3. Turingmaschinen 3.0 Vorüberlegung<br />
Beweis (Fortsetzung)<br />
Genauer: die Initialkonfiguration mit Eingabe w generiert einen Graphen<br />
von Folgekonfigurationen, bei denen jeder Knoten maximal r Nachfolger<br />
hat. Die k -Tupel ϕ spezifizieren darin potentielle Wege der Länge k :<br />
⊲ sofern Schritt i von 〈q, . . . b . . .〉 ∈ Q × B ∗ ausgeht, wird Übergang<br />
Nummer ϕ i mod ρ〈q, b〉 der verfügbaren Übergänge ausgeführt,<br />
sofern ρ(q, b) ≠ 0 ; sonst ist eine Haltekonfiguration erreicht.<br />
Per Zustand wird darüber buchgeführt, ob<br />
ein Weg eine akzeptierenden Haltekonfiguration erreicht, dann wird<br />
w von M ′ akzeptiert; andernfalls wird ϕ auf B 2 und ggf. k auf<br />
B 1 aktualisiert und fortgefahren;<br />
alle potentiellen Wege der Länge k in nicht akzeptierenden<br />
Haltekonfigurationen enden, dann hält M ′ ohne zu akzeptieren;<br />
andernfalls wird k auf B 1 erhöht und fortgefahren.<br />
Beachte: Falls M immer hält, hat auch M ′ diese Eigenschaft.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 27 / 215
3. Turingmaschinen 3.1 Entscheidbare Sprachen/Probleme<br />
3.1 Entscheidbare Sprachen/Probleme<br />
Die Terminologie “semi-entscheidbar” deutet die Existenz<br />
“entscheidbarer” Sprachen an. Dabei soll das “Wortproblem” entschieden<br />
werden, ob die Eingabe w ∈ Σ ∗ zur Sprache L ⊆ Σ ∗ gehört oder nicht.<br />
Definition<br />
Eine Sprache heißt entscheidbar, wenn sie von einer TM akzeptiert wird,<br />
die immer hält. (Man kann sich auf dTM’n beschränken.)<br />
Entscheidbare Sprachen sind semi-entscheidbar, aber die umgekehrte<br />
Inklusion gilt nicht (Beispiel später).<br />
Alternativ heißen semi-entscheidbare/entscheidbare Sprachen in der<br />
Literatur auch “rekursiv aufzählbar”/“rekursiv”. Hintergrund: rekursiv<br />
aufzählbare Sprachen können von einer dTM “aufgelistet” werden, wobei<br />
Wiederholungen erlaubt sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 28 / 215
3. Turingmaschinen 3.1 Entscheidbare Sprachen/Probleme<br />
Definition<br />
Die von einer dTM T aufgezählte Sprache G(T ) besteht aus allen<br />
Wörtern w ∈ Σ ∗ , die in T -Konfigurationen der Form 〈q F , ω l bw#ω r 〉<br />
mit b ∈ B vorkommen, wenn T aus der Konfiguration 〈q 0 , #〉 startet.<br />
Satz<br />
Jede Sprache der Form G(T ) ist semi-entscheidbar.<br />
Beweis.<br />
M sei eine 2-Band Maschine, die auf T auf B 1 simuliert, und nach<br />
jedem Erreichen einer Konfiguration mit dem Endzustand von T das<br />
Σ-Wort rechts des T -Kopfes mit der M -Eingabe auf B 0 vergleicht.<br />
Satz<br />
Jede semi-entscheidbare Sprache ist von der Form G(T ) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 29 / 215
3. Turingmaschinen 3.1 Entscheidbare Sprachen/Probleme<br />
Beweis.<br />
Ist L ⊆ Σ ∗ semi-entscheidbar, wählen wir eine 1-Band dTM M mit<br />
L = L(M) . Zur Aufzählung von L konstruieren wir eine 4-Band dTM T :<br />
B 0<br />
dient zur Aufzählung von L (s.u.);<br />
auf B 1 werden systematisch die Zahlen k ∈ N erzeugt (unär);<br />
auf B 2 werden systematisch die Wörter der Länge ≤ k erzeugt;<br />
auf B 3 werden bis zu k Schritte der M -Berechnung des Worts w<br />
auf B 2 simuliert.<br />
− Im Fall der Akzeptanz wird w nach B 0 kopiert, der Kopf links davon<br />
positioniert und der Zustand q F angenommen. Anschließend wird B 0<br />
gelöscht.<br />
− Danach wird das nächste Wort auf B 2 erzeugt.<br />
− Nach Bearbeitung aller Wörter der Länge ≤ k wird k auf B 1 erhöht.<br />
Per Zustand kann darüber buchgeführt werden, ob alle Wörter der Länge<br />
≤ k zu nicht akzeptierenden Haltekonfigurationen führen. Weil M<br />
deterministisch ist, muß L(M) dann endlich sein und T kann halten.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 30 / 215
3. Turingmaschinen 3.1 Entscheidbare Sprachen/Probleme<br />
Satz<br />
Eine Sprache L ⊆ Σ ∗ ist genau dann entscheidbar, wenn L und<br />
¯L := Σ ∗ − L semi-entscheidbar sind.<br />
Beweis.<br />
Ist L entscheidbar, so existiert eine TM M mit L(M) = L , die immer<br />
hält, also ist L semi-entscheidbar. Mit obiger Konstruktion erhalten wir<br />
eine dTM M ′ mit L = L(M ′ ) , die immer hält. Einführen eines neuen<br />
Endzustands q ∗ und neuer Übergänge 〈q, b〉 ↦→ 〈q ∗ , b〉 bzw. 〈q ∗ , 〈b, N〉〉<br />
sofern 〈q, b〉δ ′ = ∅ , liefert dann eine dTM M ′ mit L(M ′ ) = ¯L .<br />
Umgekehrt lassen wir dTM’n M und ¯M mit L(M) = L und L( ¯M) = ¯L<br />
mittels Interleaving dieselbe Eingabe bearbeiten. Die resultierende<br />
Maschine K hält genau dann, wenn eine der Teilmaschinen hält, und sie<br />
möge genau dann akzeptieren, wenn L hält und akzeptiert, oder wenn ¯L<br />
hält und nicht akzeptiert. Dann hält K immer und erfüllt L(K) = L .<br />
In beiden Fällen war die Verwendung von dTM’n wesentlich.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 31 / 215
3. Turingmaschinen 3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
Nicht alle Sprachen sind semi-entscheidbar: im Vorgriff auf Kapitel 5<br />
stellen wir fest, daß jede TM M über Σ = {0, 1} sich durch ein<br />
Binärwort c(M) codieren läßt. Damit ist die Menge der möglichen<br />
Turingmaschinen über {0, 1} abzählbar (vergl. Anhang zum Script <strong>für</strong><br />
TheoInf 1), also auch die Menge der semi-entscheidbaren Sprachen über<br />
{0, 1} . (Die Einschränkung auf das Alphabet {0, 1} ist unerheblich.)<br />
Andererseits ist die Potenzmenge P(Σ ∗ ) überabzählbar. Es muß also<br />
Sprachen über {0, 1} geben, die nicht semi-entscheidbar sind. Konkret<br />
gilt dies etwa <strong>für</strong><br />
L code<br />
:= { w ∈ {0, 1} ∗ : w = c(M) <strong>für</strong> eine TM M mit w /∈ L(M) }<br />
L code<br />
besteht also aus den Binärcodes aller TM’n, die ihr eigenes<br />
Codewort nicht akzeptieren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 32 / 215
3. Turingmaschinen 3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
Satz<br />
L code<br />
ist nicht semi-entscheidbar.<br />
Beweis.<br />
Wenn eine TM M mit L(M) = L code<br />
existiert, erfüllt w = c(M) die<br />
Bedingung w ∈ L(M) = L code<br />
gdw. w /∈ L(M) = L code<br />
, Widerspruch.<br />
Die Trennung der entscheidbaren von den semi-entscheidbaren Sprachen<br />
erfolgt in Kapitel 5 mit Hilfe der Sprache<br />
L halt<br />
:= { c(M)w : M TM, die bei Eingabe w hält }<br />
die semi-entscheidbar aber nicht entscheidbar ist (Halteproblem).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 33 / 215
3. Turingmaschinen 3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
Satz<br />
Jede kontextfreie Sprache ist entscheidbar.<br />
Beweis.<br />
Ein Kellerautomat kann durch eine 2-Band Turingmaschine simuliert<br />
werden: der Kopf auf B 0 fährt zum linken Rand der Eingabe und B 1<br />
dient zur Simulierung des Kellers, der sich von der aktuellen Kopfposition<br />
nach rechts erstrecken möge (vergl. HA). Damit ist jede kontextfreie<br />
Sprache semi-entscheidbar.<br />
Um die Entscheidbarkeit sicherzustellen, müssen wir mit einem Kellerautomaten<br />
beginnen, der immer hält. Dies ist sicher der Fall, wenn keine<br />
spontanen Übergänge auftreten. Und letzteres kann garantiert werden,<br />
wenn der Kellerautomat ausgehend von einer kontextfreien Grammatik in<br />
Greibach Normalform konstruiert wird, vergl. Skript zu TheoInf 1).<br />
Alternativ könnte man den CYK-Algorithmus per TM implementieren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 34 / 215
3. Turingmaschinen 3.2 Die Chomsky-Hierarchie formaler Sprachen<br />
Die betrachteten Klassen formaler Sprachen über Σ bilden eine echte<br />
Hierarchie; wir geben Trenn-Beispiele zu den echt kleineren Klassen an:<br />
Alle Sprachen, L code<br />
;<br />
die semi-entscheidbaren Sprachen, L halt<br />
, s.u.;<br />
die entscheidbaren Sprachen, { a n b n c n : n ∈ N } ;<br />
die kontextfreien Sprachen, { w sp(w) : w ∈ Σ ∗ } ;<br />
die deterministisch kontextfreien Sprachen; { a n b n : n ∈ N } ;<br />
die regulären Sprachen, {a 2n : n ∈ N } ;<br />
die endlichen Sprachen.<br />
Nicht betrachtet wurde die Klasse der kontext-sensitiven Sprachen, echt<br />
zwischen den Klassen der kontextfreien und der entscheidbaren Sprachen.<br />
Man spricht in diesem Zusammenhang auch von der Chomsky-Hierarchie.<br />
Sie wurde von Noam Chomsky Mitte der 1950’er Jahre entwickelt.<br />
Allerdings lag der Schwerpunkt damals auf linguistischen Fragestellungen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 35 / 215
3. Turingmaschinen 3.3 Abschlußeigenschaften (semi-)entscheidbarer Sprachen<br />
3.3 Abschlußeigenschaften (semi-)entscheidbarer Sprachen<br />
Satz<br />
Die Klasse der (semi-)entscheidbaren Sprachen ist abgeschlossen unter<br />
Vereinigung und Durchschnitt;<br />
Konkatenation und Iteration;<br />
Spiegelung und Shuffle;<br />
Residuierung bzgl. endlicher Sprachen.<br />
Darüberhinaus sind die entscheidbaren Sprachen unter Komplementbildung<br />
abgeschlossen, die semi-entscheidbaren Sprachen aber nicht.<br />
Beweis<br />
Vorbemerkung: Bei semi-entscheidbaren Sprachen erfordert die Simulation<br />
mehrerer dTM’n Interleaving. Diese Einschränkung entfällt bei der<br />
Verwendung nichtdeterministischer Maschinen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 36 / 215
3. Turingmaschinen 3.3 Abschlußeigenschaften (semi-)entscheidbarer Sprachen<br />
Beweis (Fortsetzung).<br />
Zu Vereinigung, Iteration, Shuffle und Residuierung vergl. HA.<br />
Durchschnitte handhabt man wie Vereinigungen, nur die Akzeptanz<br />
bedingung ist insoweit anzupassen, als beide Maschinen akzeptieren<br />
müssen.<br />
Im Falle der Konkatenation kann die Eingabe zufällig in zwei<br />
zusammenhängende Teile zerlegt werden, die dann als Eingabe <strong>für</strong> die zu<br />
simulierenden Maschinen dienen; dies liefert eine nTM.<br />
Für die Spiegelung verwendet man ein neues Band um die Eingabe zu<br />
spiegeln, bevor die Maschine <strong>für</strong> die ursprüngliche Sprache simuliert wird.<br />
Der Abschluß entscheidbarer Sprachen unter Komplementbildung folgt aus<br />
ihrer Charakterisierung mittels semi-entscheidbarer Sprachen. In Kapitel 5<br />
zeigen wir, daß das Komplement von L halt<br />
nicht semi-entscheidbar ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 37 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
3.4 Turing-berechenbare partielle Funktionen<br />
Wir wollen TM’n nun auch zur Berechnung partieller Funktionen<br />
Σ ∗ f<br />
Γ ∗ einsetzen. Dazu muß Σ, Γ ⊆ B − {#} gelten. Die<br />
Spezifikation eines Finalzustands q F ist hier verzichtbar.<br />
Zu vereinbaren bleibt, welcher Teil des Bandinhalts nach dem Halt der<br />
Maschine als Funktionswert interpretiert werden soll. Wir wollen da<strong>für</strong> das<br />
längste zusammenhängende Wort aus Γ ∗ verwenden, das links neben der<br />
finalen Kopfposition auf einem designierten Band auftritt. Das Feld des<br />
Kopfes gehört nicht dazu, aber nach einem Linksschritt könnte die<br />
Ausgabe ggf. als Eingabe <strong>für</strong> eine weitere Maschine verwendet werden,<br />
sofern das restliche Band leer ist.<br />
Partielle Funktionen der Form (Σ ∗ ) n f (Γ ∗ ) k mit n > 1 oder k > 1<br />
erfordern Trennzeichen zwischen den Komponenten der Ein- bzw.<br />
Ausgabe. Auch wenn das Blankzeichen da<strong>für</strong> verwendet werden kann, wird<br />
dies nicht empfohlen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 38 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Beispiel ( f (n) = 2n : Wähle Σ = Γ = {|} = B − {#} .)<br />
Idee: 2-Band Maschine; Eingabe zweimal von B 0 auf B 1 kopieren.<br />
〈|, #〉/〈|, L〉, 〈|, R〉<br />
〈|, #〉/〈#, R〉, 〈|, R〉<br />
start<br />
q 0<br />
〈#, #〉/〈#, R〉, 〈#, N〉<br />
q F<br />
oder geschickter start r 0<br />
〈|, #〉/〈#, N〉, 〈|, R〉<br />
〈#, #〉/〈#, L〉, 〈|, R〉<br />
r1<br />
Beim aktuellen Bandinhalt 〈#, #〉 in Zustand q F bzw. r 0 hält die<br />
jeweilige Maschine mit dem Ergebnis auf B 1 und B 0 leer.<br />
Beispiel ( f (w) = |w| : Wähle Γ = {|} disjunkt zu Σ .)<br />
Idee: Eingabe mit Symbolen | überschreiben; rechten Rand suchen.<br />
a/〈|, L〉<br />
|/〈|, R〉<br />
start<br />
q 0<br />
#/〈#, R〉<br />
q F<br />
mit a ∈ Σ<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 39 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Beispiel ( f (n, m) = n + m : Wähle Σ = Γ = {|} , B = {|, @, #} .)<br />
Idee: 2-Band Maschine; Eingabe auf B 1 kopieren, dabei das Trennsymbol<br />
@ überspringen.<br />
〈|, #〉/〈#, L〉, 〈|, R〉<br />
〈|, #〉/〈#, L〉, 〈|, R〉<br />
start<br />
q 0<br />
〈@, #〉/〈#, L〉, 〈#, N〉<br />
q F<br />
Idee: 1-Band Maschine; Trennsymbol @ mit erstem | von rechts<br />
überschreiben<br />
|/〈|, L〉<br />
|/〈|, R〉<br />
start q 0<br />
|/〈#, L〉 q1<br />
@/〈|, R〉<br />
q F<br />
@/〈#, N〉<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 40 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Beispiel ( f (n, m) = n · m : Wähle Σ = Γ = {|} , B = {|, #} .)<br />
Wir begnügen uns nun mit einer High-Level-Beschreibung:<br />
Idee: 3-Band Maschine; das zweite Argument der Eingabe | n #| m auf B 2<br />
verschieben; <strong>für</strong> jedes Symbol | auf B 2 das verbliebene Argument | n von<br />
B 0 nach B 1 kopieren, von links nach rechts.<br />
Bemerkung<br />
Die Erfahrungen mit Turing Maschinen und anderen Versuchen aus der<br />
ersten Hälfte des 20. Jahrhunderts, den Begriff der “durch einen<br />
(terminierenden) Algorithmus berechenbaren Funktion” formal zu fassen,<br />
führten zu der Vermutung, daß jede solche (totale) Funktion<br />
Turing-berechenbar sein muß. Diese nicht beweisbare Vermutung ist<br />
bekannt als Church-Turing These und wird in Kapitel 4 ausführlicher behandelt.<br />
Wie üblich stellt sich jetzt die Frage nach Funktionen, die nicht<br />
Turing-berechenbar sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 41 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Definition<br />
Die sog. Busy Beaver Funktion N β N bildet n ∈ N ab auf<br />
die größte Zahl β(n) nichtleerer Felder, die eine 1-Band dTM<br />
über {|} , deren Kopf schreiben und sich bewegen darf und die<br />
über n Nicht-Haltezustände und einen Haltezustand verfügt,<br />
ausgehend vom leeren Band auf diesem hinterlassen kann, wenn<br />
sie hält.<br />
Achtung: Nach dem Halt der Maschine dürfen zwischen den Strichen |<br />
Lücken auftreten. Damit kann sich die größte unär codierte Zahl k , die<br />
nach dem Halt auf dem Band steht, durchaus von β(n) unterscheiden.<br />
Beispiel ( β(0) = 0 und β(1) = 1 )<br />
#/〈|, N〉<br />
start q F , start q 0<br />
|/〈|, L〉<br />
q F<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 42 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Beispiel ( β(2) = 4 )<br />
〈q 0 , #〉 ⊢ 〈q 1 , | #〉<br />
#/〈|, R〉<br />
⊢ 〈q 0 , | | 〉<br />
start<br />
q 0<br />
#/〈|, L〉<br />
q1<br />
|/〈|, R〉<br />
q F<br />
⊢ 〈q 1 , # | | 〉<br />
⊢ 〈q 0 , # | | | 〉<br />
⊢ 〈q 1 , | | | | 〉<br />
|/〈|, L〉<br />
⊢ 〈q F , | | | | 〉<br />
Bei Wikipedia findet man diverses Hintergrundmaterial zum Thema Busy<br />
Beaver (dort heißt die Funktion Σ ), einschließlich einiger Schranken <strong>für</strong><br />
die Werte β(6) und β(10) . Weiterhin sei auf die Seite von Heiner Marxen<br />
verwiesen, der zeitnah über aktuelle Busy Beaver Rekorde buchführt.<br />
Es ist zu empfehlen, den Wert β(3) selbständig nachzurechnen, ohne<br />
obige Quellen zu konsultieren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 43 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Lemma<br />
Die busy beaver Funktion wächst streng monoton, d.h., β(n) < β(n + 1)<br />
<strong>für</strong> jedes n ∈ N .<br />
Beweis.<br />
Die dTM M mit Haltezustand q F möge β(n) realisieren. Füge einen<br />
neuen Haltezustand q G hinzu und die Übergänge<br />
|/〈|, L〉<br />
q F<br />
#/〈|, L〉<br />
q G<br />
Die neue Maschine M ′ , mit q F als Nicht-Haltezustand, sucht nach links<br />
ein freies Feld, schreibt einen Strich | und hält.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 44 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Satz<br />
Für jede Turing-berechenbare totale Funktion N f N existiert eine Zahl<br />
r f , so daß <strong>für</strong> alle n ∈ N gilt f (n) ≤ β(n + r f ) .<br />
Beweis.<br />
Die Funktion f möge von der dTM M mit r f Zuständen berechnet<br />
werden. Für n ∈ N fügen wir n neue Zustände p i , i < n , zu M hinzu,<br />
sowie folgende Übergänge:<br />
#/〈|, R〉 #/〈|, R〉 #/〈|, R〉 #/〈|, R〉<br />
start p 0<br />
p1 . . . p n−1 q 0<br />
M n produziert ausgehend vom leeren Band n Striche und führt dann M<br />
mit dieser Eingabe aus. Mit M hält auch M n , und dann stehen<br />
mindestens f (n) Striche auf dem Band, also folgt f (n) ≤ β(n + r f ) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 45 / 215
3. Turingmaschinen 3.4 Turing-berechenbare partielle Funktionen<br />
Satz<br />
β ist nicht Turing-berechenbar.<br />
Beweis.<br />
Wir nehmen an, β ist Turing-berechenbar vermöge der dTM M . Dann ist<br />
auch N f N mit n ↦→ β(2n) Turing-berechenbar (Verknüpfung mit der<br />
Verdoppelungsmaschine aus einem früheren Beispiel). Für jedes n ∈ N gilt<br />
nach obigem Satz β(2n) = f (n) ≤ β(n + r f ) . Aber n = r f + 1 liefert<br />
einen Widerspruch zur stengen Monotinie von β .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 46 / 215
4. Church-Turing-These<br />
Kapitel 4<br />
Die Church-Turing These<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 47 / 215
4. Church-Turing-These 4.0 Vorbemerkungen<br />
4.0 Alternativen zu Turingmaschinen<br />
Laut Church-Turing-These (oder besser: Vermutung) stimmt die Klasse<br />
aller intuitiv “algorithmisch berechenbaren” Funktionen mit der Klasse der<br />
Turing-berechenbaren Funktionen überein.<br />
Diese These kann prinzipiell nicht beweisen werden, wird aber dadurch<br />
untermauert, daß andere natürliche Formalisierungen des Algorithmus<br />
Begriffs dieselben Klassen berechenbarer Funktionen liefern. Zur Sprache<br />
kommen könnten hier<br />
⊲ Registermaschinen (RAMs), die heutigen Computern näher stehen als<br />
klassische TMn (sehr kurz);<br />
⊲ formale Grammatiken (eine Verallgemeinerung kfG’n, sind der<br />
Bologna-Reform zum Opfer gefallen)<br />
⊲ die Theorie der sog. rekursiven Funktionen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 48 / 215
RAM<br />
4. Church-Turing-These 4.1 RAM<br />
Anstelle eines (potentiell unendlichen) Turingbandes verfügt eine Random<br />
Accesss Machine (RAM) oder Registermaschine über einen Datenspeicher<br />
aus potentiell unendlich vielen Register R i , i ∈ N , die Daten in Form von<br />
natürlichen Zahlen unbeschränkter Größe beherbergen können. Das<br />
Register R 0 heißt Akkumulator.<br />
Anstatt eines Schreib-Lese-Kopfes arbeitet eine Steuereinheit taktweise die<br />
(von den Daten separat gespeicherten) Programme zeilenweise ab, gemäß<br />
eines Befehlszählers BZ , der auch als Register aufgefaßt werden kann<br />
(aber ebenfalls nicht zum Datenspeicher gehört).<br />
Die Ein- und Ausgabe erfolgt über separate Bänder, deren Felder natürliche<br />
Zahlen enthalten können (Felder mit dem Inhalt 0 gelten als “leer”), und<br />
auf denen ein Lese- bzw. Schreib-Kopf sich nur nach rechts(!) bewegen<br />
kann (unmittelbar nach dem Lese- bzw. Schreibvorgang, im selben Takt).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 49 / 215
4. Church-Turing-These 4.1 RAM<br />
4.1.0 Befehlssatz einer RAM<br />
Befehl<br />
Wirkung<br />
READ 〈R 0 〉 := 〈read〉, 〈BZ〉 := 〈BZ〉 + 1<br />
der Lesekopf bewegt sich ein Feld nach rechts<br />
WRITE der Schreibkopf schreibt 〈R 0 〉 und bewegt sich ein Feld nach rechts, 〈BZ〉 := 〈BZ〉 + 1<br />
LOAD i 〈R 0 〉 := 〈R i 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />
STORE i 〈R i 〉 := 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />
ADD i 〈R 0 〉 := 〈R i 〉 + 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />
PRED 〈R 0 〉 := pred〈R 0 〉 1 und 〈BZ〉 := 〈BZ〉 + 1<br />
GOTO m<br />
〈〈BZ〉 :=<br />
{<br />
m<br />
m falls 〈R<br />
IF R i = 0 GOTO m 〈BZ〉 :=<br />
i 〉 = 0<br />
〈BZ〉 + 1 sonst<br />
{<br />
m falls 〈R<br />
IF R i > 0 GOTO m 〈BZ〉 :=<br />
i 〉 > 0<br />
〈BZ〉 + 1 sonst<br />
STOP<br />
Maschine hält<br />
Weiter kann man <strong>für</strong> LOAD , STORE und ADD das Argument i statt als<br />
Zählindex <strong>für</strong> Register R i auch zur indirekte Adressierung des Registers<br />
R 〈Ri 〉 oder als Konstante i ∈ N verwenden. Dies wird durch einen Asterisk<br />
∗ bzw. ein Ausrufezeichen ! vor dem i angezeigt.<br />
1 mit pred(n + 1) = n und pred0 = 0<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 50 / 215
4. Church-Turing-These 4.1 RAM<br />
Beim Programmieren elementarer Aktionen als “Macros” ist zu beachten,<br />
daß Sprung-Adressen ggf. anzupassen und der Akkumulator zu retten sind.<br />
Beispiel<br />
SUCC i / PRD i soll den Inhalt von R i<br />
STORE α 〈R α 〉 = 〈R 0 〉<br />
LOAD !1 〈R o 〉 = 1<br />
ADD i 〈R 0 〉 := 〈R i 〉 + 1<br />
STORE i 〈R i 〉 := 〈R i 〉 + 1<br />
LOAD α 〈R 0 〉 = 〈R α 〉<br />
um 1 erhöhen/vermindern:<br />
STORE α 〈R α 〉 = 〈R 0 〉<br />
LOAD i 〈R 0 〉 = 〈R i 〉<br />
PRED 〈R 0 〉 := pred〈R i 〉<br />
STORE i 〈R i 〉 := pred〈R i 〉<br />
LOAD α 〈R 0 〉 = 〈R α 〉<br />
Dabei ist R α ein zum Zeitpunkt des Aufrufs freies Register, das manuell<br />
anzupassen ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 51 / 215
4. Church-Turing-These 4.1 RAM<br />
Beispiel ( SUB i subtrahiert 〈R 0 〉 von 〈R i 〉 , soweit möglich:)<br />
0. IF R i = 0 GOTO 8<br />
1. PRED<br />
2. PRD i (braucht fünf Schritte)<br />
7. GOTO 0<br />
8. LOAD i<br />
Beispiel ( IF R i = k GOTO m <strong>für</strong> k > 0 :)<br />
0. STORE α<br />
1. LOAD !k<br />
2. SUB i (braucht neun Schritte)<br />
11. STORE i<br />
12. LOAD α<br />
13. IF R i = 0 GOTO m<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 52 / 215
4. Church-Turing-These 4.1 RAM<br />
4.1.2 Simulation einer TM durch eine RAM<br />
Die Zustandsmenge wird durchnummeriert: Q = { q i : i < n }<br />
Das Bandalphabet B wird durchnummeriert: B = { s i : i < m } mit<br />
s 0 = # .<br />
Die Bandzellen werden durchnummeriert, mit 0 <strong>für</strong> die Kopfposition<br />
in der Initialkonfiguration, ungerade Zahlen nach rechts, gerade<br />
Zahlen nach links.<br />
Die Übergangstabelle 〈q i , s j 〉 ↦→ 〈q r , A t 〉 wird programmiert.<br />
Neben dem Akkumulator R 0 seien R 1 <strong>für</strong> den Zustandsindex und R 2 <strong>für</strong><br />
die Kopfposition reserviert, während R 3+i <strong>für</strong> den Inhalt von Zelle i<br />
zuständig ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 53 / 215
4. Church-Turing-These 4.1 RAM<br />
Die Simulation besteht aus drei Teilen:<br />
Zunächst wird die Eingabe a 0 a 1 . . . a k−1 in die Register R 3 , R 5 ,<br />
. . . , R 1+2k übertragen, durch wiederholte Anwendung von READ .<br />
Nach Erreichen von # werden die Register R 1 und R 2 gemäß der<br />
Initialkonfiguration initialisiert. Anschließend sind die den Übergängen<br />
〈q i , b j 〉 ↦→ 〈q r , a t 〉 mit b j ∈ B und a t ∈ B + {L, R} entsprechenden<br />
Programme auszuführen, solange Übergänge verfügbar sind.<br />
Der Bandinhalt links der Kopfposition wird auf das Ausgabeband<br />
übertragen, bis ein Blankzeichen auftritt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 54 / 215
4. Church-Turing-These 4.1 RAM<br />
4.1.2 RAM-Berechenbarkeit<br />
Definition<br />
Eine RAM berechnet eine (partielle) Funktion N k N, falls die RAM<br />
bei genau den Eingaben aus dem Definitionsbereich D(f ) hält und dann<br />
der einzige Wert auf dem Ausgabeband mit dem Funktionswert von f<br />
übereinstimmt.<br />
Nachdem die Simulierbarkeit von Turing-Maschinen durch RAMs<br />
konzeptionell bereits etabliert worden ist, gilt es nun, auch die umgekehrte<br />
Simulierarkeit zu zeigen.<br />
Satz<br />
Jede RAM-berechenbare Funktion ist Turing-berechenbar.<br />
f<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 55 / 215
4. Church-Turing-These 4.1 RAM<br />
Beweis<br />
Wir simulieren ein RAM-Programm <strong>für</strong> f mit Hilfe einer 6-Band TM mit<br />
Bandalphabet {|, @, #} und Zustandsmenge der Form Q × A<br />
(“zusätzliches Gedächtnis”), deren zweite Komponente zur Speicherung<br />
des endlichen RAM-Programms dient.<br />
B 0 dient zur Eingabe mit @| x 0<br />
@| x 1<br />
@ . . . | x n−1<br />
@ ;<br />
B 1 enthält die zunächst nichtleeren Register 〈R i 〉 = n in der Form<br />
@| i @| n @ ; aktuelle Angaben <strong>für</strong> R i werden rechts angefügt (das<br />
erspart das Verändern von Zahlen in der Mitte des Bandes); dann ist<br />
auch n = 0 möglich;<br />
B 2 und B 3 fungieren als Akkumulator bzw. Befehlszähler;<br />
B 4 ist ein Hilfsband und B 5 dient der Ausgabe.<br />
Zu Beginn sind alle Bänder außer B 0 leer. Dann wird immer der Befehl<br />
simuliert, dessen Zeilennummer auf B 3 steht.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 56 / 215
4. Church-Turing-These 4.1 RAM<br />
Beweis (Fortsetzung)<br />
Nun gilt es, die einzelnen RAM-Befehle zu simulieren. ...<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 57 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
4.2 Rekursive Funktionen<br />
Dieser alternative Ansatz zur Formalisierung intuitiv berechenbarer<br />
Funktionen geht algebraisch vor. Ausgehend von sog. “Grundfunktionen”<br />
wird mit zwei Operationen zunächst die Klasse der “primitiv rekursiven<br />
Funktionen” aufgebaut. Der Abschluß unter einer dritten Operation liefert<br />
dann die Klasse der “rekursiven Funktionen”.<br />
Definition (Grundfunktionen)<br />
Projektionen N k π k i<br />
N, 〈n j : j < k〉 ↦→ n i , <strong>für</strong> k ∈ N und i < k ;<br />
Konstante Funktionen N k κ k 0<br />
N, 〈n j : j < k〉 ↦→ 0 , <strong>für</strong> k ∈ N ;<br />
Nachfolger-Funktion N succ N, n ↦→ n + 1 .<br />
Speziell im Fall k = 0 ist N 0 ein Singleton {∗} . Dann existieren keine<br />
κ<br />
Projektionen, und die Konstante {∗}<br />
0 0<br />
N kann mit dem Element<br />
0 ∈ N identifiziert werden (Funktion ohne Parameter).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 58 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Zunächst wollen wir die bekannte Verknüpfung von Funktionen<br />
N g N f N , n ↦→ f (g(n)) =: (f ◦ g)(n)<br />
auf die mehrstellige Funktionen übertragen. Falls N k N brauchen wir<br />
k Funktionen N t i g i<br />
N, die man im einfachsten Fall per Substitution zu<br />
einer Funktion N ∑ i
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
f<br />
Stattdessen kann man <strong>für</strong> N k N auch k Funktionen g i mit<br />
demselben Definitionsbereich N m betrachten, und daraus eine kombinierte<br />
Funktion von N m nach N gewinnen, indem man die Eingabe <strong>für</strong> alle<br />
Funktionen g i klont:<br />
g 0 g 1 g 2<br />
f<br />
Definition (“Klon-Komposition”)<br />
Für N k<br />
f<br />
N und N m g i<br />
N, i < k setze N m f ◦ 〈g i : i < k〉<br />
N<br />
〈n j : j < m〉 ↦→ f ( g 0 (n j : j < m), . . . , g k−1 (n j : j < m) )<br />
Diese Operation wird in der Literatur auch als “Substitution” oder<br />
“Komposition” bezeichnet.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 60 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beispiel<br />
Konstante Funktionen N k κ k i<br />
N mit i ∈ N ergeben sich aus κ k 0 durch<br />
i -fache Verknüpfung mit der Nachfolger-Funktion: κ k i<br />
= (succ) i ◦ κ k 0 .<br />
Beispiel<br />
Die durch f (n) = n + 2 spezifizierte Funktion N f N läßt sich durch<br />
f = succ ◦ succ realisieren.<br />
Entsprechend liefert die Spezifikation g(m, n) = n + 2 eine Funktion<br />
N 2 g<br />
N mit g = f ◦ π1 2 .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 61 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Satz<br />
Substitution läßt sich auf Klon-Komposition zurückführen.<br />
Beweis<br />
f<br />
Für N k N erweitert man den Definitionsbereich der Funktionen<br />
N t i g i<br />
N, i < k , mittels Dummy-Argumenten zu N t mit t = ∑ i
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Die zweite Operation zur Konstruktion primitiv-rekursiver Funktionen:<br />
Definition (Induktions-Rekursions-Schema (IRS))<br />
Aus zwei Funktionen N k−1<br />
N k f = IR(g, h)<br />
N gemäß<br />
g<br />
N h N k+1 konstruieren wir eine dritte<br />
f (x , 0) := g(x ) und f (x , m + 1) := h(x , m, f (x , m)) mit x ∈ N k−1<br />
Die Rekursion erfolgt bei festem x ∈ N k−1 im letzten Argument. Der<br />
Startwert f (x , 0) ist durch g bestimmt, während bei Kenntnis von<br />
f (x , m) der Wert <strong>für</strong> das Nachfolger-Argument m + 1 mit Hilfe von h<br />
bestimmt werden kann.<br />
Definition (Primitiv rekursive Funktionen)<br />
Die primitiv rekursiven Funktionen bilden den Abschluß der Grundfunktionen<br />
unter der Klon-Komposition und dem Induktions-Rekursions-<br />
Schema, d.h., die kleinste Klasse PR von Funktionen N k N, die unter<br />
beiden Operationen abgeschlossen ist und die Grundfunktionen enthält.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 63 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beispiel<br />
Die Fakultätsfunktion fac(n) = n! = ∏ i≤n<br />
i ist primitiv rekursiv.<br />
Da f nicht offensichtlich die Klon-Komposition einfacherer Funktionen<br />
ist, versuchen wir, fac mit Hilfe des Induktions-Rekursions-Schemas<br />
darzustellen. fac(0) = 1 erzwingt g = κ 0 1 . Um einen Kandidaten <strong>für</strong> h<br />
zu finden, wollen wir fac(m + 1) mit fac(m) in Beziehung setzen.<br />
Offenbar gilt<br />
fac(m + 1) = (m + 1)! =<br />
∏<br />
i = (m + 1) · ∏<br />
i = (m + 1) · m!<br />
Das legt N 2<br />
h<br />
i≤m+1<br />
i≤m<br />
= (m + 1) · fac(m) = h(m, fac(m))<br />
N, 〈a, b〉 ↦→ succ(a) · b nahe.<br />
Bei h handelt es sich um das Ergebnis der Substitution von succ und<br />
id N = π0 1 in die Multiplikation N2 mult<br />
N. Die primitive Rekursivität<br />
von h folgt, wenn wir die der Multiplikation nachweisen können.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 64 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beispiel (Fortsetzung)<br />
Da die Multiplikation weder auf Klon-Komposition noch auf Substitution<br />
basiert, versuchen wir es mit dem IRS. Aus n · 0 = 0 folgern wir<br />
g ′ = κ 1 0 ,während n · (m + 1) = n + n · m = h′ (n, m, n · m) die Wahl von<br />
h ′ (a, b, c) = a + c nahelegt, genauer: h ′ = plus ◦ 〈π 3 0 , π3 2 〉 .<br />
plus<br />
Damit bleibt die Addition N 2 N auf primitive Rekursivität zu<br />
untersuchen. Klon-Komposition und Substitution entfallen, bleibt also nur<br />
das IRS. Aus n + 0 = n folgern wir g ′′ = id N = π0 1 . Andererseits legt<br />
n + (m + 1) = (n + m) + 1 = h ′′ (n, m, n + m) die Wahl von<br />
h ′′ (a, b, c) = c + 1 nahe, genauer: h ′′ = succ ◦ π2 3 .<br />
Zusammenfassend sind folgende Funktionen primitiv rekursiv:<br />
plus = IR(π 1 0, succ ◦ π 3 2)<br />
mult = IR(κ 1 0, plus ◦ 〈π 3 0, π 3 2〉)<br />
fac = IR(κ 0 1, mult ◦ (succ × π 1 0))<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 65 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Satz<br />
Jede primitiv rekursive Funktion ist total.<br />
Beweis.<br />
Alle Projektionen πi k , jede konstante Funktion κ k 0 und die<br />
Nachfolgerfunktion succ sind überall definiert, d.h., total.<br />
f<br />
Sind N k N und N m g i<br />
N, i < k , überall definiert, so gilt dies<br />
auch <strong>für</strong> die Klon-Komposition f ◦ 〈g i : i < k〉 .<br />
g<br />
Sind N k−1 N h N k+1 überall definiert, so ist f := IR(g, h)<br />
zumindest auf N k−1 × {0} definiert. Und falls f (x , m) definiert ist, so<br />
auch f (x , m + 1) = h(x , m, f (x , m)) .<br />
Die Struktur dieses Beweise können wir auch <strong>für</strong> folgenden Satz anwenden:<br />
Satz<br />
Jede primitiv rekursive Funktion ist Turing-berechenbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 66 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beweis.<br />
Alle Projektionen πi k , jede konstante Funktion κ k 0 und die Nachfolgerfunktion<br />
succ sind Turing-berechenbar, mittels sehr einfacher Maschinen.<br />
f<br />
Sind N k N und N m g i<br />
N, i < k , total und Turing-berechenbar, so<br />
wählen wir Maschinen M und T i , i < k , mit separaten Ein- und<br />
Ausgabebändern, die dies realisieren. Die Maschine K <strong>für</strong> die<br />
Klon-Komposition f ◦ 〈g i : i < k〉 simuliert nacheinander die Maschinen<br />
T i , i < k , mit derselben Eingabe w ∈ N m , und schreibt die Ergebnisse<br />
durch @ getrennt auf das Eingabeband der Simulation von M .<br />
Anschließend wird M mit ebendieser Eingabe simuliert.<br />
g<br />
Sind N k−1 N h N k+1 total und Turing-berechenbar durch M g<br />
und M h , berechnen wir f := IR(g, h) mit folgender Maschine: bei<br />
Eingabe 〈x , m〉 simulieren wir zunächst M g mit Eingabe x und Ausgabe<br />
f (x , 0) = g(x ) . Anschließend simulieren wir m-mal M h mit Eingabe<br />
〈x , i, f (x , i)〉 und Ausgabe f (x , i + 1) , i < m .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 67 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Satz<br />
Die Menge der primitiv-rekursiven Funktionen ist abzählbar.<br />
Beweis.<br />
Offenbar ist die Menge PR 0<br />
der Grundfunktionen abzählbar.<br />
Entsteht PR n+1 durch Anwendung der Klon-Komposition und des IRS auf<br />
Funktionen aus PR n , so folgt wegen id IN ∈ PR 0 sofort PR 0 ⊆ PR 1 , und<br />
per Induktionauch PR n ⊆ PR n+1 .<br />
Es gibt höchstens PR n × PR n viele Möglichkeiten, das IRS, und höchstens<br />
(PR n ) ∗ viele Möglichkeiten, die Klon-Komposition anzuwenden. Damit<br />
folgt aus der Abzählbarkeit von PR n auch die von PR n+1 , und somit<br />
auch die von PR = ⋃ n∈N PR n .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 68 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Satz<br />
Nicht jede totale Turing-berechenbare Funktion ist primitiv rekursiv.<br />
Beweisidee<br />
Wir betrachten eine Aufzählung ϕ i , i ∈ N , der primitiv-rekursive<br />
Funktion, die entsprechende Stelligkeit sei σ i . Definiere die<br />
Diagonalfunktion N ∆ N durch<br />
∆(n) := ϕ n (〈n : i < σ n 〉) + 1<br />
<strong>für</strong> n ∈ N<br />
Nach Konstruktion kann ∆ mit keiner einstelligen Funktion der Form ϕ n<br />
übereinstimmen: aus ∆ = ϕ n folgt ∆(n) = ϕ n (n) + 1 ≠ ϕ n (n) .<br />
Aber ∆ ist Turing-berechenbar: wähle zu n ∈ N eine Maschine M n <strong>für</strong><br />
ϕ n , wende sie auf 〈n : i < σ n 〉 an und bilde den Nachfolger. Daß dieses<br />
von einer TM bewerkstelligt werden kann, werden wir in Kapitel 5 sehen<br />
(Stichwort: universelle Turingmaschine).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 69 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beispiel (Ackermann-Funktion (Mitte der 1920’er Jahre))<br />
Die von Wilhelm Ackermann gefundene Funktion ist das bekannteste<br />
Beispiele <strong>für</strong> eine totale intuitiv berechenbare Funktion, die nicht primitiv<br />
rekursiv ist. (Gabriel Sudan hat etwas früher eine weitere derartige<br />
Funktion gefunden; Sudan und Ackermann waren beide Schüler von David<br />
Hilbert.) Ackermanns ursprünglich 3-stellige Funktion wurde 1955 von<br />
Rózsa Péter zur bekannten zweistelligen Version vereinfacht:<br />
⎧<br />
⎪⎨ m + 1 falls n = 0;<br />
A(n, m) := A(n − 1, 1) falls n > 0 und m = 0;<br />
⎪⎩<br />
A(n − 1, A(n, m − 1)) falls n > 0 und m > 0.<br />
ist Turing-berechenbar, da A(n, m) tatsächlich nur von endlich vielen<br />
vorher zu berechnenden Werten A(k, l) mit k ≤ n und l < m abhängt.<br />
Das z.B. auf Wikipedia beschriebene Wachstumsverhalten english deutsch<br />
verhindert, daß A primitiv rekursiv sein kann: A “wächst zu schnell”<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 70 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Definition<br />
h<br />
Eine Funktion N 2 N majorisiert eine Funktion N m N, falls<br />
b ∈ N existiert, so daß <strong>für</strong> jedes a ∈ N m mit a := max〈a i : i < m〉 gilt<br />
g(a) < h(a, b)<br />
Offenbar kann sich h nicht selber majorisieren, denn andernfalls hätte dies<br />
h(b, b) < h(b, b) zur Folge.<br />
Satz<br />
Die Klasse der von A majorisierten Funktionen umfaßt alle primitiv<br />
rekursiven Funktionen. Insbesondere kann A nicht primitiv-rekursiv sein.<br />
Beweisidee<br />
Man zeigt, analog zu früheren Beweisen, daß A alle Grundfunktionen<br />
majorisiert, und daß die Eigenschaft, von A majorisiert zu werden, unter<br />
Klon-Komposition und dem IRS erhalten bleibt, Details auf PlanetMath.<br />
g<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 71 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Historische Anmerkungen:<br />
Der Begriff “primitiv rekursiv” geht auf Rózsa Péter zurück: Über den<br />
Zusammenhang der verschiedenen Begriffe der rekursiven Funktion,<br />
Mathematische Annalen, 110: 612–632 (1934).<br />
Das Konzept muß Anfang bis Mitte der 1920’er Jahre Hilbert und<br />
seinen Schülern bekannt gewesen sein: David Hilbert, Über das<br />
Unendliche, Mathematische Annalen 95: 161–190 (1926). Dort wird<br />
auf Ackermanns Ergebnis Bezug genommen, dessen Artikel Zum<br />
Hilbertschen Aufbau der reellen Zahlen, Mathematische Annalen 99,<br />
118–133 aber erst 1928 erschien. Hier wird auch Sudans Arbeit Sur<br />
le nombre transfini ω ω , Bulletin mathematique de la Societe<br />
roumaine des sciences 30: 11–30, (1927) zitiert.<br />
Schon Hermann Grassmann beschrieb die induktive Definition von<br />
Addition und Multiplikation in seinem Lehrbuch der Arithmetik <strong>für</strong><br />
höhere Lehranstalten (1861). Diese Idee wurde später unabhängig<br />
von Richard Dedekind wiederentdeckt: Was sind und was sollen die<br />
Zahlen? (1888).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 72 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Um die Klasse der primitiv rekursiven Funktionen zu vergrößern, führen wir<br />
einen Minimierungs- oder µ-Operator ein.<br />
Solche existieren <strong>für</strong> Prädikate (= Relationen), <strong>für</strong> totale und partielle<br />
Funktionen, sowie in beschränkter und unbeschränkter Form PlanetMath .<br />
Wir brauchen die unbeschränkte Variante <strong>für</strong> partielle Funktionen:<br />
Definition<br />
Die Minimierung N k µf<br />
N einer k + 1-stelligen partiellen Funktion<br />
f<br />
N ist definiert durch<br />
N k+1<br />
x ↦→ µf (x ) := min{ m : f (x , m) = 0 ∧ ∀j < m. f (x , j) ist definiert }<br />
Alternative Schreibweise mit m als gebundener Variable: µm. f (x , m) .<br />
µsucc<br />
Im Allgemeinen wird µ Totalität nicht erhalten. Z.B. ist {∗} N<br />
undefiniert, da succ den Wert 0 nicht annimmt, die zu minimierende<br />
Menge also leer ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 73 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Definition<br />
Die Klasse der µ-rekursiven Funktionen bildet den Abschluß der Klasse<br />
der primitiv rekursiven Funktionen unter Minimierung.<br />
Beispiel<br />
Die partielle Vorgängerfunktion N pvor N, n + 1 ↦→ n , ist µ-rekursiv<br />
als Ergebnis der Anwendung des µ-Operators auf eine primitiv-rekursive<br />
Funktion (vergl. HA), die wegen ihrer Totalität die grüne Extrabedingung<br />
automatisch erfüllt:<br />
N 2 f N , 〈n, m〉 ↦→ n − . succ m + succ m − . n<br />
Offengar gilt f (n, m) = 0 gdw succ m = n , was nur im Fall n > 0<br />
möglich ist, und zwar <strong>für</strong> m = n − 1 . (Diese Anwendung von − . und +<br />
ist typisch, wenn zwei Zahlen auf Gleichheit getestet werden sollen.)<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 74 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Beispiel<br />
sub<br />
Die Subtraktion N 2 N, 〈n, m〉 ↦→ n − m sofern m ≤ n , läßt sich<br />
mit dem IRS darstellen: n − 0 = n impliziert g = id N = π0 1 . Wegen<br />
n − (m + 1) = (n − m) − 1 = h(n, m, sub〈n, m〉) liegt die Wahl von<br />
h(a, b) = pvor(b) nahe, genauer h = pvor ◦ π1 2 .<br />
Beispiel<br />
div<br />
Die ganzzahlige Division N 2 N, 〈n, m〉 ↦→ k sofern k · m = n gilt,<br />
ist µ-rekursiv. Wir setzen zunächst<br />
f (n, m, k) := sub(n, k · m) (oder f (n, m, k) := n − . m · k + m · k − . n)<br />
Aber dann gilt f (0, 0, 0) = 0 , was µ f (0, 0) = 0 zur Folge hätte; das wäre<br />
zumindest unkonventionell. Um im Fall m = 0 Undefiniertheit zu<br />
erzwingen, können wir m durch succ(pvor m) ersetzen, was <strong>für</strong> m = 0<br />
undefiniert ist. Andererseits sind im Fall f (n, m, k) = 0 die Werte<br />
f (n, m, j) mit j < k definiert, woraus dann µ f (n, m) = k folgt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 75 / 215
4. Church-Turing-These 4.2 Rekursive Funktionen<br />
Satz<br />
Jede µ-rekursive Funktion ist Turing-berechenbar.<br />
Beweis.<br />
Wegen der Turing-Berechenbarkeit der primitiv rekursiven Funktionen ist<br />
nur zu zeigen, das der µ-Operator <strong>für</strong> partielle Funktionen Turing-<br />
Berechenbarkeit erhält: Ausgehend von i = 0 werden solange Werte<br />
f (x , i) bestimmt, bis erstmals 0 erscheint; das aktuelle Argument i ist<br />
dann der Wert von µ f (x ) . Andernfalls ist µ f (x ) undefiniert.<br />
Ohne Beweis geben wir die Umkehrung an:<br />
Satz<br />
Jede Turing-berechenbare Funktion ist µ-rekursiv.<br />
Man kann sogar zeigen, daß jede µ-rekursive Funktion durch einmalige<br />
Anwendung des µ-Operators auf eine primitiv rekursive Funktion erhalten<br />
werden kann, also auch die Ackermann-Funktion.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 76 / 215
5. Unentscheidbare Probleme<br />
Kapitel 5<br />
Unentscheidbare Probleme<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 77 / 215
5. Unentscheidbare Probleme 5.0 Problemstellung<br />
5.0 Problemstellung<br />
Wir brauchen Methoden um festzustellen, daß <strong>für</strong> ein Problem kein<br />
terminierender Algorithmus existiert.<br />
Formaler: Für eine gegebene formale Sprache L ∈ Σ ∗ suchen wir nach<br />
Beweisen, daß L nicht entscheidbar ist.<br />
Beispiel<br />
Eingabe: Programmtext P (in JAVA, ALGOL 68. . . ), Eingabedaten E<br />
Aufgabe: Festzustellen, ob P bei Eingabe E terminiert.<br />
Dieses Problem ist nicht entscheidbar!<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 78 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
5.1 Universelle Turingmaschine<br />
Zunächst überzeugen wir uns von der Existenz einer “programmierbaren”<br />
Turingmaschine M U<br />
. An diese stellen wir folgende Anforderungen:<br />
M U<br />
soll beliebige TMn simulieren können, deterministische wie<br />
nicht-deterministische. Dies ist eine Instanz von Selbstreflektion, ein<br />
Algorithmus, der jeden beliebigen Algorithmus ausführt, insbesondere<br />
auch sich selbst. Praktische Beispiele da<strong>für</strong> sind z.B. Interpreter <strong>für</strong><br />
Programmiersprachen (JAVA-Bytecode,. . . ), CPUs (= Interpreter <strong>für</strong><br />
Maschinencode).<br />
Konkret soll M U<br />
bei Eingaben der Form 〈c(M), w〉 , c(M) der<br />
Binärcode einer TM M , diese Maschine mit Eingabe w ∈ {0, 1} ∗<br />
simulieren, im Entscheidungs- wie im Berechnungsfall.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 79 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
Bemerkung<br />
Wir können uns auf das binäre Alphabet Σ = {0, 1} beschränken, denn<br />
eine Maschine M = 〈Q M , {# M } + Σ, Σ, δ, q 0 , q F 〉 mit |Σ| > 2 können<br />
wir durch eine Maschine ¯M über {0, 1} mit einer Zustandsmenge der<br />
Form ¯Q × Q M simulieren (“zusätzliches Gedächtnis”):<br />
Das Symbol s k , k < |Σ| + 1 , simulieren wir durch 01 k+1<br />
(letztendlich unär), speziell also # M = s 0 durch 01 . Vorteil: damit<br />
wird der Bandinhalt von M durch ein zusammenhängendes Binärwort<br />
auf dem Band von ¯M beschrieben.<br />
Die Bewegung des Kopfes entspricht der Suche nach der nächsten<br />
Null.<br />
Das Überschreiben von s i durch s j erfordert ggf. die Verschiebung<br />
eines Teils des M -Bandinhalts, um keine Lücken entstehen zu lassen.<br />
Dabei dient das Blankzeichen # der Maschine ¯M als Randbegrenzer.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 80 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
Nun wollen wir nTM’n mit n Zuständen über Σ = {0, 1} der Form<br />
M = 〈{ q i : i < n }, {#, 0, 1}, {0, 1}, δ, q 0 , q n−1 〉 mit q n−1 := q F<br />
und t Übergangsregeln ein Binärwort der Form<br />
c(M) = 1110 n 1w 0 1w 1 1 . . . 1w t−1 111<br />
zuordnen, wobei die Wörter w j , j < t , den Regeln aus δ entsprechen.<br />
Ähnlich wie oben codieren wir den Zustand q i durch 10 i+1 , i < n , und<br />
die möglichen Aktionen gemäß<br />
〈#, 0, 1, L, R〉 ↦→ 〈10, 10 2 , 10 3 , 10 4 , 10 5 〉<br />
Übergänge lassen sich nun darstellen als Binärwörter w j<br />
aus<br />
{10 i+1 : i < n}{10, 10 2 , 10 3 }{10 i+1 : i < n}{10, 10 2 , 10 3 , 10 4 , 10 5 }<br />
In c(M) werden deren Grenzen durch zwei Einsen markiert.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 81 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
Beispiel<br />
Eine Binärmaschine M 0 mit zwei Übergängen hat einem Code der Form<br />
c(M) = 111001w 0 1w 1 111 . Etwa<br />
Satz<br />
〈q 0 , 1〉 ↦→ 〈q 1 , L〉 entspricht w 0 = 10100010010000<br />
〈q 1 , #〉 ↦→ 〈q 1 , 1〉 entspricht w 1 = 100101001000<br />
Die Sprachen xC = { c(M) : M ist eine binäre xTM } , x ∈ {n, d} , der<br />
Codes (nicht)deterministischer TM’n sind entscheidbar.<br />
Beweis.<br />
Das entspricht einem Syntaxcheck: Randbegrenzer 111 überprüfen,<br />
Zustandszahl n auslesen, Übergangscodes w j separieren und auf<br />
Konsistenz prüfen. Im deterministischen Fall ist noch sicherzustellen, daß<br />
verschiedene Übergänge verschiedene linke Seiten haben.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 82 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
Beispiel<br />
Wir erinnern an die nicht semi-entscheidbare Sprache<br />
L code<br />
:= { w ∈ {0, 1} ∗ : w = c(M) <strong>für</strong> eine TM M mit w /∈ L(M) }<br />
Die Maschine M 0 aus obigem Beispiel akzeptiert ihren eigenen Code, da<br />
sie nach einem Schritt im Endzustand q 1 hält. Folglich gilt<br />
c(M 0 ) /∈ L code<br />
. Eine ähnliche Maschine M 1 mit den Übergängen<br />
〈q 0 , 1〉 ↦→ 〈q 0 , #〉 und 〈q 0 , #〉 ↦→ 〈q 0 , R〉<br />
erfüllt hingegen c(M 1 ) ∈ L code<br />
, da sie nie hält.<br />
Wir rekapitulieren die Anforderungen an M U<br />
<strong>für</strong> legale Eingaben c(M)w :<br />
⊲ M U<br />
hält auf c(M)w gdw. M hält auf w , und wenn die Maschinen<br />
halten, dann mit identischer Ausgabe.<br />
⊲ M U<br />
akzeptiert c(M)w gdw. M akzeptiert w .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 83 / 215
5. Unentscheidbare Probleme 5.1 Universelle Turingmaschine<br />
Der Einfachheit halber konzipieren wir M U<br />
als 3-Band-Maschine. Diese<br />
kann gemäß unserer Überlegungen in Kapitel 3 auch als 1-Band-Maschine<br />
realisiert werden; erst <strong>für</strong> diese ist dann der Code c(M U<br />
) verfügbar.<br />
Auf B 0 steht zunächst die Eingabe c(M)w .<br />
Der vordere Teil c(M) wird nach B 1 verschoben und einem<br />
Syntaxcheck unterzogen. Damit verbleibt die Eingabe w <strong>für</strong> M auf<br />
B 0 , das ab jetzt die Rolle des einzigen Bandes von M spielt.<br />
Auf B 2 wird über den aktuellen Zustand q i von M mittels i + 1<br />
Nullen buchgeführt; zunächst wird hier eine Null geschrieben.<br />
Die Simulation von M liest zunächst auf B 0 ein Symbol aus<br />
{#, 0, 1} . In Verbindung mit der Zustandsinformation wird auf B 2<br />
nichtdeterministisch nach einem passenden Übergang auf B 1 gesucht.<br />
Gibt es keinen solchen, so hält M U<br />
, wobei genau dann der<br />
Finalzustand von M U<br />
anzunehmen ist, wenn 0 n auf B 2 steht.<br />
Andernfalls wird gemäß der rechten Seite der Zustandsindex auf B 2<br />
angepaßt, die entsprechende Aktion auf B 0 ausgeführt, und der Kopf<br />
auf B 1 am Rand des Codes c(M) geparkt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 84 / 215
5. Unentscheidbare Probleme 5.2 Das Halteproblem<br />
5.2 Das Halteproblem<br />
In Kapitel 3 war L halt<br />
:= { c(M)w : M TM, die bei Eingabe w hält }<br />
erwähnt worden, aber erst jetzt ist die Binärcodierung von TM’n verfügbar.<br />
Problem: Bei deterministischen Maschinen läßt jede Eingabe höchstens<br />
eine Berechnung zu, somit ist klar, was mit “ M hält bei Eingabe w ”<br />
gemeint ist. Aber wie steht’s mit nichtdeterministischen Maschinen?<br />
Lösung: Wie in Kapitel 3 gesehen, besitzt jede nTM M eine sog.<br />
Determinisierung M ′ , die M simuliert. Zwar war M ′ als 4-Band<br />
Maschine beschrieben worden, aber diese kann systematisch in eine STM<br />
M d<br />
transformiert werden.<br />
Beobachtung 0: M d<br />
bzw. M ′ hält genau dann bei Eingabe w , wenn<br />
w ∈ L(M) oder jeder Berechnungspfad <strong>für</strong> w terminiert, ohne zu<br />
akzeptieren.<br />
Beobachtung 1: Die Funktion c(M) ↦→ c(M d<br />
) ist Turing-berechenbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 85 / 215
5. Unentscheidbare Probleme 5.2 Das Halteproblem<br />
Definition<br />
L halt<br />
:= { c(M)w : M TM, und M d<br />
hält bei Eingabe w }<br />
Satz<br />
Die Sprache L halt<br />
ist semi-entscheidbar, aber nicht entscheidbar.<br />
Beweis<br />
Semi-Entscheidbarkeit: via Kombination von Syntaxcheck mit M U<br />
:<br />
v<br />
v = c(M)w?<br />
Ja<br />
c(M d )w<br />
hält M U ?<br />
Ja<br />
v akz.<br />
Nein<br />
v n. akz.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 86 / 215
5. Unentscheidbare Probleme 5.2 Das Halteproblem<br />
Beweis (Forsetzung).<br />
Entscheidbarkeit: Annahme: L halt<br />
ist entscheidbar. Dann existiert eine<br />
TM M halt<br />
, die immer hält und L(M halt<br />
) = L halt<br />
erfüllt. Wir konstruieren<br />
daraus wie folgt eine dreiteilige TM M code<br />
, die immer hält:<br />
w<br />
w = c(M)?<br />
Ja<br />
c(M d )w<br />
akz. M halt ?<br />
Ja<br />
c(M)w<br />
akz. M U ?<br />
Ja<br />
w n. akz.<br />
Nein<br />
Nein<br />
Nein<br />
w n. akz.<br />
w akz.<br />
w akz.<br />
Nach erfolgreichem Syntaxcheck w = c(M) wird die Maschine L halt<br />
auf<br />
die Eingabe c(M d<br />
)w angewendet. Hält M d<br />
(also auch M ) nicht auf<br />
Eingabe w , so wird w = c(M) von M code<br />
akzeptiert. Andernfalls testet<br />
M U<br />
, ob M die Eingabe w akzeptiert. Genau dann wird w von M code<br />
nicht akzeptiert. Aber dies ist ein Widerspruch zur Nichtentscheidbarkeit<br />
von L code<br />
.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 87 / 215
5. Unentscheidbare Probleme 5.2 Das Halteproblem<br />
Corollar<br />
Das Komplement von L halt<br />
ist nicht semi-entscheidbar.<br />
Beweis.<br />
Wegen der Semi-Entscheidbarkeit von L halt<br />
ist die Semi-Entscheidbarkeit<br />
des Komplements äquivalent zur Entscheidbarkeit von L halt<br />
.<br />
Wie sieht das Komplement von L halt<br />
überhaupt aus?<br />
L halt<br />
= { v ∈ {0, 1} ∗ : ( ∃M. v = c(M)w ) =⇒ M d<br />
hält nicht auf w }<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 88 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
5.3 Weitere unentscheidbare Probleme<br />
Die obige Beweistechnik ist unter dem Namen Reduktion bekannt, da die<br />
Frage der Entscheidbarkeit eines neuen Problems auf die der Entscheidbarkeit<br />
eines bekannten Problems reduziert wird. Ein ähnliches Verfahren<br />
wird auch in Kapitel 6, Komplexitätstheorie, nützlich sein.<br />
Studierende sollen diese Beweistechnik beherrschen und einen Vorrat an<br />
unentscheidbaren Problemen kennen.<br />
Reduktionsschema<br />
Gegeben: eine formale Sprache L ⊆ {0, 1} ∗ .<br />
Zu zeigen: L ist nicht entscheidbar.<br />
Annahme: L ist entscheidbar. Dann exisiert eine TM M mit L(M) = L ,<br />
die immer hält.<br />
Verfahren: Konstruiere mittels M eine TM ˜M <strong>für</strong> eine bekanntermaßen<br />
untentscheidbare Sprache ˜L , Widerspruch! Damit kann L nicht<br />
entscheidbar gewesen sein.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 89 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
5.3.0 Das Akzeptanzproblem<br />
Satz<br />
Die Sprache L acc<br />
:= { c(M)w : M TM mit w ∈ L(M) } ist unentscheidbar.<br />
Beweis.<br />
Wir nehmen an, die TM M acc<br />
entscheidet L acc<br />
und hält immer.<br />
Idee: Das Halten einer TM M bei Eingabe w in einem Nichtfinalzustand<br />
auf Akzeptanz zurückführen.<br />
Vertauscht man in M die Final- mit den Nichtfinalzuständen, so ist das<br />
formal keine TM. Aber Hinzufügen eines neuen Endzustands q n und neuer<br />
Übergänge 〈q i , s〉 ↦→ 〈q n , s〉 , sofern keine M -Übergänge aus 〈q i , s〉<br />
existieren und i < n − 1 gilt, liefert eine TM, die wir mit ¯M bezeichnen.<br />
Die Funktion c(M) ↦→ c(M ′ ) ist natürlich Turing-berechenbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 90 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
Beweis (Fortsetzung).<br />
Nun konstruieren wir eine dreiteilige TM M halt<br />
, die L halt<br />
entscheidet:<br />
u<br />
u = c(M)w?<br />
Nein<br />
Ja<br />
c(M)w<br />
akz. M acc ?<br />
Ja<br />
Nein<br />
c( ¯M)w<br />
akz. M acc ?<br />
Nein<br />
Ja<br />
u akz.<br />
u n. akz.<br />
u akz.<br />
u n. akz.<br />
M halt<br />
hält auf jede Eingabe, da jede Teilmaschine dies tut.<br />
Nach erfolgreichem Syntaxcheck ist festzustellen, daß M auf w genau<br />
dann hält, wenn entweder M oder ¯M die Eingabe w akzeptiert.<br />
Da L halt<br />
aber nicht entscheidbar ist, kann M acc<br />
nicht existieren .<br />
Andererseits ist das Akzeptanzproblem <strong>für</strong> Kellerautomaten entscheidbar:<br />
Kellerautomaten sind analog binär codierbar und können algorithmisch in<br />
cfG’n umgewandelt werden, sogar in CNF. Der CYK-Algorithmus<br />
entscheidet dann das Akzeptanzproblem.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 91 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
5.3.1 Akzeptanz des leeren Worts<br />
Satz<br />
Die Sprache L ε := { c(M) : M TM mit ε ∈ L(M) } ist unentscheidbar.<br />
Beweis.<br />
Wir nehmen an, die TM M ε entscheidet L ε und hält immer.<br />
Idee: Die Akzeptanz von w ∈ L(M) durch M auf die Akzeptanz von ε<br />
durch eine TM M w zurückführen. Diese schreibt w = s 0 s 1 . . . s m−1 von<br />
links nach rechts auf das leere Band, durch Übergänge 〈q i , #〉 ↦→ 〈q i , s i 〉<br />
und 〈q i , s i 〉 ↦→ 〈r i+1 , R〉 , i < m , und 〈q m−1 , s m−1 〉 ↦→ 〈q m , s m−1 〉 . Dann<br />
wird M mit um m erhöhten Zustandsindizes ausgeführt.<br />
Die Funktion 〈c(M), w〉 ↦→ c(M w ) ist natürlich Turing-berechenbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 92 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
Beweis (Fortsetzung).<br />
Nun konstruieren wir eine zweiteilige TM M acc<br />
, die L acc<br />
entscheidet:<br />
u<br />
u = c(M)w?<br />
Ja<br />
c(M w )<br />
akz. M ε?<br />
Ja<br />
u akz.<br />
Nein<br />
Nein<br />
u n. akz.<br />
u n. akz.<br />
M ε<br />
hält auf jede Eingabe, da beide Teilmaschinen dies tun.<br />
Nach erfolgreichem Syntaxcheck ist festzustellen, daß w genau dann von<br />
M akzeptiert wird, wenn M w die Eingabe ε akzeptiert.<br />
Da L acc<br />
aber nicht entscheidbar ist, kann M ε nicht existieren .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 93 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
5.3.2 Terminierung eines Algorithmus<br />
Satz<br />
Die Sprache L term<br />
:= { c(M) : M TM, die auf jede Eingabe hält } ist<br />
unentscheidbar.<br />
Beweis.<br />
Wir nehmen an, die TM M term<br />
entscheidet L term<br />
und hält immer.<br />
Idee: Einschränkung des Verhaltens einer TM M auf ihr Verhalten bei<br />
leerer Eingabe: die modifizierte Maschine ˜M soll zunächst die Eingabe<br />
löschen, mit Hilfe von Übergängen 〈q 0 , s〉 ↦→ 〈q 1 , #〉 ↦→ 〈q 0 , L〉 , s ∈ Σ ,<br />
sowie 〈q 0 , #〉 ↦→ 〈q 2 , #〉 , und bei leerem Band weiter wie M mit um 2<br />
erhöhten Zustandsindizes verfahren.<br />
Die Funktion c(M) ↦→ c( ˜M) ist natürlich Turing-berechenbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 94 / 215
5. Unentscheidbare Probleme 5.3 Weitere unentscheidbare Probleme<br />
Beweis (Fortsetzung).<br />
Nun konstruieren wir eine dreiteilige TM M ε , die L ε<br />
entscheidet:<br />
u<br />
u = c(M)?<br />
Nein<br />
Ja<br />
c(M)<br />
akz. M term ?<br />
Nein<br />
Ja<br />
c( ˜M)<br />
akz. M U ?<br />
Nein<br />
Ja<br />
u akz.<br />
u n. akz.<br />
u n. akz.<br />
u n. akz.<br />
M acc<br />
hält auf jede Eingabe, da die ersten beiden Teilmaschinen dies tun<br />
und die dritte nur bei garantierter Terminierung aufgerufen wird.<br />
Nach erfolgreichem Syntaxcheck <strong>für</strong> M bedeutet die Entscheidung “Nein”<br />
von M term<br />
auf c( ˜M) , daß M auf ε nicht hält, und folglich ε nicht<br />
akzeptiert. Im “Ja”-Fall existiert dagegen mindestens eine terminierende<br />
Berechnung von M auf ε . Mittels M U überprüfen wir nun, ob es auch<br />
eine akzeptierende Berechnung von M auf ε gibt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 95 / 215
5. Unentscheidbare Probleme 5.4 Satz von Rice<br />
5.4 Satz von Rice<br />
Wir brauchen ein effektiveres Verfahren, die Nichtentscheidbarkeit von<br />
Teilsprachen von dC oder nC und verwandten Sprachen festzustellen.<br />
Definition<br />
Für eine Eigenschaft S formaler Sprachen setze<br />
L S := { c(M) : M TM und L(M) hat Eigenschaft S }<br />
Wir nennen S trivial, falls keine Sprache der Form L(M) die Eigenschaft<br />
S erfüllt, oder jede solche Sprache dies tut.<br />
Für triviales S ist L S<br />
entscheidbar. Interessanter ist die Umkehrung:<br />
Satz von Rice<br />
Für nicht-triviale Eigenschaften S ist die Sprache L S<br />
nicht entscheidbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 96 / 215
5. Unentscheidbare Probleme 5.4 Satz von Rice<br />
Damit erweisen sich z.B. folgende Sprachen als unentscheidbar:<br />
{ c(M) : M TM und L(M) regulär }<br />
{ c(M) : M TM und L(M) kontextfrei }<br />
{ c(M) : M TM und L(M) ≠ ∅ }<br />
Was die vorangehenden ausführlichen Beispiele angeht, so läßt sich etwa<br />
L ε mit Hilfe der Eigenschaft “ ε ∈ L(M) ” charakterisieren.<br />
Dagegen ist L term<br />
kein Beispiel <strong>für</strong> die Anwendbarkeit des Satzes von Rice,<br />
da die Forderung, M möge auf jede Eingabe halten, keine Eigenschaft der<br />
Sprache L(M) ist, denn M ist durch L(M) nicht eindeutig bestimmt.<br />
L code<br />
ist nicht semi-entscheidbar, geschweige denn entscheidbar. Dennoch<br />
könnte man die Eigenschaft “ c(M) /∈ L(M) ” betrachten: dies ist ebenfalls<br />
keine “legale” Eigenschaft, die eine Sprache L ⊆ {0, 1} ∗ haben kann oder<br />
nicht! Denkbar wäre die Existenz mehrerer TM’n, die L akzeptieren, und<br />
von denen manche Codes zu L gehören und andere nicht. Insofern ist<br />
auch hier der Satz von Rice nicht anwendbar!<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 97 / 215
5. Unentscheidbare Probleme 5.4 Satz von Rice<br />
Beweis des Satzes von Rice.<br />
S sei nichttrivial. Falls ∅ die Eigenschaft S nicht hat, existiert dann eine<br />
TM M 0 , so daß L(M 0 ) ≠ ∅ die Eigenschaft S besitzt.<br />
Für eine beliebige TM M und w ∈ {0, 1} ∗ sei M w die folgende<br />
Verknüpfung von M 0 mit M : wenn M 0 akzeptiert, soll anschließend M<br />
mit Eingabe w ausgeführt werden. Genauer: nachdem M 0 akzeptiert hat,<br />
ist das Band zu löschen (warum geht das?), dann ist w auf das leere Band<br />
zu schreiben, und schließlich M auszuführen. Damit ist die Abbildung<br />
〈c(M), w〉 ↦→ c(M w ) Turing-berechenbar (Details?), und es gilt<br />
{<br />
L(M w L(M 0 ) falls w ∈ L(M)<br />
) =<br />
∅ sonst<br />
Annahme: L S ist entscheidbar. Dann existiert eine TM M S mit<br />
L(M S ) = L S , die immer hält.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 98 / 215
5. Unentscheidbare Probleme 5.4 Satz von Rice<br />
Beweis (Fortsetzung).<br />
Nun konstruieren wir eine zweiteilige TM M acc , die L acc<br />
entscheidet:<br />
M acc :<br />
u<br />
u = c(M)w?<br />
Nein<br />
Ja<br />
c(M w )<br />
akz. M S ?<br />
Nein<br />
Ja<br />
u akz.<br />
M acc<br />
u n. akz.<br />
u n. akz.<br />
hält auf jede Eingabe, da beide Teilmaschinen dies tun.<br />
u ∈ L(M acc ) gdw u = c(M)w ∧ c(M w ) ∈ L(M S ) = L S<br />
gdw u = c(M)w ∧ L(M w ) hat Eigenschaft S<br />
gdw u = c(M)w ∧ L(M w ) = L(M 0 )<br />
gdw<br />
gdw<br />
u = c(M)w ∧ w ∈ L(M)<br />
u ∈ L acc<br />
Also L(M acc ) = L acc<br />
, Widerspruch. Also existiert M acc nicht und L acc<br />
ist<br />
nicht entscheidbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 99 / 215
5. Unentscheidbare Probleme 5.4 Satz von Rice<br />
Beweis (Fortsetzung).<br />
Falls ∅ die Eigenschaft S hat, betrachten wir die Negation ¯S . Weil ∅<br />
die Eigenschaft ¯S nicht hat, die ebenso wie S nichttrivial ist, folgt wie<br />
oben, daß L¯S nicht entscheidbar ist.<br />
Wir wissen aber bereits, daß die entscheidbaren Sprachen unter<br />
Komplementbildung abgeschlossen sind. Also gilt das auch <strong>für</strong> die nicht<br />
entscheidbaren Sprachen. Weiterhin sind die entscheidbaren Sprachen<br />
unter endlichen Durchschnitten abgeschlossen. Wegen<br />
L¯S = L S ∩ nC<br />
ist somit L S unentscheidbar, folglich also auch L S .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 100 / 215
6. Komplexität von Algorithmen<br />
Kapitel 6<br />
Komplexität von Algorithmen<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 101 / 215
6. Komplexität von Algorithmen 6.0 Übersicht<br />
6.0 Übersicht<br />
Die Klasse der algorithmisch lösbaren (= entscheidbaren) Probleme soll<br />
jetzt detaillierter untersucht werden. Das wesentliche Unterscheidungsmerkmal<br />
wird sein, ob ein Problem “effizient lösbar” ist in dem Sinne, daß<br />
die Laufzeit einer dTM, die das Problem löst, durch ein Polynom in der<br />
Größe der Eingabe beschränkt ist. Die zugehörige Klasse heißt P .<br />
Beispiel<br />
Eingabe: ungerichteter Graph G = 〈V , E〉<br />
Aufgabe: entscheiden, ob G 2-färbbar ist, d.h., ob die Knoten so mit<br />
zwei Farben gefärbt werden können, daß jede Kante verschiedenfarbige<br />
Endpunkte hat.<br />
Beispiel<br />
Eingabe: natürliche Zahl n > 0<br />
Aufgabe: entscheiden, ob n eine Primzahl ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 102 / 215
6. Komplexität von Algorithmen 6.0 Übersicht<br />
Wenn hingegen eine potentielle Lösung in polynomialer Zeit von einer<br />
dTM überprüft werden kann, gehört das Problem zu NP .<br />
Beispiel<br />
Eingabe: ungerichteter Graph G = 〈V , E〉<br />
Aufgabe: entscheiden, ob G 3-färbbar ist.<br />
Für eine potentielle 3-Färbung V f 3 = {0, 1, 2} sind <strong>für</strong> jede Kante<br />
die Farben der Endpunkte zu vergleichen.<br />
Beispiel<br />
Eingabe: n geographische Orte (“Städte”) und ihre Entfernungen (bzw.<br />
Reiskosten), sowie eine Zahl K > 0<br />
Aufgabe: entscheiden, ob es eine Rundreise gibt, die alle Städte genau<br />
einmal besucht und deren Länge (oder Preis) durch K beschränkt ist.<br />
Für eine Permutation der Orte ist die Länge (der Preis) der zugehörigen<br />
Rundreise zu berechnen und mit K zu vergleichen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 103 / 215
6. Komplexität von Algorithmen 6.0 Übersicht<br />
Offenes Problem<br />
Stimmt P mit NP überein?<br />
Millennium-Problem<br />
Die “schwierigsten” Probleme innerhalb der Klasse NP heißen<br />
NP -vollständig. Wenn es gelingt nachzuweisen, daß eines von ihnen zu<br />
P gehört, dann folgt P = NP . (Es gilt als sehr unwahrscheinlich, daß<br />
ein effizienter Algorithmus <strong>für</strong> ein NP -vollständiges Problem gefunden<br />
werden kann.)<br />
Es sind inzwischen sehr viele NP -vollständige Probleme bekannt:<br />
− Garey, Michael R.; Johnson, David S. (1979), Computers and<br />
Intractability: A Guide to the Theory of NP-Completeness, W. H.<br />
Freeman;<br />
− Eine ständig aktualisierte Liste findet sich bei<br />
− Pierluigi Crescenzi, and Viggo Kann (Eds.):<br />
A compendium of NP optimization problems<br />
Wikipedia<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 104 / 215
6. Komplexität von Algorithmen 6.0 Übersicht<br />
6.0.1 Wiederholung: Groß-O-Notation<br />
Wir wollen Funktionen N R + in Bezug auf ihr Wachstum vergleichen.<br />
Informell soll O(g) die Klasse aller Funktionen sein, die asymptotisch<br />
(also <strong>für</strong> große Werte von n ∈ N ) nicht schneller wachsen als g . Genauer:<br />
Definition<br />
Beispiel<br />
f ∈ O(g) gdw ∃c ∈ R + ∃n 0 > 0 ∀n ≥ n 0 . f (n) ≤ c · g(n)<br />
Jedes Polynom p vom Grad t erfüllt p ∈ O(n t ) . Denn aus<br />
p(n) = ∑ p i n i = n ∑ (<br />
t p i /n k−i = n t p t + ∑ )<br />
p i /n t−i<br />
i≤t<br />
i≤t<br />
i
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
6.1 Beispiele effizienter Algorithmen<br />
Vor einer genaueren Analyse graphentheoretische Probleme ist zu klären,<br />
wie Graphen sinnvoll als Eingaben <strong>für</strong> TM’n codiert werden können.<br />
Definition<br />
Ein gerichteter Graph G = 〈V , E〉 besteht aus einer Menge V von<br />
Knoten (Vertices) und einer Relation E ⊆ V × V . Paare 〈u, v〉 ∈ E<br />
werden graphisch als gerichtete Kanten (Edges) oder Pfeile u v<br />
dargestellt, während E als binäre Adjazenzmatrix über V aufgefaßt<br />
werden kann<br />
{<br />
1 falls 〈u, v〉 ∈ E<br />
E u,v =<br />
0 sonst<br />
G heißt ungerichtet, falls die Relation E symmetrisch ist. Dann werden<br />
in der graphischen Darstellung die Hin- und Rückpfeile u v durch<br />
eine ungerichtete Kante u v ersetzt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 106 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Anstelle von Adjazenzmatrizen kann man auch sog. Adjazenzlisten<br />
verwenden, in denen <strong>für</strong> jeden Knoten seine direkten Nachfolger<br />
gespeichert sind, im Wesentlichen die Positionen der Einsen aus der<br />
entsprechenden Zeile der Adjazenzmatrix:<br />
Beispiel<br />
0 1<br />
2<br />
3 4<br />
⎛<br />
⎜<br />
⎝<br />
0 1 0 0 0<br />
0 1 1 0 1<br />
0 0 0 0 0<br />
1 0 0 0 0<br />
0 0 1 1 0<br />
⎞<br />
⎟<br />
⎠<br />
0 → (1)<br />
1 → (1, 2, 4)<br />
2 → ( )<br />
3 → (1)<br />
4 → (2, 3)<br />
Während die Größe der Adjazenzmatrix durch |V | 2 gegeben ist, ist der<br />
Wert <strong>für</strong> die Darstellung mittels Adjazenzlisten mit |E| + |V | vielleicht<br />
präziser, wegen |E| ∈ O(|V | 2 ) aber von derselben Größenordnung.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 107 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Definition<br />
Einer topologischen Sortierung eines gerichteten Graphen G = 〈V , E〉 mit<br />
n Knoten ist eine Funktion V ord n = {0, . . . , n − 1} mit der<br />
Eigenschaft<br />
〈u, v〉 ∈ E impliziert ord(u) < ord(v)<br />
Beispiel<br />
•1 •0<br />
•3<br />
•4 •2<br />
Die neue Kante von 4 nach 1 zerstört die topologische Sortierbarkeit.<br />
Allgemein kann ein gerichteter Graph genau dann topologisch sortiert<br />
werden, wenn er keine Zyklen hat (Test <strong>für</strong> die Existenz von Zyklen).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 108 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Naiver Algorithmus <strong>für</strong> Topologisches Sortieren)<br />
Eingabe: Gerichteter Graph G = (V , E) mit n Knoten und k Kanten<br />
Ausgabe: Topologische Sortierung V ord n, falls G azyklisch<br />
1: {(0) Initialisierung}<br />
2: i := 0 { i : die Zahl, die ord zuweisen soll}<br />
3: W := V { W : die Menge der noch nicht bearbeiteten Knoten}<br />
4: {(1) Rekursionsschritt}<br />
5: while ein Knoten x ∈ W ohne Vorgänger in W existiert do<br />
6: ord(x) := i<br />
7: i := i + 1<br />
8: W := W − {x}<br />
9: end while {Zyklus falls W ≠ ∅ , sonst topologische Sortierung}<br />
Korrektheit: klar.<br />
Laufzeit: (unter Verwendung von Adjazenzmatrizen)<br />
Die Befehle in Zeilen 3,2,6,7 und 8 benötigen konstante Zeit A .<br />
Schleife 5 wird m 2 -mal durchlaufen, mit m = n, . . . , 1 , da W schrumpft;<br />
in der Rest-Matrix über W ist eine 0-Spalte zu finden, in Zeit K .<br />
n∑<br />
n∑<br />
T (n) = 2A + (Km 2 + 3A) = 2A + K m 2 + 3An ∈ O(n 3 )<br />
m=1<br />
m=1<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 109 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Verbesserter Algorithmus <strong>für</strong> topologisches Sortieren)<br />
1: {(0) Initialisierung}<br />
2: i := 0 {Laufzeit A , i : die Zahl, die ord zuweisen soll} { A }<br />
3: for alle Knoten v in V do<br />
4: In[v] := 0 {Laufzeit A , In[v] : Vorgängeranzahl von v }<br />
5: end for {Laufzeit A · n } { A · n }<br />
6: for alle Knoten u in V do<br />
7: for alle Knoten v mit einer Kante (u, v) in E do<br />
8: In[v] := In[v] + 1 {Laufzeit A }<br />
9: end for {Laufzeit A · k(v) , k(v) Länge der Nachfolgerliste von v }<br />
10: end for {Laufzeit A · k bei Adjazenzlisten} { A · k }<br />
11: U := ∅ {Laufzeit A , U - Menge aller Knoten v mit In[v] = 0 } { A }<br />
12: for alle Knoten v in V do<br />
13: if In[v] = 0 then<br />
14: U := U ∪ {v}<br />
15: end if {Laufzeit 2A }<br />
16: end for {Laufzeit 2A · n } { 2A · n }<br />
17: {(1) Rekursionsschritt}<br />
18: while U einen Knoten v enthält do<br />
19: U := U − {v} ; ord(v) := i ; i := i + 1 {Laufzeit 3A }<br />
20: for alle Knoten w mit (v, w) ∈ E do<br />
21: In[w] := In[w] − 1 {Laufzeit A }<br />
22: if In[w] = 0 then<br />
23: U := U ∪ {w}<br />
24: end if {Laufzeit 2A }<br />
25: end for {Laufzeit 3A · k(v) }<br />
26: end while {Laufzeit 3A · (n + k) , Zyklus falls i < n , sonst topologische Sortierung} { 3A · (n + k) }<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 110 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Fortsetzung)<br />
Gesamtlaufzeit: T (n, k) = 4A(n + k) + 2A(n + 1) ∈ O(n + k) .<br />
Die FOR-Schleifen in Zeilen 6 und 7 garantieren nur in dieser Reihenfolge<br />
eine Laufzeit von A · k in Zeile 10. Bei umgekehrter Reihenfolge, oder<br />
Verwendung von Adjazenzmatrizen, ergäbe sich hier A · n 2 . Ein ähnliches<br />
Argument liefert <strong>für</strong> die FOR-Schleife in Zeile 20 innerhalb der<br />
WHILE-Schleife in Zeile 18 den Term 3A · k in Zeile 26. Im Falle von<br />
Adjazenzmatrizen stünde hier 3A · n 2 .<br />
Damit wäre bei Verwendung von Adjazenzmatrizen die Laufzeit gegeben<br />
durch T (n) = 4A · (n + n 2 ) + 2A · (n + 1) ∈ O(n 2 ) .<br />
Bei der Bestimmung der Effizienz kommt es also darauf an, wie man die<br />
Größe der Eingabe definiert: Hinsichtlich der Knotenzahl |V | läuft der<br />
Algorithmus mit Adjazenzmatrizen in quadratischer Zeit, verglichen mit<br />
kubischer Zeit des naiven Algorithmus. Hinsichtlich der Summe |V | + |E|<br />
läuft der obige Algorithmus in linearer Zeit.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 111 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Fortsetzung)<br />
Korrektheit: Wenn G azyklisch ist, gibt es in jeder Runde Knoten ohne<br />
Vorgänger. Folglich gilt U ≠ ∅ , solange noch unsortierte Knoten<br />
existieren. Erfolgt in Zeile 19 die Zuweisung ord(v) = i , so wurden allen<br />
Vorgängern von v in früheren Schritten kleinere Werte zugewiesen.<br />
Aus obiger Analyse darf man allerdings nicht den Schluss ziehen, die<br />
Codierung gerichteter Graphen mittels Adjazenzlisten wäre der Codierung<br />
mittels Adjazenzmatrizen überlegen, zumal |E| ∈ O(|V | 2 ) gilt.<br />
Beispiel<br />
v1<br />
w4<br />
x3<br />
u0<br />
y2<br />
Adjazenzlisten: u → (v),, v → (w, x) , w → (()),<br />
, x → (w),, y → (x),,<br />
Knoten i In[i] ∈ U? In[i] ∈ U? In[i] ∈ U?<br />
u 0 yes<br />
v 1 0 yes<br />
w 2 1 0 yes<br />
x 2 1 0 yes<br />
y 0 yes<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 112 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Nun wenden wir uns der 2-Färbung ungerichteter Graphen zu.<br />
Satz<br />
Ein ungerichteter Graph ist genau dann 2-färbbar, wenn er keine Zyklen<br />
ungerader Länge besitzt.<br />
Beweis.<br />
Zyklen ungerader Länge sind offensichtlich nicht 2-färbbar, dürfen somit<br />
nicht als Untergraphen auftreten.<br />
Gibt es keine Zyklen ungerade Länge, so färben wir einen Knoten v und<br />
alle Knoten in gerader Entfernung von v rot, und alle übrigen Knoten<br />
blau. Nach Voraussetzung haben alle Verbindungen zwischen je zwei<br />
gleichfarbigen Knoten nur gerade Längen, während alle Verbindungen<br />
zwischen Knoten unterschiedlicher Farbe von ungerader Länge sind.<br />
Idee: Schichtweises Vorgehen: färbe gewähltes v rot, alle Nachbarn blau,<br />
die ungefärbten Nachbarn dieser Menge rot usw.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 113 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Algorithmus <strong>für</strong> 2-Färbung)<br />
Eingabe: ungerichteter Graph G = 〈V , E〉<br />
Ausgabe: eine 2-Färbung V = ROT + BLAU , falls eine existiert<br />
1: {(0) Initialisierung}<br />
2: ROT := ∅ ; BLAU := ∅ ; F := ∅ ; {Laufzeit 3A , F : Menge der Knoten in Bearbeitung} { O(1) }<br />
3: {(1) Rekursionsschritt}<br />
4: while ∃v ∈ V do<br />
5: V := V − {v} ; ROT := ROT + {v} ; F := F + {v} {Laufzeit 4A }<br />
6: while ∃w ∈ F do<br />
7: for alle Knoten u ∈ V mit {u, w} ∈ E do<br />
8: if w ∈ ROT then<br />
9: BLAU := BLAU + {u}<br />
10: else<br />
11: ROT := ROT + {u}<br />
12: end if {Laufzeit 2A }<br />
13: F := F + {u} ; V := V − {u} {Laufzeit 2A }<br />
14: end for<br />
15: F := F − {w} {Laufzeit A }<br />
16: end while<br />
17: end while { O(n + k) }<br />
18: {(2) Ausgabe}<br />
19: Überprüfen, ob BLAU oder ROT eine Kante enthalten { O(n + k) }<br />
Die Laufzeit ist linear in |V | + |E| , da jeder Knoten und jede Kante<br />
einmal “angefasst” werden.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 114 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Fortsetzung)<br />
Korrektheit: Zu jedem Zeitpunkt liegt jeder Knoten v entweder in V , in<br />
ROT oder in BLAU . Sobald V = ∅ , ist somit jeder Knoten gefärbt. Falls<br />
ROT und BLAU keine Kante enthalten, liegt eine 2-Färbung vor.<br />
Gehören die Endpunkte von 〈u, w〉 ∈ E zu ROT ( BLAU ), sind beide<br />
durch einen Weg (un)gerader Länge mit dem Startknoten v verbunden<br />
(Induktion). Damit liefern diese Wege samt 〈u, w〉 einen Zyklus ungerader<br />
Länge, Widerspruch.<br />
Beispiel<br />
a<br />
c<br />
e<br />
b<br />
d<br />
f<br />
Knoten a ∈ V a ∈ F c ∈ F d ∈ F b ∈ F e ∈ F f ∈ F<br />
V a − e b − e d, e, f f − − − −<br />
F − a b, c b, d, e b, e, f e, f f −<br />
ROT − a a a.d.e a.d.e a.d.e a.d.e a.d.e<br />
BLAU − − b, c b, c b, c, f b, c, f b, c, f b, c, f<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 115 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Algorithmus <strong>für</strong> 3-Färbung)<br />
Eingabe: Ungerichteter Graph G = (V , E) mit n Knoten und k Kanten<br />
Ausgabe: G mit 3 Farben färben<br />
Es ist kein effizienter Algorithmus bekannt (Begründung später). Wenn<br />
man alle möglichen Färbungen auf ihre Korrektheit prüfen will, ergibt sich<br />
eine Laufzeit O(3 n ) . Andererseits kann man nichtdeterministisch eine<br />
potentielle Färbung raten und diese deterministisch überprüfen.<br />
Beispiel (Algorithmus <strong>für</strong> gerichteten Weg)<br />
Eingabe: Gerichteter Graph G = 〈V , E〉 , Knoten v, w ∈ V<br />
Aufgabe: entscheiden, ob gerichteter G -Weg von v nach w existiert<br />
Idee: iterativ die von v aus erreichbaren Knoten bestimmen und in einer<br />
Hilfs-Menge M sammeln; wenn w am Ende zu M gehört, existiert ein<br />
gerichteter Weg von v nach w .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 116 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Beispiel (Fortsetzung)<br />
1: {(0) Initialisierung}<br />
2: M := {v} { M : die von v erreichbaren Knoten}<br />
3: {(1) Rekursionsschritt}<br />
4: while eine Kante 〈x, y〉 mit x ∈ M und y /∈ M existiert do<br />
5: M := M + {y}<br />
6: E := E − {〈x, y〉}<br />
7: end while<br />
8: {(2) Ausgabe}<br />
9: JA, falls w ∈ M , sonst NEIN<br />
Korrektheit: Klar!<br />
Laufzeit: Entscheidend ist die WHILE-Schleife in Zeilen 4–7. Bei<br />
Verwendung von Adjazenzlisten werden maximal n-mal alle k Kanten<br />
getestet, was in einer Laufzeit von O(n · k) resultiert. Im Falle von<br />
Adjazenzmatrizen ist stattdessen eine (n × n)-Matrix maximal n-mal<br />
nach Einsen zu durchsuchen, also ergibt sich O(n 3 ) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 117 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
Im Allgemeinen soll die Codierung der Eingaben “vernünftig” sein, etwa:<br />
Zahlen werden binär oder dezimal codiert (so daß ihr Wert<br />
exponentiell in der Länge der Darstellung ist), aber nicht unär (wobei<br />
der Wert mit der Länge übereinstimmt).<br />
Graphen werden mittels Adjazenzmatrizen oder -listen codiert.<br />
Aussagenlogische Formeln werden häufig in konjunktiver Normalform<br />
(KNF) codiert, d.h.,<br />
− jede Formel ϕ ist die Konjunktion von Klauseln;<br />
− jede Klausel ist die Disjunktion von Literalen;<br />
− jedes Literal ist entweder eine Variable oder die Negation einer solchen.<br />
Jede aussagenlogische Formel kann in eine äquivalente Formel in KNF<br />
umgewandelt werden, etwa unter Verwendung der Distributivgesetze<br />
und der de Morgan’schen Regeln.<br />
Ist die Anzahl der Literale pro Klausel durch m ∈ N beschränkt,<br />
sprechen wir von m-KNF. Ein Beispiel in 2-KNF ist etwa<br />
ϕ = (¬x ∨ y) ∧ (¬x ∨ z) ∧ (x ∨ ¬z)<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 118 / 215
6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />
In Analogie zur m-Färbbarkeit von Graphen stellt sich im Fall logischer<br />
Formeln die Frage der m-Erfüllbarkeit:<br />
Beispiel<br />
Das E-Problem m-Sat hat als Eingabe eine Formel ϕ in m-KNF. Zu<br />
entscheiden ist, ob diese Formel erfüllbar ist, in dem Sinne, daß eine<br />
Belegung der auftretenden Variablen mit 0 (bzw. false ) und 1 (bzw.<br />
true ) existiert, so daß ϕ den Wert 1 ( true ) erhält.<br />
In Abschnitt 6.3 werden wir mittels Reduktion feststellen, daß 2-Sat zu<br />
P gehört, während die NP -Vollständigkeit von 3-Sat in Abschnitt 6.4<br />
nachgewiesen wird. Das unbeschränkte Erfüllbarkeitsproblem Sat ist<br />
natürlich ebenfalls NP -vollständig (Cooke’scher Satz).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 119 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
6.2 Die Komplexitätsklassen P und NP<br />
Unter P ( NP ) wollen wir die Klasse aller E-Probleme verstehen, die von<br />
einem (nicht-)deterministischen Algorithmus in polynomialer Zeit gelöst<br />
werden können.<br />
Dabei soll die konkrete Implementierung des Algorithmus irrelevant sein,<br />
d.h., P und NP sind unabhängig vom verwendeten Algorithmusmodell.<br />
Wenn dies gewährleistet ist, kann man ein bequemes Modell wählen, etwa<br />
TM’n mit mehreren Bändern.<br />
Definition<br />
Eine Funktion N t R + wird als Zeitkomplexität einer nTM M<br />
bezeichnet, wenn M <strong>für</strong> jede Eingabe w ∈ Σ n immer nach höchstens<br />
t(n) Schritten hält. D. h., die Tiefe des Berechnungsbaums von w ist<br />
durch t(|w|) beschränkt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 120 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Bemerkung<br />
Gelegentlich wird <strong>für</strong> die Zeitkomplexität nichtdeterministischer Maschinen<br />
M gefordert, daß nur <strong>für</strong> Wörter aus L(M) eine (etwa die kürzeste)<br />
akzeptierende Berechnung der Länge nach durch t(|w|) beschränkt sein<br />
muß. Dies folgt sofort aus der obigen Definition.<br />
Umgekehrt möchte man M um einen Schrittzähler ergänzen und<br />
Berechnungen von w abbrechen, sobald sie mehr als t(|w|) Schritte<br />
brauchen. Dabei sind |w| und t(|w|) vorher zu bestimmen, was<br />
O(|w| + T (|w|)) Schritte braucht, wobei T die Zeitkomplexität einer<br />
Maschine ist, die t berechnet. Die Zeitkomplexität der modifizierten<br />
Maschine liegt dann in O(n + T (n) + t(n)) . Damit dies mit O(t(n))<br />
übereinstimmt, sollte {n, T (n)} ⊆ O(t(n)) gelten.<br />
Zwar sind beide Definitionen der Zeitkomplexität i.A. nicht äquivalent,<br />
aber sofern es sich bei t und T um Polynome handelt, bleibt die<br />
Zeitkomplexität polynomial, was <strong>für</strong> unsere Zwecke ausreicht.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 121 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Beispiel<br />
Vollständig deterministische endliche Automaten (vDEA’s) verbrauchen<br />
pro Schritt ein Symbol der Eingabe und halten dann. Also benötigen sie<br />
lineare Zeit O(n) .<br />
Beispiel<br />
Eine dTM <strong>für</strong> die Sprache L = { w ∈ {a, b} ∗ : w = sp(w) } aller<br />
Palindrome über Σ = {a, b} könnte wie folgt operieren:<br />
Zeichen am rechten Rand löschen und im Zustand speichern;<br />
linken Rand suchen, und dortiges Zeichen mit dem gespeicherten<br />
Wert vergleichen; im Erfolgsfall linkes Randzeichen löschen und mit<br />
dem nächsten Zeichen von links symmetrisch analog verfahren.<br />
Bei gleichzeitigem Schreiben und Bewegen erfordern die ⌈n/2⌉ Durchläufe<br />
n + 1 , n − 1 , . . . 1 Schritte, was sich durch ⌈n/2⌉(⌈n/2⌉ + 3)/2 ∈ O(n 2 )<br />
abschätzen läßt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 122 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Anmerkungen:<br />
Bei gleichzeitiger Bearbeitung von k Zeichen läßt sich eine<br />
Beschleunigung um den Faktor k erreichen, da sich die Anzahl der<br />
Durchläufe entsprechend verringert.<br />
Bei Verwendung einer 2-Band TM kann die Eingabe einmal kopiert<br />
und die Kopie direkt in umgekehrter Richtung mit dem Original<br />
verglichen werden, wodurch das Speichern des am Rand gelöschten<br />
Symbols und die jeweilige Suche nach dem anderen Rand entfällt.<br />
Damit läßt sich eine Laufzeit der Größenordnung O(n) realisieren.<br />
In Abschnitt 6.4 werden wir zeigen, daß folgende Definition der Klassen P<br />
und NP unter solchen Modifikationen des Maschinenmodells robust ist.<br />
Definition<br />
P ( NP ) ist die Klasse der entscheidbaren formalen Sprachen L , die von<br />
einer dTM (nTM) mit polynomialer Zeitkomplexität akzeptiert werden<br />
können, d.h., es existiert eine d/nTM M mit L = L(M) , und ein Polynom<br />
p so daß jede Berechnung von w nach höchstens p(|w|) Schritten hält.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 123 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Satz<br />
P ⊆ NP<br />
Beweis.<br />
Klar, da jede dTM auch eine nTM ist.<br />
Auch hier gibt es im nichtdeterministischen Fall einen alternativen Zugang:<br />
anstelle eine Sprache aus NP zu entscheiden, kann man sie verifizieren:<br />
Definition<br />
Für L ⊆ Σ ∗ heißt L check<br />
⊆ Γ ∗ mit Σ ⊆ Γ Zertifikatssprache, falls<br />
L check<br />
∈ P , eine entsprechende dTM heißt Verifizierer;<br />
es existiert ein Polynom q so daß <strong>für</strong> jedes w ∈ Σ ∗<br />
w ∈ L gdw wz ∈ L check<br />
<strong>für</strong> ein Wort z ∈ Γ ∗ mit |z| ≤ q(|w|)<br />
Ein solches z heißt Zertifikat <strong>für</strong> w .<br />
gilt<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 124 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Satz<br />
NP besteht genau aus den Sprachen, die Zertifikatssprachen besitzen.<br />
Beweis<br />
Ein Verifizierer M check<br />
, mit Zeitkomplexität p , <strong>für</strong> L check<br />
, mit<br />
Längenkomplexität q , liefert einen Entscheider M <strong>für</strong> L wie folgt:<br />
B 0 enthält die Eingabe w ; ihre Länge |w| und q(|w|) werden auf<br />
auf B 3 gespeichert, was O(q(|w|)) Schritte erfordert;<br />
auf B 1 wird nichtdeterministisch ein Wort z ∈ Γ ∗ mit |z| ≤ q(|w|)<br />
erzeugt (“geraten”); dies erfordert 2|z| ∈ O(q(|w|)) Schritte;<br />
auf B 2 wird M check<br />
mit Eingabe wz simuliert.<br />
M hält und akzeptiert genau dann, wenn die Simulation von M check<br />
dies<br />
tut und hat Zeitkomplexität in O(p(q(n))) .<br />
Umgekehrt sei M ein Entscheider <strong>für</strong> L mit Zeitkomplexität t . Als<br />
Zertifikate <strong>für</strong> w ∈ L verwenden wir die Wegbeschreibungen der<br />
akzeptierenden Berechnungen von w im M -Berechnungsbaum, genauer:<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 125 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Beweis (Fortsetzung)<br />
Der M -Berechnungsbaum von w hat eine Tiefe ≤ t(|w|) . Die maximale<br />
Verzweigungszahl sei r ∈ N . Jeder Weg von der Initialkonfiguration zu<br />
einer Haltekonfiguration, also jede Berechnung, kann nun durch ein Wort<br />
in {0, . . . , r − 1} ∗ der Länge ≤ t(|w|) eindeutig beschrieben werden<br />
(aber nicht jedes derartige Wort muß einer Berechnung entsprechen).<br />
L check<br />
besteht dann aus den Wörtern wz ∈ (Σ + r) ∗ mit w ∈ L und z<br />
Wegbeschreibung einer akzeptierenden Berechnung <strong>für</strong> w .<br />
Die Maschine M check<br />
simuliert bei Eingabe wz den Ablauf der Maschine<br />
M mit Eingabe w gemäß der durch z spezifizierten Berechnung und ist<br />
somit deterministisch. Die Simulation erfordert |z| ≤ t(|w|) Schritte.<br />
Das obige maschinenbezogene Zertifikat wird in der Praxis meist sehr<br />
unhandlich sein. Dort verwendet man meistens problembezogene<br />
Zertifikate.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 126 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Beispiel (Eine Zertifikatssprache <strong>für</strong> 3-Färbbarkeit)<br />
Die Codierung ungerichteter Graphen G = 〈V , E〉 erfolgt mittels<br />
Adjazenzmatrizen w und der Größenangabe n := |V | . Als Zertifikat<br />
verwenden wir Codierungen z von Zufallszerlegungen V = R + G + B .<br />
wz ∈ L check<br />
gdw ∀e ∈ E. e ⊈ R ∧ e ⊈ G ∧ e ⊈ B<br />
Teilmengen von V lassen sich als binäre n-Tupel codieren, während<br />
Adjazenzmatrizen die Größe n 2 haben.<br />
L check<br />
∈ P : zu überprüfen ist, ob die Eingabe aus n 2 + 3n Bits besteht,<br />
und dann, ob die Teilmengen R, G, B ⊆ V , paarweise disjunkt sind, V<br />
ausschöpfen, und keine Kanten {u, v} ∈ E als Teilmenge enthalten. Dies<br />
kann durch bitweise Vergleiche geschehen, also in polynomialer Zeit.<br />
Damit gilt 3-Färbbarkeit ∈ NP .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 127 / 215
6. Komplexität von Algorithmen 6.2 Die Komplexitätsklassen P und NP<br />
Abschließend überlegen wir uns, daß zumindest P nicht mit der Klasse<br />
der entscheidbaren Probleme übereinstimmt:<br />
Beispiel<br />
Folgende entscheidbare(!) Sprache gehört nicht zu P :<br />
L exp<br />
:= { c(M) : die TM M akzeptiert w := c(M) in ≤ 2 |w| Schritten }<br />
In der HA werden wir die Abgeschlossenheit von P unter Komplementbildung<br />
nachweisen. Aus der Annahme L exp<br />
∈ P folgt dann L exp<br />
∈ P .<br />
Somit existiert eine TM ¯M mit einem Polynom ¯p als Zeitkomplexität, die<br />
L( ¯M) = L exp<br />
erfüllt. Wähle n 0 ∈ N mit<br />
¯p(n) ≤ 2 n<br />
<strong>für</strong> alle n ≥ n 0 , und<br />
|c( ¯M)| ≥ n 0 (ggf. Zustände zu ¯M hinzufügen)<br />
Falls ¯w := c( ¯M) ∈ L exp<br />
, dann wird ¯w von ¯M in ≤ ¯p(| ¯w|) ≤ 2 | ¯w|<br />
Schritten akzeptiert, d.h., ¯w ∈ L exp<br />
, .<br />
Falls ¯w = c( ¯M) /∈ L exp<br />
= L( ¯M) , folgt c( ¯M) ∈ L exp<br />
, also ¯w ∈ L( ¯M) , .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 128 / 215
6. Komplexität von Algorithmen 6.3 Die Klasse FP von Berechnungsproblemen<br />
6.3 Berechnungsprobleme und Reduzierbarkeit<br />
Bisher hatten wir die Zeitkomplexität von E-Problemen betrachtet. Um<br />
verschiedene E-Probleme miteinander vergleichen, genauer, sie aufeinander<br />
reduzieren, zu können, müssen wir auch die Zeitkomplexität von<br />
B-Problemen betrachten.<br />
Beispiel<br />
Unser Algorithmus zur 2-Färbung von Graphen (falls eine solche existiert)<br />
bildet den Code eines Graphen auf den Code einer 2-Färbung ab, bzw. auf<br />
die codierte Nachricht, daß keine solche Färbung existiert.<br />
Definition<br />
FP ist die Klasse aller Funktionen Σ ∗ Γ ∗ , <strong>für</strong> die eine dTM M und<br />
ein Polynom p existieren, so daß f von M berechnet wird und die<br />
Berechnung von w ∈ Σ ∗ höchstens p(|w|) Schritte benötigt.<br />
f<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 129 / 215
6. Komplexität von Algorithmen 6.3 Die Klasse FP von Berechnungsproblemen<br />
Beispiel (Starke Komponenten)<br />
Eingabe: gerichteter Graph G = 〈V , E〉<br />
Aufgabe: die maximalen Mengen wechselseitig durch gerichtete Wege<br />
miteinander verbundener Knoten (=”starke Komponenten”) berechnen<br />
1: {(0) Initialisierung}<br />
2: i := 0 { i : der Komponentenzähler}<br />
3: {(1) Rekursionsschritt}<br />
4: while V ≠ ∅ do<br />
5: wähle v ∈ V ; V := V − {v}<br />
6: K i := {v} { K i : die neu zu bestimmende Komponente}<br />
7: for alle Knoten w ∈ V do<br />
8: if gerWeg(v, w) und gerWeg(w, v) then<br />
9: K i := K i + {w} ; V := V − {w}<br />
10: end if<br />
11: end for<br />
12: end while<br />
Im Wesentlichen wird der Algorithmus <strong>für</strong> gerichteten Weg mit Laufzeit<br />
O(n + k) in der maximal n-mal zu durchlaufenden FOR-Schleife zweimal<br />
aufgerufen. Da die WHILE-Schleife auch maximal n-mal durchlaufen wird,<br />
ergibt sich mit Adjazenzlisten eine Laufzeit von O(n 2 (n + k)) , und mit<br />
Adjazenzmatrizen von O(n 4 ) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 130 / 215
6. Komplexität von Algorithmen 6.3 Die Klasse FP von Berechnungsproblemen<br />
Beispiel<br />
a<br />
d<br />
b<br />
c<br />
e<br />
hat die starken Komponenten<br />
{a,b,c}<br />
{d,e}<br />
{f}<br />
f<br />
Die starken Komponenten von G bilden wieder einen Graphen Ḡ : dabei<br />
ist 〈K, K ′ 〉 genau dann eine Kante von Ḡ , wenn eine G -Kante von<br />
einem K -Knoten zu einem K ′ -Knoten existiert. Konstruktionsbedingt ist<br />
Ḡ azyklisch, also topologisch sortierbar.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 131 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
6.4 FP -Reduzierbarkeit<br />
Definition<br />
Eine Sprache L ⊆ Σ ∗ ist auf eine Sprache K ⊆ Γ ∗ FP -reduzierbar,<br />
Notation L ⊳ K , wenn eine Funktion Σ ∗ f<br />
Γ ∗ in FP existiert mit<br />
w ∈ L gdw f (w) ∈ K<br />
Die Einschränkung auf Funktionen aus FP ist wichtig, denn andernfalls<br />
wären alle nichttrivialen Sprachen wechselseitig aufeinander reduzierbar:<br />
<strong>für</strong> echte Teilmengen L ⊆ Σ ∗ und K ⊆ Γ ∗ wähle u ∈ K und ū ∈ Γ ∗ − K<br />
und definiere Σ ∗ f<br />
Γ ∗ durch<br />
{<br />
u falls w ∈ L<br />
f (w) =<br />
ū falls w /∈ L<br />
Dann gilt w ∈ L gdw f (w) ∈ K , aber die “Reduktion” benötigt soviel<br />
Zeit wie die Entscheidung, ob w ∈ L gilt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 132 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Die Relation ⊳ ist als ist höchstens so schwierig wie zu interpretieren und<br />
dient als Hauptwerkzeug zur Strukturierung der Klasse E aller<br />
Entscheidungsprobleme.<br />
Da FP unter Komposition abgeschossen ist und alle Identitätsfunktionen<br />
enthält, folgen Reflexivität und Transitivität der Relation ⊳ .<br />
Andererseits werden wir bald sehen, daß ⊳ nicht antisymmetrisch ist. Es<br />
ist also keine Ordnungsrelation im strengen Sinne, aber zumindest noch<br />
eine Quasi-Ordnung auf der Klasse der Entscheidungsprobleme, bzw. eine<br />
Ordnung auf der Klasse der ⊳-Äquivalenzklassen, d.h., auf den Klassen<br />
gleich schwieriger Probleme ( L ⊳ M und M ⊳ L ).<br />
Zur besseren Orientierung erwähnen wir bereits jetzt, daß die oberen<br />
⊳-Schranken der Klasse NP , d.h., die Probleme, die mindestens so<br />
schwierig wie jedes NP -Problem sind, NP -hart heißen. Schließlich<br />
bezeichnet man die NP -harten Probleme innerhalb der Klasse NP , also<br />
die schwierigsten NP -Probleme, als NP -vollständig.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 133 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Beispiel<br />
Das E-Problem Kanten-2-Färbbarkeit hat ungerichtete Graphen als<br />
Eingabe. Zu entscheiden ist, ob die Kanten derart mit 2 Farben gefärbt<br />
werden können, daß Kanten mit gemeinsamem Endpunkt verschieden<br />
gefärbt sind.<br />
Wir zeigen Kanten-2-Färbbarkeit ⊳ 2-Färbbarkeit.<br />
Idee: Die Kanten von G als Knoten eines sog. Kantengraphen G K<br />
interpretieren. Formal: G K := 〈V K , E K 〉 mit<br />
V K := E und {e, e ′ } ∈ E K gdw e ∩ e ′ ≠ ∅ ∧ e ≠ e ′<br />
Etwa<br />
2<br />
{0, 2} {1, 2}<br />
G :<br />
0 1<br />
↦→ G K :<br />
{0, 1}<br />
4 3<br />
{1, 3}<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 134 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Beispiel (Fortsetzung)<br />
Korrektheit der Reduktion G ↦→ G K : wir zeigen<br />
G ist genau dann Kanten-2-färbbar wenn G K<br />
2-färbbar ist<br />
Für eine Zerlegung der Kantenmenge E = R + B gilt.<br />
R + B = E ist eine Kanten-2-Färbung von G<br />
⇔ wenn { {u, v}, {x, y} } einfarbig, dann {u, v} ∩ {x, y} = ∅<br />
⇔ wenn { {u, v}, {x, y} } einfarbig, dann ist dies keine G K -Kante<br />
⇔ R + B = E ist eine 2-Färbung von G K<br />
Laufzeit: Die Adjazenzmatrizen A und A K der ungerichteten Graphen G<br />
bzw. G K sind symmetrisch, also durch die Einträge im oberen Dreieck<br />
bestimmt. Mit n := |V | ergibt sich in Laufzeit O(n 2 )<br />
|V K | = |E| = ∑<br />
i
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Beispiel (Fortsetzung)<br />
Wir verwenden die Positionen 〈i, j〉 mit i < j < n der Einsen in A als<br />
Knoten der Kantenmatrix; diese seien lexikographisch geordnet.<br />
Die Kanten von G K entsprechen Paaren von Einsen in derselben Zeile<br />
oder Spalte im oberen Dreieck von A . Genauer, <strong>für</strong> i < j < l < n gilt:<br />
A i,j = A i,l = 1 impliziert 〈i, j〉 〈i, l〉 in G K<br />
A i,l = A j,l = 1 impliziert 〈i, l〉 〈j, l〉 in G K<br />
In jedem Fall sind drei geschachtelte Schleifen über i < n , über i < j < n<br />
und über i < j < l < n zu durchlaufen, was eine Laufzeit von O(n 3 )<br />
liefert. Allerdings erfordert die Initialisierung der Matrix A K mit Nullen<br />
bereits O(n 4 ) Schritte.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 136 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Satz<br />
Aus L ⊳ K ∈ P (NP) folgt L ∈ P (NP) , d.h., bzgl. ⊳ ist P ( NP ) ein<br />
unterer Abschnitt der Klasse E aller E-Probleme.<br />
Beweis.<br />
Wähle eine FP -Reduktion L ⊆ Σ ∗ Γ ∗ ⊇ K, die von einer dTM M f<br />
berechnet wird, und eine d/nTM M K mit L(M K ) = K . Diese Maschinen<br />
mögen polynomiale Zeitkomplexität p f bzw. p K haben. Die<br />
Hintereinanderschaltung M L von M f und M K erfüllt<br />
w ∈ L(M L ) gdw f (w) ∈ L(M K ) = K gdw w ∈ L<br />
Da das Schreiben der Ausgabe f (w) mindestens |f (w)| Schritte<br />
erfordert, ist die Laufzeit von M L auf Eingabe w durch p K (p f (|w|))<br />
beschränkt, also hat M L ebenfalls polynomiale Zeitkomplexität.<br />
Die Zugehörigkeit zu P bzw. NP kann somit auch durch Reduktion auf<br />
andere P bzw. NP -Probleme nachgewiesen werden.<br />
f<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 137 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
6.4.1 2-Sat ∈ P<br />
Um zu zeigen, daß 2-Sat zu P gehört, wollen wir es auf ein<br />
graphentheoretisches Problem reduzieren, das aufgrund früherer Ergebnisse<br />
zu P gehört.<br />
In klassischer Logik ist die Implikation α β zu ¬α ∨ β äquivalent.<br />
Das motiviert uns, 2-KNF Formeln ϕ in Implikationsgraphen G(ϕ)<br />
umzuformen, mit den Literalen der auftretendende Variablen als Knoten<br />
und je zwei gerichteten Kanten ¬α β und ¬β α pro Klausel<br />
(α ∨ β) , etwa<br />
x<br />
¬x<br />
ϕ = (x ∨ y) ∧ (¬x ∨ z) ∧ (¬z ∨ ¬y) ↦→ G(ϕ) :<br />
y<br />
¬y<br />
z ¬z<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 138 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Korrektheit: ϕ ist erfüllbar gdw <strong>für</strong> jede Variable x die Literale x und<br />
¬x in verschiedenen starken Komponenten von G(ϕ) liegen.<br />
( ⇒ ) Wenn eine Belegung der Variablen existiert, die jeder Klausel<br />
(α ∨ β) den Wert true zuordnet, muß insbesondere α oder β mit true<br />
belegt sein. Damit hat G(ϕ) keine Kante von einem mit true zu einem<br />
mit false belegten Literal. Da je zwei Knoten einer starken Komponente<br />
auf einem gerichteten Kreis liegen, können somit die verschieden belegten<br />
Literale x und ¬x nicht in derselben starken Komponente auftreten.<br />
( ⇐ ) Wähle eine topologische Sortierung ord des Graphen der starken<br />
Komponenten [α] von G(ϕ) , α Literal, und setze<br />
x = true gdw ord[¬x] < ord[x]<br />
Ist (α ∨ β) eine Klausel mit α = false , dann gilt wegen der Kanten<br />
¬β α und ¬α β in G(ϕ)<br />
und folglich β = true .<br />
ord[¬β] ≤ ord[α] < ord[¬α] ≤ ord[β]<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 139 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Auf welches Problem habe wir 2-Sat eigentlich reduziert?<br />
Definition<br />
SinvKomp hat als Eingabe einen gerichteten Graphen G = 〈V , E〉 und<br />
eine selbstinverse Abbildung V f V ohne Fixpunkte.<br />
Zu entscheiden ist, ob <strong>für</strong> jedes u ∈ V die Knoten u und f (u) in<br />
verschiedenen starken Komponenten von G liegen.<br />
Offenbar gehört SinvKomp zu P , da die Berechnung der starken<br />
Komponenten in polynomialer Zeitkomplexität erfolgen kann, wie auch die<br />
Überprüfung, ob a und f (a) zu derselben starken Komponente gehören.<br />
Es bleibt nachzuweisen, daß unsere Reduktion ϕ ↦→ G(ϕ) zu FP gehört.<br />
Als Maß m <strong>für</strong> die Größe der Eingabe ϕ bietet sich die Länge des Strings<br />
an, einschließlich Klammern bei Infix-Notation. Die Ermittlung der<br />
Variablen in ϕ und somit der Knoten von G(ϕ) erfordert lineare Zeit,<br />
ebenso wie das Eintragen der zwei Kanten pro Klausel.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 140 / 215
6. Komplexität von Algorithmen 6.4 FP - Reduzierbarkeit<br />
Beispiel<br />
Die obige Formel ϕ = (x ∨ y) ∧ (¬x ∨ z) ∧ (¬z ∨ ¬y) ist erfüllbar, da sich<br />
die positiven und negativen Varianten der Variablen x , y und z auf die<br />
beiden starken Komponenten des zugehörigen Graphen G(ϕ) verteilen.<br />
Die Belegung x = z = true und y = false und ihre Negation liefern<br />
beide den Wert true <strong>für</strong> ϕ .<br />
Andererseits ist ψ = (y ∨ x) ∧ (¬y ∨ z) ∧ (¬z ∨ x) ∧ (¬x ∨ ¬t) ∧ (t ∨ ¬x)<br />
nicht erfüllbar, da G(ψ) nur eine starke Komponente besitzt:<br />
x<br />
y<br />
z<br />
t<br />
¬x ¬y<br />
¬z<br />
¬t<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 141 / 215
6. Komplexität von Algorithmen 6.5 Robustheit der Klassen P und N P<br />
6.5 Robustheit der Klassen P und N P<br />
Wir untersuchen die Robustheit der mittels Standard-TMn á la TU-BS<br />
definierten Klasse P unter Abschwächungen des TMn-Modells. Analog<br />
kann man auch <strong>für</strong> andere Algorithmenmodelle verfahren. Schließlich fallen<br />
auch noch die Abschlußeigenschaften von P in diese Rubrik.<br />
Zusätzlicher Speicher: Man integriert ein endliches Alphabet A von<br />
Speichersymbolen, indem man die Zustandsmenge Q durch Q × A<br />
ersetzt. Außerdem sind Elemente a 0 , a F ∈ A auszuzeichnen, um Anfangsund<br />
Endzustände definieren zu können. Die Zeitkomplexität bleibt<br />
unverändert.<br />
Erweitertes Bandalphabet: Wenn Σ + {#} echte Teilmenge von B ist,<br />
kann man zum Alphabet Σ ′ := B − {#} übergehen und einen<br />
Präprozessor vorschalten, der eine Eingabe w ∈ (Σ ′ ) ∗ per Zusatzspeicher<br />
darauf prüft, ob sie zu Σ ∗ gehört. Dieser Aufwand ist linear in |w| .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 142 / 215
6. Komplexität von Algorithmen 6.5 Robustheit der Klassen P und N P<br />
Mehrspur-TM: Hier dient B k als Bandalphabet, mit Blanksymbol<br />
〈# : i < k〉 . Zu Beginn steht die Eingabe auf der ersten Spur. Die<br />
Identifikation des Alphabets Σ mit Σ × {〈# : i < n − 1〉} erlaubt uns<br />
nun, Mehrspur-Maschinen als Spezialfall von Maschinen mit erweitertem<br />
Bandalphabet aufzufassen, s.o.<br />
Mehrband-TM: Hierbei existieren k unabhängige Schreib-Leseköpfe.<br />
ObdA nehmen wir an, daß M pro Schritt immer nur auf einem Band<br />
arbeitet. Andernfalls verlängert die Sequentialisierung von M die<br />
Zeitkomplexität nur um einen Faktor k .<br />
Die Simulation kann durch eine TM mit 2k Spuren erfolgen: Spur 2i<br />
enthält den Inhalt von Band i , während Spur 2i + 1 nur die Kopfposition<br />
auf Band i verzeichnet.<br />
Satz<br />
Jede k -Band dTM M mit mindestens linearer Zeitkomplexität t kann<br />
durch eine Einband-TM M ′ mit Zeitkomplexität t 2 simuliert werden.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 143 / 215
6. Komplexität von Algorithmen 6.5 Robustheit der Klassen P und N P<br />
Beweis.<br />
In den ungeraden Spuren wird zunächst unter dem letzten<br />
Eingabesymbol in Spur 0 eine Kopfmarkierung gesetzt, was konstante<br />
Zeit erfordert.<br />
Eine M -Aktion auf Band i kann durch M ′ auf den Spuren 2i und<br />
2 i + 1 simuliert werden, in derselben Zeit, die M benötigt.<br />
Um eine nachfolgende Aktion auf Band j zu simulieren, ist der Kopf<br />
von M ′ zur Kopf-Markierung auf Spur 2j + 1 zu verschieben. Dazu<br />
sind bei Eingabe w maximal t(|w|) Schritte nötig.<br />
Insgesamt wird die Schrittzahl also höchstens quadriert.<br />
Somit dürfen wir bei Komplexitätsargumenten auf die bequemeren<br />
Mehrband-Maschinen zurückgreifen.<br />
Für andere Algorithmenmodelle (RAM, reale Rechner, etc.) kann man den<br />
Zeitbedarf bei der Simulierung durch (Mehrband-)TMn ermitteln. Dieser<br />
stellt sich als polynomial heraus, daher bleibt P invariant.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 144 / 215
6. Komplexität von Algorithmen 6.5 Robustheit der Klassen P und N P<br />
Satz<br />
P ist abgeschlossen unter binären Vereinigungen und Durchschnitten,<br />
Komplementbildung, Konkatenation und Kleene-Stern.<br />
Beweis.<br />
Für binäre Vereinigungen und Durchschnitte, sowie <strong>für</strong> Kleene-Stern vergl.<br />
HA. Für die Komplementbildung verwende die Konstruktion M ↦→ M ′ aus<br />
dem Nachweis der Nichtentscheidbarkeit von L acc<br />
.<br />
Konkatenation: Die dTM M i möge immer halten und L i ⊆ Σ ∗ i<br />
in<br />
polynomialer Zeit p i akzeptieren, i < 2 . Die Maschine M zerlegt die<br />
Eingabe w ∈ (Σ 0 ∪ Σ 1 ) ∗ systematisch in zwei Teile w 0 und w 1 mit<br />
w 0 w 1 = w und untersucht diese auf Zugehörigkeit zu L i , i < 2 . Sobald<br />
beide Tests positiv ausfallen, wird w akzeptiert. Die Anzahl der<br />
Zerlegungen ist durch |w| + 1 beschränkt, die Laufzeit der Tests auf<br />
max{p 0 (|w|), p 1 (|w|)} .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 145 / 215
6. Komplexität von Algorithmen 6.6 Einige Probleme aus NP<br />
6.6 Einige Probleme aus NP<br />
Beispiel ( Hamiltonscher Kreis ∈ NP )<br />
Das E-Problem Hamiltonscher Kreis hat als Eingabe einen ungerichteten<br />
Graphen G = 〈V , E〉 mit n := |V | Knoten.<br />
Zu entscheiden ist, ob G einen Hamiltonschen Kreis besitzt, d.h., eine<br />
Permutation π der Knoten, so daß sie in dieser Reihenfolge durch Kanten<br />
zu einem Kreis verbunden werden können, formal<br />
{π(i), π(i + 1 mod n)} ∈ E <strong>für</strong> i < |V |<br />
Als Zertifikate eignen sich Permutationen von V . Die Überprüfung, ob die<br />
entsprechenden Kanten existieren, kann in linearer Zeit erfolgen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 146 / 215
6. Komplexität von Algorithmen 6.6 Einige Probleme aus NP<br />
Beispiel ( TSP ∈ NP )<br />
Das Travelling Salesman Problem in seiner Entscheidungsvariante TSP hat<br />
als Eingabe n Städte (geographische Orte) S i , i < n , eine<br />
(symmetrische) Matrix d von Entfernungen und eine Schranke K .<br />
Zu entscheiden ist, ob eine Rundreise existiert, die alle Städte genau<br />
einmal besucht (ein Hamilton’scher Kreis), so daß ihre Länge, die Summe<br />
der Entfernungen aufeinanerfolgender Städte, durch K nach oben<br />
beschränkt ist.<br />
Als potentielle Zertifikate eignen sich wieder Permutationen π von V . In<br />
linearer Zeit überprüft man die Gültigkeit von<br />
∑<br />
d π(i),π(i+1 mod n) ≤ K<br />
i
6. Komplexität von Algorithmen 6.6 Einige Probleme aus NP<br />
Beispiel ( Sat ∈ NP )<br />
Sat hat als Eingabe eine Boole’sche Formel ϕ(x 0 , . . . , x n−1 ) in KNF<br />
(ohne Beschränkungen in der Länge der Klauseln). Zu entscheiden ist, ob<br />
ϕ erfüllbar ist.<br />
Als Kandidaten <strong>für</strong> ein Zertifikat eignen sich Zufallsbelegungen der<br />
Variablen x 0 . . . x m−1 . Die Berechnung des Wahrheitswerts von ϕ kann<br />
wiederum in polynomialer Zeit erfolgen.<br />
Beispiel ( Zerlegbarkeit ∈ P , erst seit 2004 bekannt)<br />
Primes hat als Eingabe eine natürliche Zahl n . Zu entscheiden ist, ob<br />
n eine Primzahl ist.<br />
2004 zeigten Agrawal, Kayal und Saxena Primes ∈ P . Da P unter<br />
Komplementbildung abgeschlossen ist, gehört das Problem<br />
Zerlegbarkeit ebenfalls zu P , bei dem zu entscheiden ist, ob n<br />
zusammengesetzt ist. Eine Lösung liefert leider keine Hinweise auf<br />
Primfaktoren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 148 / 215
6. Komplexität von Algorithmen 6.6 Einige Probleme aus NP<br />
Wie wir auf Seite 21 gesehen haben, kann jede immer haltende 1-Band<br />
nTM M durch eine immer haltende 3-Band dTM M ′ simuliert werden,<br />
indem “breadth first” alle M -Berechnungen bis zu einer vorgegebenen<br />
Tiefe nach akzeptierenden Haltekonfigurationen durchsucht werden.<br />
Corollar<br />
Jede nTM mit Zeitkomplexität t(n) kann durch eine dTM mit Zeitkomplexität<br />
O(2 c·t(n) ) , c ∈ R + geeignete Konstante, simuliert werden.<br />
Speziell ist L ∈ NP durch eine dTM mit Zeitkomplexität 2 p(n) , p<br />
Polynom, entscheidbar.<br />
Beweis<br />
Für |w| = n ist die Anzahl der Tupel auf B 2 durch ∑ i
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
6.7 NP -Vollständigkeit und Cooke’scher Satz<br />
Definition<br />
Ein E-Problem L heißt<br />
NP -hart, falls L obere ⊳-Schranke von NP ist, d.h., <strong>für</strong> jedes<br />
NP -Problem K gilt K ⊳ L ; Bezeichnung NPH<br />
NP -vollständig, falls L ⊳-größtes Elemente von NP ist, d.h.,<br />
L ∈ NP ist NP -hart; Bezeichnung NPV .<br />
Satz<br />
Existiert ein NP -vollständiges Problem L ∈ P , so folgt P = NP .<br />
Beweis.<br />
Nach Definition läßt sich jedes Problem K ∈ NP auf L reduzieren und<br />
folglich in polynomialer Zeit durch eine dTM lösen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 150 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Satz (Cook’scher Satz)<br />
Das E-Problem Sat der Erfüllbarkeit einer Boole’schen Formel in KNF ist<br />
NP -vollständig.<br />
Beweis<br />
Die Zugehörigkeit zu NP war bereits oben gezeigt worden.<br />
Für jede Sprache {0, 1} ∗ ⊇ L ∈ NP bleibt zu zeigen: L ⊳ Sat<br />
Idee: Ausgehend von einer nTM M , die L in polynomialer Zeit p<br />
akzeptiert, konstruiert man zu jedem w ∈ L eine Boole’sche Formel ϕ w<br />
in KNF, die eine akzeptierende Berechnung von w durch M beschreibt.<br />
Dann ist nachzuweisen:<br />
⊲ w ∈ L gdw. ϕ w erfüllbar (Korrektheit der Reduktion)<br />
⊲ ϕ w kann in Zeit O(p(|w|) 2 ) aus w konstruiert werden (damit<br />
gehört die Reduktion zu FP ).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 151 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Vorbereitung: gegeben ist eine binäre 1-Band nTM M mit polynomialer<br />
Zeitkomplexität p und L(M) = L .<br />
⊲ Die Zustände sind vom Anfangszustand q 0 bis zum Endzustand<br />
(dieser hat keine Übergänge) durchnummeriert.<br />
q m−1<br />
⊲ B = {s 0 , s 1 , s 2 } mit s 0 = # , s 1 = 0 , s 2 = 1 , s 3 = L und s 4 = R .<br />
⊲ Das Band sei durch Z indexiert, mit 0 an der Position des Kopfes in<br />
der Initialkonfiguration mit Eingabe w . Es genügt, Zellen im Bereich<br />
−p(|w|) bis p(|w|) zu betrachten.<br />
⊲ Es gibt d Übergänge 〈q i(y) , s j(y) 〉 ↦→ 〈q i ′ (y), s j ′ (y)〉 , y < d , mit<br />
d<br />
i, i ′ n , d<br />
j<br />
3 und d<br />
j ′ 5 (Indexfunktionen)<br />
Die Formel ϕ w soll eine akzeptierende Berechnung von M auf Eingabe<br />
w beschreiben. Dabei ist zu maximal p(|w|) Zeitpunkten der Inhalt von<br />
2p(|w|) Bandzellen zu spezifizieren, weiterhin Zustand und Kopfposition<br />
der Maschine und, bis auf den letzten Zeitpunkt, der aktuelle Übergang.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 152 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Da<strong>für</strong> dienen entsprechende Variable:<br />
Name Interpretation: zur Zeit t Anzahl<br />
qi t ist M in Zustand q i i < m, t < p(|w|)<br />
kr t ließt M Bandzelle r −p(|w|) < r < p(|w|), t < p(|w|)<br />
l t r , nr t , er t , steht #, 0, 1 in Bandzelle r −p(|w|) < r < p(|w|), t < p(|w|)<br />
uy t wird Übergang y ausgeführt y < d, t < p(|w|) − 1<br />
ϕ w<br />
wird Konjunktion der Beschreibung folgender vier Teile sein:<br />
der Initialkonfiguration;<br />
der Akzeptanzbedingung <strong>für</strong> w ;<br />
der Konsistenzbedingungen (KBD’n) <strong>für</strong> M : zu jedem Zeitpunkt t<br />
− ist M in höchstens einem Zustand;<br />
− steht in jedem Feld genau ein Symbol;<br />
− steht der Kopf auf genau einer Position;<br />
− findet höchstens ein Übergang statt.<br />
des Übergangseffekts auf Zustand, Kopfposition und Bandinhalt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 153 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Initialkonfiguration: Initialzustand bzw. -kopfposition sind bestimmt<br />
durch q0<br />
0 und k0 0 , während der Bandinhalt w = s 0 . . . s n−1 ∈ {0, 1} ∗<br />
mittels geeigneter Variablen nr 0 bzw. er 0 mit −n < r ≤ 0 spezifiziert<br />
wird. Dazu kommt die Angabe, daß die übrigen relevanten Felder leer sind:<br />
⎛<br />
⎞ ⎛ ⎞<br />
∧<br />
⎝<br />
⎠ ∧ ⎝<br />
∧ ⎠<br />
l 0 r<br />
l 0 r<br />
−p(n)
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
KBD Zustände: Für t < p(n) ist M in höchstens einem Zustand:<br />
q t i ⇒ ¬q t j bzw. ¬q t i ∨ ¬q t j <strong>für</strong> alle i < j < m<br />
(m(m − 1)/2 Klauseln)<br />
KBD Feldinhalt: Für t < p(n) und −p(n) < r < p(n) gilt<br />
(l t r ∨ n t r ∨ e t r ) ∧ (¬l t r ∨ ¬n t r ) ∧ (¬n t r ∨ ¬e t r ) ∧ (¬e t r ∨ ¬l t r )<br />
Diese 4 · p(n)(2p(n) − 1) ∈ O((p(n)) 2 ) Klauseln besagen, daß jedes<br />
relevante Feld genau ein Symbol enthält.<br />
KBD Kopfposition: Für t < p(n) drücken 1 + (2p(n) − 1)(p(n) − 1)<br />
Klauseln aus, daß der Kopf in genau einer Position steht:<br />
⎛<br />
⎝<br />
⎞<br />
∨<br />
⎠ ∧<br />
∧ (<br />
¬k<br />
t<br />
r ∨ ¬kr t )<br />
′<br />
−p(n)
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
KBD Übergänge: Für t < p(n) drücken d(d − 1)/2 Klauseln aus, daß<br />
höchstens ein Übergang stattfindet:<br />
¬u t y ∨ ¬u t z <strong>für</strong> y < z < d<br />
Beschreibung der Übergangseffekte: Für jeden der d Übergänge<br />
〈q i(y) , s j(y) 〉 ↦→ 〈q i ′ (y), s j ′ (y)〉 drücken p(n) − 1 Teilformeln(!) die<br />
Zustandsänderung <strong>für</strong> t < p(n) − 1 aus:<br />
(<br />
)<br />
uy t ⇒ qi(y) t ∧ qt+1 i ′ (y)<br />
Gemäß der Definition der Implikation liefern die Distributivgesetze nun<br />
insgesamt 2 (p(n) − 1) d äquivalente Klauseln:<br />
( ) ( )<br />
¬uy t ∨ qi(y)<br />
t ∧ ¬uy t ∨ q t+1<br />
i ′ (y)<br />
<strong>für</strong> t < p(n) − 1 und y < d<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 156 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Falls s j(y) = 0 und s j ′ (y) = L , beschreiben weitere 2(p(n) − 1) 2<br />
Teilformeln Kopfbewegung und den ursprünglichen Feldinhalt:<br />
(<br />
u<br />
t<br />
y ∧ kr t ) (<br />
⇒ k<br />
t+1<br />
r−1 ∧ )<br />
nt r <strong>für</strong> t < p(n) − 1 , − p(n) + 1 < r < p(n)<br />
Nach Definition der Implikation liefern die de Morganschen Regeln und die<br />
Distributivgesetze nun 4(p(n) − 1) 2 äquivalente Klauseln:<br />
¬ ( uy t ∧ kr<br />
t ) (<br />
∨ k<br />
t+1<br />
r−1 ∧ ) ( nt r ⇔ ¬u<br />
t<br />
Y ∨ ¬kr<br />
t ) (<br />
∨ k<br />
t+1<br />
∧ )<br />
nt r<br />
⇔ ( ¬uY t ∨ ¬kt r ∨ kr−1) t+1 (<br />
∧ ¬u<br />
t<br />
Y ∨ ¬kr t ∨ nr<br />
t )<br />
Schließlich bleibt wegen s j ′ (y) = L der Bandinhalt unverändert:<br />
(<br />
u<br />
t<br />
y ∧ xr t )<br />
⇒ x<br />
t+1<br />
r bzw. ¬uy t ∨ ¬xr t ∨ xr<br />
t+1<br />
<strong>für</strong> t < p(n) − 1 , −p(n) + 1 < r < p(n) und x ∈ {l, n, e} , was weitere<br />
6(p(n) − 1) 2 Klauseln liefert.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 157 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Falls s j(y) ∈ {#, 1} bzw. s j ′ (y) = R kann man analog verfahren, während<br />
<strong>für</strong> Aktionen der Form s j ′ (y) ∈ {#, 0, 1} insbesondere die Klauseln <strong>für</strong> den<br />
Bandinhalt zur Zeit t + 1 anzupassen sind (HA).<br />
Schließlich bleibt auszudrücken, daß Zustände außer q0<br />
0 tatsächlich nur<br />
aufgrund von Übergängen entstehen. Leider ist es nicht möglich, <strong>für</strong><br />
t < p(n) − 1 folgende Klausel zu verwenden (warum?)<br />
∨<br />
y
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Beweis (Fortsetzung)<br />
Laufzeit: ϕ w entsteht durch Konjunktion aller Klauseln. Die resultierende<br />
Formel in KNF hat eine Länge, die quadratisch in p(n) , und damit<br />
polynomial in n = |w| ist.<br />
Korrektheit: Nach Konstruktion existiert eine Variablenbelegung, die ϕ w<br />
den Wert true zuordnet, wenn M bei Eingabe w eine akzeptierende<br />
Berechnung durchführen kann.<br />
Umgekehrt ist im Fall der Erfüllbarkeit von ϕ w die Akzeptanzbedingung<br />
erfüllt, d.h., es gibt eine Zeit T < p(n) mit qm−1 T = true . Sofern<br />
T > 0 , existiert mindestens ein Übergang, der den Endzustand q m−1<br />
produziert. Zum Zeitpunkt T − 1 wird aber nur genau ein Zustand qu<br />
T −1<br />
angenommen und es findet genau ein Übergang uy<br />
T −1 statt. Auf diese<br />
Weise kann man rückwärts den Zustand q0<br />
0 erreichen.<br />
Die Initialkonfiguration und die Konsistenzbedingungen garantieren dann,<br />
daß wirklich eine Berechnung der Maschine M vorliegt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 159 / 215
6. Komplexität von Algorithmen 6.7 NP - Vollständigkeit und Cooke’scher Satz<br />
Satz (Ladner 1975)<br />
Falls P ≠ NP , dann wird NP nicht von P und NPV ausgeschöpft,<br />
d.h., es gibt dann E-Probleme, die weder NP -vollständig sind, noch zu<br />
P gehören.<br />
Beispiel<br />
Ein Kandidat <strong>für</strong> ein derartiges Problem ist Graph-Isomorphismus: die<br />
Eingabe besteht aus zwei Graphen G i = 〈V i , E i 〉 , i < 2 . Zu<br />
entscheiden ist, ob es eine Bijektion V 0<br />
f<br />
V 1 gibt mit 〈u, v〉 ∈ E 0<br />
gdw. 〈f (u), f (v)〉 ∈ E 1 .<br />
Bemerkung<br />
Im Gegensatz dazu ist das Problem Subgraph-Isomorphismus<br />
NP -vollständig: <strong>für</strong> eine Eingabe aus zwei Graphen G i = 〈V i , E i 〉 ,<br />
f<br />
i < 2 , ist zu entscheiden, ob es eine Injektion V 0 V 1 gibt mit<br />
〈u, v〉 ∈ E 0 gdw. 〈f (u), f (v)〉 ∈ E 1 .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 160 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
6.8 Weitere NP -vollständige Probleme<br />
Beispiel ( 3-Sat ist NP -vollständig)<br />
3-Sat gehört aus demselben Grund wie Sat zu NP , vergl. S. 148.<br />
Idee <strong>für</strong> eine Reduktion Sat ⊳ 3-Sat : Wir formen eine Klausel<br />
ϕ := (α 0 ∨ α 1 ∨ · · · ∨ α k−1 ) der Länge k > 3 iterativ um zu<br />
(α 0 ∨ α 1 ∨ b 0 ) ∧ (¬b 0 ∨ α 2 ∨ · · · ∨ α k−1 )<br />
(α 0 ∨ α 1 ∨ b 0 ) ∧ (¬b 0 ∨ α 2 ∨ b 1 ) ∧ (¬b 1 ∨ α 3 ∨ · · · ∨ α k−1 )<br />
. . .<br />
bis eine Konjunktion von k − 2 Klauseln der Länge 3 erreicht ist. Da<strong>für</strong><br />
sind k − 3 neue Variablen nötig, also ist die Laufzeit pro Klausel linear.<br />
Korrektheit: Die Existenz eines j < k mit α j = true ist äquivalent zu<br />
b 0 = true und es existiert 2 ≤ j < k mit α j = true, oder<br />
b 0 = false und es existiert j < 2 mit α j = true<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 161 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Beispiel ( 3-Färbbarkeit ist NP -vollständig)<br />
Auf S. 124 haben 3-Färbbarkeit ∈ NP gezeigt.<br />
Um 3-Sat auf 3-Färbbarkeit zu reduzieren, betrachten wir<br />
H :<br />
d<br />
•<br />
•<br />
a<br />
x<br />
•<br />
•<br />
b<br />
c<br />
Behauptung 0: Sind a , b und c in H rot, dann auch d .<br />
Beweis: Wenn b und c rot sind müssen die Farben blau und gelb bei den<br />
links danebenliegenden Knoten auftreten, folglich ist x rot. Dasselbe<br />
Argument <strong>für</strong> a und x liefert, daß d rot sein muß.<br />
Behauptung 1: Ist einer der Knoten a , b oder c blau, kann auch d<br />
blau gefärbt werden.<br />
Beweis: Klar, wenn a , b und c blau sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 162 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Beispiel (Fortsetzung)<br />
Ist a blau und x rot, können wir die links danebenliegenden Knoten rot<br />
bzw. gelb und dann d blau färben. Ist b oder c blau, kann x blau<br />
gefärbt werden, und ebenso d , unabhängig von der Farbe von a .<br />
Reduktion: Einer Formel ϕ in KNF ordnen wir einen Graphen G ϕ zu,<br />
der aus drei Typen von Teilgraphen besteht: Dreiecken<br />
R<br />
G<br />
B<br />
und<br />
x ¬x<br />
und <strong>für</strong> jede Klausel (α ∨ β ∨ γ) eine Kopie von H<br />
G<br />
<strong>für</strong> jede Variable x in ϕ<br />
B<br />
•<br />
•<br />
α<br />
x<br />
•<br />
•<br />
β<br />
γ<br />
mit Knoten α , β bzw. γ in den obigen Literal-Dreiecken.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 163 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Beispiel (Fortsetzung)<br />
So ist etwa die Klausel (x ∨ ¬y ∨ ¬z) <strong>für</strong> den folgenden Teilgraphen<br />
verantwortlich:<br />
z ¬z<br />
y ¬y<br />
x ¬x<br />
R<br />
G<br />
B<br />
•<br />
•<br />
•<br />
•<br />
•<br />
Jede weitere 3-Klausel liefert eine weitere Kopie des Hilfsgraphen H , die<br />
bei B anzuheften ist, und ggf. weitere bei G anzuheftende Dreiecke <strong>für</strong><br />
neue Variablen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 164 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Beispiel (Fortsetzung)<br />
Korrektheit: Ist ϕ erfüllbar, so färben wir die Knoten R , G und B mit<br />
den Farben rot, gelb bzw. blau. Im Dreieck <strong>für</strong> die Variable x ist dann das<br />
wahre Literal blau und das falsche rot zu färben. Wegen der Erfüllbarkeit<br />
von ϕ ist in jeder Kopie von H ein Knoten α , β oder γ blau gefärbt,<br />
was mit der Färbung von B konsistent ist.<br />
Ist G ϕ 3-färbbar, dann seien oBdA die Knoten R , G und B rot, gelb<br />
und blau gefärbt. Kein Variablen-Knoten kann dann gelb gefärbt sein, und<br />
nach der ersten Behauptung können in keiner Kopie von H die Knoten<br />
α , β und γ rot gefärbt sein. Also ist einer dieser Knoten blau, was nach<br />
der zweiten Behauptung zur blau-Färbung von B konsistent ist, und<br />
damit ist die Klausel wahr.<br />
Laufzeit: Die Anzahl der Variablen-Dreiecke und der Kopien von H<br />
beträgt jeweils O(|ϕ|) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 165 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Satz<br />
k -Färbbarkeit ist NP -vollständig <strong>für</strong> jedes k > 2 .<br />
Beweis.<br />
Das Beispiel zeigt die NP -Vollständigkeit von 3-Färbbarkeit.<br />
Zwecks Reduktion k -Färbbarkeit ⊳ (k + 1)-Färbbarkeit fügen wir<br />
einen neuen Knoten zu G hinzu, den wir in linearer Zeit mit allen alten<br />
Knoten verbinden. Der neue Graph G ′ ist genau dann (k + 1)-färbbar,<br />
wenn G k -färbbar ist.<br />
Definition<br />
Ein Graph heißt planar, wenn er ohne Kantenüberschneidungen in der<br />
Ebene gezeichnet werden kann.<br />
Planare k -Färbbarkeit ist trivial <strong>für</strong> k > 3 Appel, Haken 1976 ;<br />
NP -vollständig <strong>für</strong> k = 3 ;<br />
in P <strong>für</strong> k < 3 .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 166 / 215
6. Komplexität von Algorithmen 6.8 Weitere NP - vollständige Probleme<br />
Beispiel (Hamilton’scher Kreis (HC) ist NP -vollständig)<br />
Eingabe: ungerichteter Graph G = 〈V , E〉 . Zu entscheiden ist, ob ein<br />
Rundweg (Kreis) existiert, der alle Knoten genau einmal besucht.<br />
Aufgabe 5.6 zeigt einen expliziten Beweis basierend auf [Christos H.<br />
Papadimitriou. Computational Complexity. Addison-Wesley, 1994].<br />
Beispiel (TSP ist NP -vollständig)<br />
TSP ∈ NP : vergl. Seite 147.<br />
HC ⊳ TSP : ordne einem ungerichteten Graphen G = 〈V , E〉 die<br />
Konstante K := |V | zu und die {1, 2}-wertige Kostenmatrix mit<br />
d i,j = 1 gdw {i, j} ∈ E<br />
Korrektheit: Klar, da ein Hamilton’scher Kreis in einem Graphen mit n<br />
Knoten die Länge n haben muß.<br />
Die Laufzeit ist im Falle von Adjazenzmatrizen quadratisch in n , da<br />
einzig die Nullen der Adjazenzmatrix durch Zweien zu ersetzen sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 167 / 215
6. Komplexität von Algorithmen 6.9 Die Klasse coNP<br />
6.9 Die Klasse coNP<br />
Der Abschluß von P unter Komplementbildung sollte “von rechts wegen”<br />
bewiesen werden, indem man die Endzustandsmenge einer dTM, die<br />
immer hält, durch ihr Komplement ersetzt (wie im Fall regulärer<br />
Sprachen). Die technische Konvention eines einzigen Endzustands q F<br />
erfordert den Umweg, einen neuen Endzustand q G einzuführen, und<br />
Übergänge 〈p, s〉 ↦→ 〈q G , a〉 , sofern q ≠ q F und keine Übergänge aus<br />
〈p, s〉 existieren. Die Zeitkomplexität wird davon nicht tangiert.<br />
Wendet man dasselbe Verfahren auf eine nTM M an, die immer hält, so<br />
braucht die Sprache L( ¯M) nicht mit dem Komplement Σ ∗ − L<br />
übereinzustimmen: sobald <strong>für</strong> w ∈ L(M) auch eine nicht-akzeptierende<br />
Berechnung existiert, gehört w auch zu L( ¯M) .<br />
Tatsächlich ist die Frage, ob NP mit coNP übereinstimmt, bisher<br />
offen. Im negativen Fall würde P ≠ NP folgen. Auf jeden Fall gilt aber<br />
P ⊆ coNP .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 168 / 215
6. Komplexität von Algorithmen 6.9 Die Klasse coNP<br />
Beispiel (Gültigkeit ist coNP -vollständig)<br />
Eingabe: Boole’sche Formel ϕ in KNF. Zu entscheiden ist, ob jede<br />
Belegung der Variablen ϕ den Wert true zuordnet.<br />
Als Alphabet <strong>für</strong> Boole’sche Formeln diene Σ = {x, 0, 1, ∧, ∨, ¬, (, )} . Die<br />
Variablen sollen die Form xw haben, w eine Binärzahl. Somit können wir<br />
die Menge der Formeln in KNF als (reguläre!) Sprache Knf über Σ<br />
auffassen, die die Menge Gültigkeit der gültigen Formeln enthält.<br />
Das Komplement Gültigkeit ist die Vereinigung aus<br />
⊲<br />
⊲<br />
Σ ∗ − Knf , was regulär ist und folglich zu P ⊆ NP gehört; und<br />
Knf − Gültigkeit = { ϕ ∈ Knf : ¬ϕ erfüllbar } ; mit Belegungen<br />
der Variablen, die <strong>für</strong> ϕ den Wert false liefern, als Zertifikaten folgt<br />
auch hier die Zugehörigkeit zu NP .<br />
Da NP unter binären Vereinigungen abgeschlossen ist, folgt<br />
Gültigkeit ∈ NP , und somit Gültigkeit ∈ coNP .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 169 / 215
6. Komplexität von Algorithmen 6.9 Die Klasse coNP<br />
Beispiel (Fortsetzung)<br />
Der Nachweis der coNP -Vollständigkeit erfordert zu zeigen, daß jedes<br />
coNP -Problem auf Gültigkeit FP -reduziert werden kann. Aber aus<br />
L ∈ coNP folgt ¯L ⊳ Sat , etwa vermöge einer FP -Reduktion g . Für die<br />
Selbst-Abbildung w ↦→ ¬g(w) auf Σ ∗ gilt zweifellos<br />
w ∈ L gdw w /∈ L gdw g(w) nicht erfüllbar gdw ¬g(w) gültig<br />
Leider ist dies noch keine FP -Reduktion von L auf Gültigkeit , da<br />
¬g(w) als Negation einer KNF-Formel i.A. nicht in KNF vorliegt; das<br />
Hineinziehen der Negation zu den Literalen liefert sogar eine Formel in<br />
DNF, deren äquivalente Umwandlung in KNF zu exponentiellem<br />
Längenwachstum führen kann.<br />
Mit Hilfe neuer Variablen läßt sich ¬g(w) aber in eine gleicherfüllbare<br />
Formel ψ(w) in KNF umwandeln, die gegenüber ¬g(w) nur linear<br />
wächst (vergl. HA 5.5(d)). Damit liefert w ↦→ ψ(w) die gewünschte<br />
FP -Reduktion L ⊲ Gültigkeit .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 170 / 215
6. Komplexität von Algorithmen 6.9 Die Klasse coNP<br />
Der nächste Satz folgt aus der entsprechenden Aussage in NP :<br />
Satz<br />
Aus L ⊳ K ∈ coNP folgt L ∈ coNP , d.h., bzgl. ⊳ ist coNP ein<br />
unterer Abschnitt der Klasse E aller E-Probleme.<br />
Offenes Problem<br />
Stimmt der Durchschnitt von NP und coNP mit P überein?<br />
Satz<br />
NP = coNP genau dann wenn es ein coNP -vollständiges Problem in<br />
NP gibt.<br />
Beweis.<br />
( ⇐ ) Aus coNPV ∩ NP ≠ ∅ folgt coNP ⊆ NP , da NP ein unterer<br />
Abschnitt ist. Also gilt auch NP = cocoNP ⊆ coNP .<br />
( ⇒ ) Das coNP -vollständige Problem Gültigkeit gehört zu NP .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 171 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
6.10 Komplexität von Optimierungsproblemen<br />
Das TSP in seiner E-Variante wirkt etwas künstlich: die Schranke K hat<br />
intrinsisch wenig mit dem Problem zu tun. Gesucht ist eigentlich die<br />
“beste” Reiseroute. Ähnlich verhält es sich mit der Färbbarkeit von<br />
Graphen: hier ist eigentlich die minimale Farbenzahl von Interesse, mit der<br />
ein Graph gefärbt werden kann. An diese kann man sich “herantasten”, a<br />
indem man die Schranke k im zugehörigen E-Problem sukzessive<br />
verringert.<br />
Das deutet an, daß es neben den Klassen der Entscheidungs- oder<br />
E-Probleme und der Berechnungs- oder B-Probleme eine weitere Klasse<br />
interessanter und wichtiger Probleme von praktischer Relevanz gibt: die<br />
Optimierungs- oder O-Probleme.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 172 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Die Probleme MaximalesMatching und MaxFlow<br />
Definition<br />
Ein gerichteter Graph G = 〈V , E〉 heißt bipartite, wenn eine Zerlegung<br />
V = V 0 + V 1 existiert, so daß alle Kanten nur von Knoten in V 0 zu<br />
Knoten in V 1 verlaufen, formal E ⊆ V 0 × V 1 + V 1 × V 0 .<br />
Unter einem Matching versteht man dann eine Menge paarweise disjunkter<br />
Kanten, d.h., je zwei Kanten haben keinen gemeinsamen Endpunkt.<br />
Bzgl. der Kantenzahl maximale Matchings kann man finden, indem man<br />
gegebene Matchings solange mittels sog. “erweiternder Wege”in größere<br />
Matchings umwandelt, wie möglich. Dann ist zu beweisen, daß alle derart<br />
konstruierbaren Matchings dieselbe Kantenzahl haben.<br />
Stattdessen werden wir MaximalesMatching auf ein allgemeineres<br />
Problem reduzieren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 173 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Definition<br />
Einem Netzwerk ist ein gerichteter Graph G = 〈V , E〉 zusammen mit<br />
zwei ausgezeichneten Knoten s, t ∈ V (<strong>für</strong> “Source” und “Target”)<br />
ohne ein- bzw. ausgehende Kanten;<br />
einer Kapazitätsfunktion V × V c N, die der Bedingung<br />
〈u, v〉 /∈ E gdw c〈u, v〉 = 0 genügt.<br />
Ein Fluß durch das Netzwerk ist eine Abbildung V × V f Z mit<br />
0 ≤ f 〈u, v〉 ≤ c〈u, v〉 <strong>für</strong> 〈u, v〉 ∈ E ;<br />
f 〈u, v〉 = −f 〈v, u〉 <strong>für</strong> alle u, v ∈ V ;<br />
∑<br />
u∈V<br />
f 〈u, v〉 = 0 <strong>für</strong> alle Knoten v ∈ V − {s, t} .<br />
Schließlich ist die Größe des Flusses f gegeben durch<br />
‖f ‖ :=<br />
∑<br />
f 〈s, v〉 =<br />
∑<br />
f 〈v, t〉<br />
〈s,v〉∈E<br />
〈v,t〉∈E<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 174 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Ford-Fulkerson Algorithmus (1956), informell<br />
Um einem Fluß f in einem Netzwerk auf Maximalität zu prüfen versuchen<br />
wir, einen größeren Fluß f ′ zu finden. Dann hat auch der Differenzfluß<br />
∆f = f ′ − f positive Größe, kann allerdings <strong>für</strong> gewisse Kanten<br />
〈u, v〉 ∈ E negative Werte annehmen. Diese sind als positive Werte<br />
entlang der umgekehrten Kante 〈v, u〉 zu interpretieren, d.h., ∆f lebt<br />
auf einem hinsichtlich f modifizierten Netzwerk:<br />
Definition<br />
Zu einem Netzwerk 〈〈V , E〉, s, t, c〉 und einem Fluß f ist das abgeleitete<br />
Netzwerk N(f ) = 〈〈V , E ′ 〉, s, t, c ′ 〉 bestimmt durch<br />
〈u, v〉 ∈ E ′ gdw c ′ 〈u, v〉 := c〈u, v〉 − f 〈u, v〉 > 0<br />
Offenbar ist f genau dann maximal, wenn kein positiver Fluß auf N(f )<br />
existiert, d.h., wenn t von s aus in 〈V , E ′ 〉 nicht erreichbar ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 175 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Algorithmus <strong>für</strong> maximalen Fluß<br />
Beispiel<br />
(Initialisierung:) f 0 sei der Null-Fluß.<br />
(Rekursion:) Falls t von s in N(f n ) erreichbar ist,<br />
− wähle einen Pfad P von s nach t in N(f n ) ;<br />
− bestimme die minimale Kapazität k entlang der P -Kanten;<br />
− Hinzufügen aller P -Kanten mit dem Wert k zu f n liefert f n+1 .<br />
12 12<br />
12 19<br />
v 0 v 1<br />
16<br />
4<br />
20<br />
81<br />
12<br />
12<br />
v 0 v 1<br />
12 19<br />
N(f 01 23 ) : s<br />
117<br />
10 4 7<br />
t<br />
9<br />
4<br />
v 2 v 3<br />
13<br />
62 4<br />
14<br />
73<br />
11 7<br />
f 01 23 : s<br />
117<br />
t<br />
4<br />
v 2 v 3<br />
In N(f 3 ) ist t von s aus nicht mehr erreichbar, also ist f 3 maximal.<br />
11 7<br />
7<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 176 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Die maximale Größe eines Flusses ist natürlich durch das Minimum der<br />
Kapazitätssummen der Kanten aus s bzw. nach t beschränkt. Daher<br />
terminiert der obige Algorithmus nach endlich vielen Schritten, da der Fluß<br />
pro Schritt um mindestens 1 größer wird. (Für R-wertige Kapazitäten<br />
und Flüsse gilt dieses Argument nicht mehr!)<br />
Da obiges Argument bzgl. des Differenzflusses <strong>für</strong> jeden Fluß f und jeden<br />
Fluß F maximaler Größe anwendbar ist, folgt sofort, daß der Algorithmus<br />
unabhängig von der Wahl der Verbindungspfade immer ein globales<br />
Maximum liefert, nicht nur ein lokales.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 177 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Beispiel ( MaximalesMatching ⊳ MaxFlow )<br />
Einem bipartiten Graph G = 〈V 0 + V 1 , E ⊆ V 0 × V 1 〉 ordnen wir als<br />
Netzwerk N(G) den Graphen<br />
〈V 0 + V 1 + {s, t}, {s} × V 0 + E + V 1 × {t}〉<br />
zusammen mit den neuen Knoten s und t und der auf der neuen<br />
Kantenmenge konstant 1-wertigen Kapazitätsfunktion zu.<br />
Laufzeit: Zwei neue Knoten lassen den Graphen linear wachsen; die<br />
Adjazenzmatrix codiert die Kapazitätsfunktion.<br />
Korrektheit: Ein Matching M <strong>für</strong> G läßt sich durch Verbinden der<br />
beteiligten Knoten mit s bzw. t zu einem Fluß m auf N(G) ergänzen;<br />
die paarweise Disjunktheit der Kanten des Matchings ist äquivalent zur<br />
Gleichgewichtsbedingung des Flusses. Die Anzahl der Kanten in M<br />
stimmt mit der Größe des Flusses überein, also bewirkt eine Vergrößerung<br />
des Matchings eine Vergrößerung des Flusses und umgekehrt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 178 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Beispiel (Fortsetzung)<br />
N(f 01 23 4 ) : f 01 23 4 :<br />
Wir stellen fest:<br />
Im Spezialfall uniformer Kantenkapazität entsteht das abgeleitete<br />
Netzwerk durch Umkehrung der Kanten, die den gewählten Pfad von<br />
s nach t ausmachen.<br />
Auch die Wahl eines absurd langen Pfades, etwa in N(f 1 ) oben,<br />
vergrößert das bisherige Matching nur um eine Kante (warum?).<br />
Kürzere Pfade haben denselben Effekt und sind daher vorzuziehen. In<br />
N(f 3 ) ist dagegen kein kürzerer Pfad möglich.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 179 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Formalisierung von Optimierungsproblemen<br />
Definition<br />
Ein Optimierungsproblem 〈Σ, E, A, L, c〉 besteht aus<br />
einem Alphabet Σ , codiert Probleminstanzen und Lösungen;<br />
Sprachen E, A ⊆ Σ ∗<br />
der Probleminstanzen bzw. Lösungen;<br />
einer Lösungsrelation L ⊆ E × A , die Probleminstanzen mit<br />
zulässigen Lösungen verbindet;<br />
einer Kostenfunktion L c N.<br />
Eine TM M löst das Mini/Maximierungsproblem 〈Σ, E, A, L, c〉 , falls M<br />
bei Eingabe von v ∈ E mit Ausgabe w ∈ A hält und gilt<br />
⊲ v L w ;<br />
⊲ c〈v, w〉 ≤ ≥ c〈v, w ′ 〉 <strong>für</strong> alle w ′ ∈ A mit v L w ′ .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 180 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Da die Kostenfunktion N-wertig ist, hat jede lösbare Instanz eines<br />
Minimierungsproblems auch eine minimale Lösung, während bei<br />
Maximierungsproblemen keine maximale Lösung zu existieren braucht.<br />
Definition<br />
PO ist die Klasse der Optimierungsprobleme P = 〈Σ, E, A, L, c〉 mit<br />
E, A ∈ P ;<br />
Es gibt ein Polynom p , so daß aus 〈v, w〉 ∈ L folgt |w| ≤ p(|v|)<br />
(die Lösungen sind “kurz”);<br />
die charakteristische Funktion χ L und c gehören zu FP ;<br />
Definition<br />
P wird von einer dTM mit polynomialer Zeitkomplexität gelöst.<br />
Das dem Mini/Maximierungsproblem P = 〈Σ, E, A, L, c〉 zugrunde<br />
liegende E-Problem P dec<br />
hat neben v ∈ E eine Zahl k ∈ N als Eingabe.<br />
Zu entscheiden ist, ob w ∈ A existiert mit 〈v, w〉 ∈ L und c〈v, w〉 ≤ ≥ k .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 181 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Bemerkung<br />
P ∈ PO impliziert natürlich P dec<br />
∈ P . Sofern P ≠ NP , folgt aus der<br />
NP -Vollständigkeit von P dec<br />
dann auch P /∈ PO .<br />
Beispiel ( MaxMatching ∈ PO )<br />
Codierung einer Probleminstanz: Knotenzahl n , Adjazenzmatrix A und<br />
binäres Partitionierungs-n-Tupel β , bzgl. dessen Bipartizität vorliegt.<br />
Codierung von potentiellen Lösungen durch (n × n)-Matrizen M .<br />
Syntaxcheck Probleminstanz: A hat nur Einsen in Positionen, deren<br />
Koordinaten verschiedene β -Werte haben (der Graph ist bipartite).<br />
Syntaxcheck potentielle Lösung: pro Zeile und Spalte tritt höchstens<br />
eine Eins auf (das Matching besteht aus disjunkten Kanten).<br />
A L M gdw M ≤ A komponentenweise (Teilgraph).<br />
c(M) ist die Hälfte der Anzahl der Einsen in M (Symmetrie).<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 182 / 215
6. Komplexität von Algorithmen 6.10 Komplexität von Optimierungsproblemen<br />
Beispiel (Fortsetzung)<br />
Der Lösungsalgorithmus verwendet Erreichbarkeit ∈ P bzgl. s<br />
und t im abgeleiteten Netzwerk; letzteres entsteht durch Umkehrung<br />
gewisser Kanten, was in polynomialer Zeit machbar ist.<br />
Terminologie<br />
Optimierungsproblemen tragen Namen mit Präfix Min oder Max.<br />
Beispiel ( MinFärbb /∈ PO )<br />
Eingabe: ungerichteter Graph; zu bestimmen ist die Minimalzahl an<br />
Farben <strong>für</strong> eine Knotenfärbung. Das zugehörige E-Problem MinFärbb dec<br />
umfaßt 3-Färbbarkeit, was bekanntlich NP -vollständig ist.<br />
Beispiel ( MinTSP /∈ PO )<br />
Hier stimmt MinTSP dec<br />
mit dem NP -vollständigen E-Problem TSP<br />
überein, vergl. S. 144.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 183 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
6.11 Approximation von Optimierungsproblemen<br />
Gegeben: ein Optimierungsproblem P mit P dec<br />
NP -vollständig<br />
Ziel: optimale Lösung effizient approximieren, mittels einer dTM mit<br />
polynomialer Zeitkomplexität<br />
Wir unterscheiden verschiedene Ansätze:<br />
Heuristik: ein Algorithmus, der erfahrungsgemäß “gute” Lösungen<br />
konstruiert, aber ohne harte Schranken <strong>für</strong> die Approximationsgüte.<br />
Approximationsalgorithmus: dieser liefert harte Schranke <strong>für</strong> die Güte<br />
der Approximation.<br />
PTAS: parametrisierter Algorithmus, der beliebig gute<br />
Approximationen erlaubt, auf Kosten der Laufzeit.<br />
volles PTAS: zusätzlich hängt die Laufzeit polynomial von der<br />
Approximationsgüte ab.<br />
Wir beschränken uns auf die ersten beiden Punkte.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 184 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Algorithmus <strong>für</strong> MinKÜ<br />
Gegeben: ungerichteter Graph G = 〈V , E〉 ;<br />
Gesucht: minimale Knotenmenge D ⊆ V , die jede Kante e ∈ E<br />
nichtleer schneidet (Knotenüberdeckung).<br />
Gemäß einer Übungsaufgabe ist MinKÜ dec<br />
= KÜ NP -vollständig.<br />
1: D := ∅ ; {bisherige Überdeckung}<br />
2: while der aktuelle Graph eine Kante e hat do<br />
3: D := D ∪ e ; {Überdeckung um Endpunkte von e vergrößern.}<br />
4: G := 〈V − e, E ′ 〉 ; {Diese Knoten aus G entfernen, durch<br />
Löschen zweier Zeilen und Spalten der Adjazenzmatrix}<br />
5: end while<br />
Korrektheit: Jede aus E entfernte Kante schneidet D nichtleer, und alle<br />
Kanten werden aus E entfernt.<br />
Laufzeit: O(|E|) , denn jede Kante wird einmal besucht und entfernt.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 185 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Güte der Approximation<br />
Satz<br />
Die minimale Größe opt(G) einer Knotenüberdeckung und die Größe<br />
c(G) der vom Algorithmus gelieferten Lösung erfüllen c(G) ≤ 2opt(G) .<br />
Beweis.<br />
D entsteht durch Vereinigung paarweise disjunkter Kanten. Jede andere<br />
Knotenüberdeckung D ′ , speziell eine optimale, muß einen Endpunkt jeder<br />
dieser Kanten enthalten, also mindestens |D|/2 viele Knoten.<br />
Definition<br />
Für ε > 0 heißt ein deterministischer Algorithmus <strong>für</strong> P mit polynomialer<br />
Laufzeit ε-approximierend <strong>für</strong> P = 〈Σ, E, A, L, c〉 , falls<br />
|c〈v, w〉 − opt(v)|<br />
|opt(v)|<br />
≤ ε wobei opt(v) := opt{ c〈v, w〉 : 〈v, w〉 ∈ L }<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 186 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beispiel<br />
Der obige Algorithmus <strong>für</strong> MinKÜ ist 1-approximierend, denn<br />
c(G) ≤ 2opt(G) impliziert c(G) − opt(G) ≤ opt(G) .<br />
Für ε < 1 ist der Algorithmus nicht ε-approximierend: G : • • liefert<br />
c(G) = 2 aber opt(G) = 1 .<br />
Beispiel ( SiT(k) )<br />
Das O-Problem Scheduling of Independent Tasks(k) hat ein<br />
n-Tupel t ∈ N n als Eingabe, zu interpretieren als Bearbeitungszeiten von<br />
n voneinander unabhängigen Aufgaben (Tasks). Für diese stehen k<br />
gleichmächtige Prozessoren zur Verfügung. Gesucht ist eine Abbildung<br />
S(t)<br />
n k (Arbeitsplan oder Schedule), die die Gesamtlaufzeit T (t)<br />
minimiert:<br />
∑<br />
T (t) = max{ t i : j < k }<br />
i∈S(t) −1 {j}<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 187 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Ein typischer Laufzeitplan hat etwa die Form<br />
5<br />
4<br />
Prozessor<br />
3<br />
2<br />
1<br />
0<br />
0 20 40 60<br />
Zeit<br />
Verschieben der letzten Aufgabe von Prozessor 4 nach Prozessor 1<br />
verbessert in diesem Fall die Gesamtlaufzeit.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 188 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Idee <strong>für</strong> einen SiT(k)-Algorithmus: die Aufgaben gemäß Zeitbedarf<br />
absteigend sortieren, in dieser Reihenfolge so verteilen, daß Prozessoren<br />
mit der bisher geringsten Belastung bevorzugt werden.<br />
Algorithmus <strong>für</strong> SiT(k)<br />
Gegeben: t ∈ N n ;<br />
Gesucht: Schedule n<br />
S(t)<br />
k, der die Gesamtlaufzeit minimiert.<br />
1: t absteigend sortieren;<br />
2: for m < k do<br />
3: T m = 0 ;<br />
4: end for<br />
5: for i < n do<br />
6: wähle j < k mit T j = min m
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Korrektheit: Die zweite FOR-Schleife sorgt da<strong>für</strong>, daß jedem Task ein<br />
Prozessor zugeordnet wird.<br />
Laufzeit: Wegen der Konstanz von k haben die erste FOR-Schleife und<br />
der Körper der zweiten FOR-Schleife konstante Laufzeit. Also benötigt<br />
die zweite Schleife lineare Laufzeit. Die Sortierung erfordert O(n log n) .<br />
Beispiel<br />
〈1, 3, 5, 3, 10, 7〉 liefert umsortiert 〈t 0 , t 1 , t 2 , t 3 , t 4 , t 5 〉 = 〈10, 7, 5, 3, 3, 1〉 ,<br />
was bei k = 3 Maschinen zu folgenden Zuordnungen und Laufzeiten führt:<br />
S(t) −1 {0} = {0} , S(t) −1 {1} = {1, 4} , S(t) −1 {2} = {2, 3, 5}<br />
2<br />
Prozessor<br />
1<br />
0<br />
0 2 4 6 8 10<br />
Zeit<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 190 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Satz<br />
Der obige Algorithmus ist 1-approximierend.<br />
Beweis<br />
Wähle eine Aufgabe i , die zur Zeit T (t) endet. Falls i < k folgt<br />
t i = T (t) , und somit T (t) = T opt<br />
. Andernfalls haben wir<br />
Prozessor<br />
k − 1<br />
.<br />
3<br />
2<br />
1<br />
0<br />
Da alle Prozessoren bis zur Zeit T (t) − t i<br />
0<br />
T (t) − t i<br />
T (t)<br />
beschäftigt sind, gilt<br />
T (t) − t i ≤ T opt<br />
und folglich T (t) − T opt<br />
≤ t i<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 191 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beweis (Fortsetzung)<br />
Nach Voraussetzung muß zudem t i ≤ T (t) − t i und folglich t i ≤ T opt<br />
gelten, denn sonst wäre die Aufgabe i früher verplant worden. Damit also<br />
T (t) − T opt<br />
T opt<br />
≤ t i<br />
T opt<br />
≤ t i<br />
t i<br />
= 1<br />
Ohne Beweis stellen wir fest, daß der Algorithmus sogar 1 3 -approximierend<br />
ist. Man spricht in diesem Zusammenhang auch von der Güte der<br />
Approximation.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 192 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Ziel: PTAS <strong>für</strong> k = 2 . Dazu: Optimalalgorithmus <strong>für</strong> SiT(2) verwenden:<br />
finde alle Teilsummen von t ∈ N n mit dynamischer Programmierung;<br />
jede minimale Teilsumme ≥ τ := 1 ∑<br />
2 i
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beispiel<br />
Für t = 〈10, 53, 37, 22〉 erhalten wir τ = 122/2 = 61 sowie<br />
B 0 = {0}<br />
B 1 = {0, 0 + 10}<br />
B 2 = {0, 10, 0 + 53, 10 + 53}<br />
B 3 = {0, 10, 53, 63, 0 + 37, 10 + 37, 53 + 37, 63 + 37}<br />
B 4 = {0, 10, 53, 63, 37, 47, 90, 100, 22, 32, 75, 59, 69, 112, 122}<br />
Damit ordnet die optimale Lösung den beiden Prozessoren die Aufgaben<br />
der Längen 22 und 37 bzw. 10 und 53 zu.<br />
Idee: ε-Approximation <strong>für</strong> Eingabe t ∈ N n durch Optimallösung <strong>für</strong> linear<br />
verkürzte Eingabe t ′ = rnd( 1 λ · t) ∈ Nn mit λ > 1 realisieren. Durch die<br />
Verkürzung der Eingabewerte um den Faktor λ gehen Bits verloren<br />
(Rundungsfehler), daher wird S(t ′ ) i.A. nicht mit S(t) übereinstimmen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 194 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Der relative Fehler der Kosten hat dann die Form<br />
|c(t) − opt(t)|<br />
|opt(t)|<br />
= |λ · opt(t′ ) − opt(t)|<br />
|opt(t)|<br />
≤ |λ · opt(t′ ) − opt(t)|<br />
τ<br />
Nun müssen wir durch geeignete Wahl von λ sicherstellen, daß der Zähler<br />
nach oben durch τε beschränkt ist, damit der relative Fehler ≤ ε bleibt.<br />
Der Vergleich entsprechender Teilsummen b ∗ ′ und b ∗ <strong>für</strong> t ′ bzw. t aus<br />
den jeweiligen Optimalalgorithmen liefert<br />
|λ · b ′ ∗ − b ∗ | = λ · |b ′ ∗ − b ∗ /λ| ≤ λ · n<br />
2<br />
da b ′ ∗<br />
eine Summe aus höchstens n gerundeten Werten ist. Setze<br />
λ := max{1, 2τɛ/n}<br />
Falls 1 ≥ 2τɛ/n gilt, ist die optimale Lösung des ursprünglichen Problems<br />
zu bestimmen, was dem Zähler des obigen Bruchs den Wert 0 zuweist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 195 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
In der Praxis wollen wir reelle Arithmetik vermeiden und die lineare<br />
Verkürzung durch Abschneiden von Ziffern realisieren. Anstelle von rnd<br />
ist dann die Funktion ⌊−⌋ zu verwenden, wodurch der Faktor 1 2<br />
entfällt.<br />
Für die β Basis der Zahlencodierung erhält man den Skalierungsfaktor<br />
λ := β r mit r := max{ x ∈ N : β x ≤ τε/n }<br />
Die Zeitkomplexität liegt nun in O(n · τ/λ) = O(n/ε) .<br />
Definition<br />
Ein PTAS <strong>für</strong> ein O-Problem P = 〈Σ, E, A, L, c〉 ist ein Algorithmus M<br />
mit Eingabe v ∈ E und ε > 0 , dessen Ausgabe w ∈ A mit 〈v, w〉 ∈ L<br />
einen relativen Fehler ≤ ε aufweist. Weiterhin muß <strong>für</strong> jedes ε > 0 ein<br />
Polynom p ε existieren, so daß M( , ε) eine Laufzeit in O(p ε ) hat.<br />
Ein PTAS heißt voll, falls die Laufzeit des Algorithmus polynomial in |v|<br />
und in 1/ε ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 196 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beispiel<br />
Der oben beschriebene Algorithmus <strong>für</strong> SiT(2) ist ein volles PTAS.<br />
Beispiel<br />
Das O-Problem MinBinPAcking hat als Eingabe ein Tupel a ∈ N n von<br />
“Gewichten” und eine “Kapazität” C ∈ N . Gesucht ist die Minimalzahl<br />
an “Körben” der Kapazität C , die alle Gewichte aufnehmen können.<br />
Diese Problem besitzt ein PTAS dessen Laufzeit exponentiell in 1/ε ist.<br />
Unter der Voraussetzung P ≠ NP existiert kein volles PTAS <strong>für</strong><br />
MinBinPAcking (ohne Beweis).<br />
Satz<br />
Unter der Voraussetzung P ≠ NP existiert <strong>für</strong> kein ε > 0 ein<br />
ε-approximierender Algorithmus <strong>für</strong> MinTSP.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 197 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beweis<br />
Indirekt: wir nehmen an, A sei ein ε-approximierender Algorithmus <strong>für</strong><br />
MinTSP. Dann läßt sich das E-Problem HamiltonscherKreis (HK)<br />
in polynomialer Zeit von einer dTM lösen, im Widerspruch zu seiner<br />
NP -Vollständigkeit.<br />
Zu einem ungerichteten Graphen G = 〈V , E〉 definieren wir die<br />
Entfernungsmatrix<br />
⎧<br />
⎪⎨ 0 falls u = v<br />
d u,v := 1 falls {u, v} ∈ E<br />
⎪⎩<br />
2 + ⌈εn⌉ sonst<br />
Die von A berechnete Rundreise möge die Länge K haben.<br />
Behauptung: G hat genau dann einen HK, wenn K ≤ n(1 + ε) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 198 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Beweis (Fortsetzung)<br />
( ⇒ ) Besitzt G einen HK, so hat die optimale Rundreise die Länge n .<br />
Dann gilt<br />
|K − n|<br />
= K − 1 ≤ ε gdw K ≤ n(1 + ε)<br />
n n<br />
( ⇐ ) Ohne HK in G hat die optimale Rundreise mindestens die Länge<br />
2 + ⌈εn⌉ + n − 1 ≥ 1 + n + εn ≥ 1 + n(1 + ε) > n(1 + ε)<br />
Der resultierende Algorithmus <strong>für</strong> HK berechnet also d wie oben, wendet<br />
A auf die entsprechende Instanz von MinTSP an und prüft, ob die Länge<br />
des gefundenen Rundwegs durch n(1 + ε) beschränkt ist.<br />
Die Korrektheit ist klar, und die Laufzeit ist polynomial.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 199 / 215
6. Komplexität von Algorithmen 6.11 Approximation von Optimierungsproblemen<br />
Die Voraussetzung P ≠ NP liefert eine Einteilung der O-Probleme in<br />
eine strikt wachsende Hierarchie von Klassen mit Trennbeispielen:<br />
PO det. Polynomialzeit-Lösungsalgorithmen MaxMatching<br />
vPTAS volle PTAS SiT(2)<br />
PTAS Polynomialzeitapproximationsschemata MinBinPacking<br />
APX es ex. ein ε-approximierender Algo MinKÜ<br />
NPO ndet. Polynomialzeit-Lösungsalgotighmen MinTSP<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 200 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
6.12 Raumkomplexität<br />
Speicherbedarf von Algorithmen ist das zweite wichtige Effizienzkriterium.<br />
Definition<br />
Eine Funktion N t R + wird als Raumkomplexität einer nTM M<br />
bezeichnet, wenn der Kopf von M <strong>für</strong> jede Eingabe w ∈ X n höchstens<br />
auf t(n) verschiedene Felder zugreift. ( M muß nicht immer halten!)<br />
(N )PSPACE bezeichnet die Klasse aller E-Probleme, die von einer<br />
(n)dTM mit polynomialer Raumkomplexität akzeptiert werden können.<br />
In Analogie zur oben verwendeten Schreibweise findet man auch die<br />
Bezeichnungen PTIME und NPTIME <strong>für</strong> P bzw. NP .<br />
Da eine TM pro Schritt nur ein Feld beschreiben kann, gilt automatisch<br />
P = PTIME ⊆ PSPACE und NP = NPTIME ⊆ NSPACE<br />
Obwohl die Turingmaschinen hier nicht immer halten müssen, gilt<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 201 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Satz<br />
PSPACE -Sprachen sind entscheidbar.<br />
Beweisskizze<br />
Für jede Eingabe kann nur endlicher Teil des Bandes erreicht werden, also<br />
gibt es auch nur endlich viele mögliche Konfigurationen. Berechnet man<br />
zunächst eine Schranke <strong>für</strong> deren Anzahl und zählt dann die Schritte, so<br />
kann man feststellen, wann sich eine Konfiguration wiederholt haben muß.<br />
Im deterministischen Fall kann die Eingabe dann nicht mehr akzeptiert<br />
werden, insofern kann man die Berechnung abbrechen.<br />
Für eine nTM M versagt dieses Argument, weil Berechnungszweige<br />
ignoriert werden können. Der übliche Übergang zur Determinisierung M d<br />
,<br />
führt hier leider nicht weiter: die Schranke <strong>für</strong> die Anzahl der erreichbaren<br />
Konfigurationen ist exponentiell in der Raumkomplexität, aber die Buchführung<br />
über die Berechnungstiefe in M d<br />
erfolgte unär! Statt hier etwa zu<br />
binärer Darstellung überzugehen, wählen wir einen anderen Ausweg.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 202 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Zuvor aber eine vereinfachende Annahme über Turingmaschinen:<br />
Lemma<br />
Jede 1-Band TM mit polynomialer Raumkomplexität p(n) ≥ n ist<br />
äquivalent zu einer 1-Band TM mit ebenfalls polynomialer<br />
Raumkomplexität, die nur mit leerem Band halten kann.<br />
Beweisskizze<br />
Für w ∈ Σ n berechne p(n) (Speicherbedarf grd p · n ) und schreibe<br />
spezielle Randmarkierer auf die Bandzellen mit Index ±p(n) . Nach<br />
Rückkehr zum rechten Rand von w wird die Ursprungsmaschine<br />
ausgeführt, wobei die Ränder nach Vorausssetzung nicht überschritten<br />
werden können. Hält diese Berechnung, wird der Bandbereich zwischen<br />
den Randbegrenzern (einschließlich) gelöscht.<br />
Im Gegensatz zum bislang unbestimmten Verhältnis zwischen nichtdeterministischen<br />
und deterministischen Turing-Maschinen bei der<br />
Zeitkomplexität, herrscht bei der Raumkomplexität Klarheit:<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 203 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Satz (Savitch, 1970)<br />
Jede nTM mit polynomialer Raumkomplexität p kann von einer dTM mit<br />
Raumkomplexität p 2 simuliert werden, also PSPACE = NPSPACE .<br />
Beweis<br />
Die nTM M habe Raumkomplexität p(n) ≥ n und möge nur bei leerem<br />
Band halten, d.h., K F = 〈q F , #〉 ist die einzige Haltekonfiguration.<br />
Zwecks Abschätzung der Anzahl κ der von der Initialkonfiguration bei der<br />
Berechnung von w mit |w| = n aus potentiell erreichbaren<br />
Konfigurationen setzen wir r := |Q| und m := |B| .<br />
κ ≤ r · m p(n) · p(n) < r · (m p(n)) 2 < 2<br />
C·p(n)<br />
<strong>für</strong> geeignetes C ∈ N<br />
Wir betrachten jetzt nur noch solch potentiell erreichbare Konfigurationen.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 204 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Beweis (Fortzetzung)<br />
Genau dann, wenn eine Konfiguration K ′ von K aus in höchstens 2 i<br />
Schritten erreicht werden kann, setzen wir abkürzend<br />
REACH (K, K ′ , i) = true<br />
Also akzeptiert M die Eingabe w genau dann, wenn gilt<br />
wobei K w<br />
REACH (K w , K F , C · p(n)) = true<br />
die Initialkonfiguration bei Eingabe w ist.<br />
Gesucht: ein deterministischer Algorithmus <strong>für</strong> REACH (K, K ′ , i) , der<br />
<strong>für</strong> Werte i < C · p(n) selbst polynomiale Raumkomplexität hat.<br />
Wir geben eine rekursive Konstruktion <strong>für</strong> einen derartigen Algorithmus an:<br />
i = 0 : REACH (K, K ′ , 0) = true gdw K = K ′ oder K ⊢ K ′ .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 205 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Beweis (Fortzetzung)<br />
i + 1 : Wir nehmen an, <strong>für</strong> i ≥ 0 haben wir einen REACH -Algorithmus<br />
mit der gewünschten Eigenschaft. Nun ist REACH (K, K ′ , i + 1) genau<br />
dann wahr, wenn eine Zwischenkonfiguration ¯K existiert mit<br />
REACH (K, ¯K, i) = true und REACH ( ¯K, K ′ , i) = true<br />
Insgesamt sind dann höchstens 2 · 2 i = 2 i+1 Schritte nötig, um K ′ von<br />
K aus zu erreichen.<br />
Der Algorithmus <strong>für</strong> i + 1 probiert nun systematisch alle von der K w<br />
potentiell erreichbaren Konfigurationen ¯K durch.<br />
Raumkomplexität: Die Spezifikation einer erreichbaren Konfiguration<br />
benötigt maximal p(n) + 2 Bandzellen. Beim rekursiven Aufruf kann der<br />
Platz vom letzten Versuch wiederverwendet werden. Der Zähler i ist<br />
durch C · p(n) ∈ O(p(n)) beschränkt.<br />
aus<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 206 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Beweis (Fortsetzung)<br />
Der Raumbedarf S(i) erfüllt damit die Rekursion<br />
S(0) = C · p(n) und S(i + 1) = C · p(n) + S(i)<br />
Dies läßt sich auflösen zu<br />
S(C · p(n)) = C · p(n) + S(C · p(n) − 1)<br />
= C · p(n) + C · p(n) + S(C · p(n) − 2)<br />
. . .<br />
= (C · p(n)) 2<br />
Damit ist die Behauptung bewiesen.<br />
Nun folgt unmittelbar NP ⊆ NPSPACE = PSPACE ⊆ REC . Für<br />
die Oberklasse PSPACE von NP läßt sich nun in analoger Weise der<br />
Begriff der Vollständigkeit formulieren.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 207 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Definition<br />
Die Syntax quantifizierter Boole’scher Formeln (qBF) hat die BNF<br />
ϕ ::= x | true | false | ¬ϕ | ϕ ∧ ϕ | ϕ ∨ ϕ | ϕ → ϕ | ∀x.ϕ | ∃x.ϕ<br />
Die Menge der freien Variablen einer qBF ϕ ist gegeben durch<br />
FV (true) = FV (false) := ∅<br />
FV (x) := {x}<br />
FV (¬ϕ) := FV (ϕ)<br />
FV (ϕ ∧ ψ) = FV (ϕ ∨ ψ) = FV (ϕ → ψ) := FV (ϕ) ∪ FV (ψ)<br />
FV (∀x.ϕ) = FV (∃x.ϕ) := FV (ϕ) − {x}<br />
Nicht freie Variablen sind durch einen Quantor gebunden.<br />
ϕ heißt geschlossen, falls jede auftretenden Variable gebunden ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 208 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Schreibweise: ϕ(x 0 , x 1 , . . . , x n−1 ) bedeutet FV (ϕ)⊆{ x i : i < n} .<br />
Fakt<br />
Jede geschlossene qBF ϕ kann in sogenannter Prenex-Normalform (PNF)<br />
dargestellt werden<br />
ϕ = Q 0 x 0 . Q 1 x 1 . . . . Q n−1 x n−1 . ψ(x 0 , . . . , x n−1 )<br />
wobei ψ keine Quantoren enthält. Mit Hilfe von “Dummy-Variablen” ist<br />
es zudem möglich, alternierende Prenex-Normalform (aPNF) zu erreichen,<br />
bei der Existenz- und All-Quantor alternieren:<br />
ϕ = ∃x 0 . ∀x 1 . . . . Q m−1 x m−1 . ψ(x 0 , . . . , x m−1 )<br />
Beispiel<br />
Das E-Problem QuantifizierteBoolescheFormel (QBF) hat als<br />
Eingabe eine geschlossene quantifizierte Boolesche Formel ϕ . Zu<br />
entscheiden ist, ob ϕ wahr ist.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 209 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Satz<br />
QBF ∈ PSPACE .<br />
Beweis.<br />
Enthält ϕ = Q 0 x 0 . Q 1 x 1 . . . . Q n−1 x n−1 . ψ(x 0 , . . . , x n−1 ) keine Quantoren,<br />
gilt ϕ ∈ {true, false} . Sonst entfernt man Q 0 und bewertet<br />
A = Q 1 x 1 . . . . Q n−1 x n−1 . ψ(false, . . . , x n−1 )<br />
B = Q 1 x 1 . . . . Q n−1 x n−1 . ψ(true, . . . , x n−1 )<br />
Falls Q 0 = ∃ , bildet man A ∨ B , andernfalls A ∧ B .<br />
Die Laufzeit dieses rekursiven Verfahrens beträgt O(2 n ) , bei einer<br />
Rekursionstiefe von n (Anzahl der Quantoren). Da die Auswertung<br />
quantorenfreier Formeln logarithmischen Platz in der Anzahl der Variablen<br />
benötigt (HA), liegt der Platzbedarf in O(n + log n) = O(n) .<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 210 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Satz<br />
QBF ist PSPACE -hart und somit PSPACE -vollständig.<br />
Beweis (vergl. Sipser)<br />
Für L ∈ PSPACE ist L ⊲ QBF nachzuweisen.<br />
Betrachte eine dTM M <strong>für</strong> L mit polynomialer Raumkomplexität p . Wie<br />
aus dem Beweis des Cooke’schen Satzes bekannt, können Zustand,<br />
Bandinhalt und Kopfposition von M durch Boolesche Formeln in KNF<br />
beschrieben werden, also auch die Konfigurationen von M .<br />
Wir führen neue Variable c i <strong>für</strong> Konfigurationen ein und konstruieren<br />
daraus entsprechend der Idee im Beweis des Satzes von Savich eine qBF<br />
ϕ 〈c0 ,c 1 ,i〉 , die ausdruckt, daß c 1 von c 0 aus in höchstens 2 i Schritten<br />
erreicht werden kann. Zu prüfen bleibt <strong>für</strong> Eingaben w ∈ Σ n die Wahrheit<br />
von ϕ 〈cw ,c F ,C·p(n)〉 .<br />
Wie zuvor ist der Fall ϕ 〈c0 ,c 1 ,0〉<br />
trivial.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 211 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Beweis (Fortsetzung)<br />
Beim Übergang zu i > 0 sind wieder beliebige Zwischenkonfigurationen<br />
zu verwenden. Wir schrieben die Formel entsprechend um:<br />
ϕ 〈c0 ,c 1 ,i+1〉 = ∃m 0 . (ϕ 〈c0 ,m 0 ,i〉 ∧ ϕ 〈m0 ,c 1 ,i〉)<br />
Das Einfügen einzelner Zwischenkonfigurationen verdoppelt aber die Länge<br />
der Formeln, was zu exponentiellem Wachstum führt. Das läßt sich aber<br />
mit Hilfe universeller Quantifizierung verhindern:<br />
ϕ 〈c0 ,c 1 ,i+1〉 = ∃m 0 . ∀(c 2 , c 3 ) ∈ {(c 0 , m 0 ), (m 0 , c 1 )}. ϕ 〈c2 ,c 3 ,i〉<br />
Um die Größe von ϕ 〈cw ,c F ,C·p(n)〉 abzuschätzen, stellen wir fest, daß<br />
aufgrund der Rekursion die Formel um O(p(n)) wächst. Bei eine<br />
Rekursionstiefe von O(p(n)) ergibt sich also eine Formel der Größe<br />
O((p(n)) 2 ) , wie im Beweis des Satzes von Savich.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 212 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
QBF kann als Erweiterung von Sat aufgefaßt werden: eine KNF-Formel<br />
ϕ(x 0 , . . . , x t−1 ) ist genau dann erfüllbar, wenn folgende Formel wahr ist<br />
∃x 0 . ∃x 1 . . . . ∃x t−1 . ϕ<br />
qBF-Formeln in aPNF lassen sich auch spieltheoretisch interpretieren: zwei<br />
Spieler, Eloise und Abelard, wählen abwechsend Werte <strong>für</strong> die Variablen in<br />
ψ = ∃x 0 . ∀x 1 . . . . Q m−1 x m−1 . ϕ(x 0 , . . . , x m−1 )<br />
Eloise <strong>für</strong> die durch Existenzquantoren gebundenen Variablen, Abelard <strong>für</strong><br />
die übrigen. Eloise gewinnt, falls in der so bestimmten Belegung ϕ wahr<br />
ist, andernfalls gewinnt Abelard.<br />
Definition<br />
Die Sprache FormelSpiel besteht aus denjenigen geschlossenen Formeln<br />
in aPNF, <strong>für</strong> die Eloise eine Gewinnstrategie hat.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 213 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Man überzeugt sich leicht davon, daß FormelSpiel PSPACE -<br />
vollständig ist (HA).<br />
Nachdem sich PSPACE als “große” Komplexitätsklasse herausgestellt<br />
hat, die sogar NP umfaßt, fehlt hinsichtlich der Raumkomplexität noch<br />
eine “kleines” Gegenstück zu P . Aber um sub-lineare Raumkomplexität<br />
sinnvoll definieren zu können, ist bei der Definition von Raumkomplexität<br />
an sich die Rolle des Eingabebandes zu überdenken:<br />
Definition<br />
Eine 2-Band Turingmaschinen mit einerm read-only Eingabeband und<br />
einem normalen Arbeitsband hat Raumkomplexität f (n) , falls jede<br />
Eingabe der Länge n höchstens f (n) Raum auf dem Arbeitsband<br />
benötigt. Wenn es um die Berechnung von Funktionen geht, ist zusätzlich<br />
noch ein write-only Ausgabeband vorzusehen.<br />
Im Gegensatz zu endlichen Automaten und Kellerautomaten wird die<br />
Eingabe nicht notwendig als Strom verarbeitet, da auf dem Eingabeband<br />
Schritte in beiden Richtungen möglich sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 214 / 215
6. Komplexität von Algorithmen 6.12 Raumkomplexität<br />
Weitere interessante Raum-Komplexitätsklassen:<br />
Definition<br />
Die Klasse L ( NL ) besteht aus allen E-Problemen, die von einer<br />
(nicht)deterministischen Turingmaschine mit Raumkomplexität in<br />
O(log n) gelöst werden können.<br />
Beispiel<br />
Sowohl die Sprache der korrekt geklammerten Ausdrücke über {), (} als<br />
auch die die Sprache {w ∈ {a, b} ∗ : |w| a = |w| b } liegen in L : Man muß<br />
nur die Anzahl noch offener Klammern bzw. die Anzahlen von Symbolen a<br />
sowie b binär bestimmen und mit 0 bzw. miteinander vergleichen.<br />
Man kann zeigen, daß Erreichbarkeit in gerichteten Graphen und<br />
2-Sat in NL liegen und sogar NL-vollständig sind, woraus<br />
L ⊆ NL ⊆ P folgt. Es ist offen, ob diese Inklusionen echt sind.<br />
Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 215 / 215