-
Notifications
You must be signed in to change notification settings - Fork 1
/
2-turingmaschinen-berechenbarkeit-komplexitaetsklassen.tex
374 lines (206 loc) · 12.8 KB
/
2-turingmaschinen-berechenbarkeit-komplexitaetsklassen.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
%!TEX root = 0-main.tex
% Author: Philipp Moers <[email protected]>
\datum{12.10.15}
\chapter{Turingmaschinen, Berechenbarkeit und Komplexität} % (fold)
\label{cha:turingmaschinen_berechenbarkeit_und_komplexitaet}
\section{Turingmaschinen}
\begin{definition}
Eine \definiere{Turingmaschine} $T$ mit $k$ Bändern ist ein 5-Tupel
$$ T = (Q, \Sigma, I, q_0, F) $$
\begin{itemize}
\item $Q$ ist eine endliche Menge von Zuständen
\item $\Sigma$ ist eine endliche Menge von Bandsymbolen, $\square \in \Sigma$
\item $I$ ist eine Menge von Quintupeln der Form $(q, s, s', m, q')$ mit $q, q' \in Q$ und $s, s' \in \Sigma^k$ und $m \in \{ L, R, S \}^k$
\item $q_0 \in Q$ Startzustand
\item $F \subseteq Q$ Endzustände
\end{itemize}
$\square$ ist das Leerzeichen oder \definiere{Blanksymbol}.
$T$ heißt \definiere{deterministisch} genau dann, wenn für jedes $q \in Q$ und $s \in \Sigma^k$ genau ein Quintupel der Form $(q, s, \_, \_, \_) \in I$ existiert. Sonst heißt $T$ \definiere{nichtdeterministisch}.
Eine Turingmaschine heißt \definiere{Akzeptormaschine} genau dann, wenn zwei Zustände $q_A, q_R \in F$ speziell markiert sind. $q_A$ signalisiert Akzeptanz, $q_R$ signalisiert Verwerfen der Eingabe.
Eine Turingmaschine heißt \definiere{Transducermaschine} genau dann, wenn ein zusätzliches Band ausgezeichnet ist (das Ausgabeband).
\end{definition}
\begin{beispiel}
\label{nullenundeinsen}
Akzeptormaschine $T$ für Sprache $L = \{ 0^n 1^n | n \geq 0 \}$ wobei $\Sigma= \{0,1\}, Q = \{q_0, \dots q_4 \}$
$T$ wird deterministisch sein. $T = (Q, \Sigma, I, q_0, F), q_A = q_1, q_R = q_2, F = \{q_1, q_2\}, k=2$
\vspace{2pt}
\begin{tabular}{|c|c|c|c|c|c|c|c|}\hline
\rowcolor{grau} $q$ & $s_1$ & $s_2$ & $s_1'$ & $s_2'$ & $m_1$ & $m_2$ & $q'$ \\\hline
$q_0$ & $\square$ & $\square$ & $\square$ & $\square$ & $S$ & $S$ & $q_1$ \\\hline
$q_0$ & $0$ & $\square$ & $0$ & $0$ & $R$ & $R$ & $q_3$ \\\hline
$q_0$ & $1$ & $\square$ & $1$ & $\square$ & $S$ & $S$ & $q_2$ \\\hline
$q_3$ & $\square$ & $\square$ & $\_$ & $\_$ & $\_$ & $\_$ & $q_2$ \\\hline
$q_3$ & $0$ & $\square$ & $0$ & $0$ & $R$ & $R$ & $q_3$ \\\hline
$q_3$ & $1$ & $\square$ & $1$ & $\square$ & $S$ & $L$ & $q_4$ \\\hline
$q_4$ & $0$ & $0$ & $\_$ & $\_$ & $\_$ & $\_$ & $q_2$ \\\hline
$q_4$ & $1$ & $0$ & $1$ & $0$ & $R$ & $L$ & $q_4$ \\\hline
$q_4$ & $0$ & $\square$ & $\square$ & $\square$ & $S$ & $S$ & $q_1$ \\\hline
$\_$ & $\_$ & $\_$ & $\_$ & $\_$ & $\_$ & $\_$ & $q_2$ \\\hline
\end{tabular}
\end{beispiel}
Die \definiere{globale Konfiguration} (oder der \definiere{Zustand}) einer Turingmaschine beinhaltet die Beschriftung aller Bänder, den internen Zustand ($\in Q$) und die Positionen aller $k$ Lese-/Schreibköpfe. Globale Konfigurationen können als endliche Wörter über einem geeigneten Alphabet (z.\,B. $\{0,1\}$) codiert werden.
Eine Turingmaschine \definiere{akzeptiert} eine Eingabe genau dann, wenn eine Berechnungsfolge ausgehend von dieser Eingabe existiert und in einem Zustand aus $F$ endet.
Eine Turingmaschine \definiere{akzeptiert} eine Sprache $L \subseteq \left( \Sigma \setminus \{\square\} \right)^\ast$ falls gilt:
$$ \text{Die Turingmaschine akzeptiert } w \Leftrightarrow w \in L $$
Eine Turingmaschine \definiere{entscheidet} eine Sprache $L \subseteq \left( \Sigma \setminus \{\square\} \right)^\ast$ genau dann, wenn sie sie akzeptiert und eine/die Berechnung in $q_A$ endet.
\datum{15.10.15}
Zu \definiere{Mehrband-Turingmaschinen}:
Bisher waren die Bänder beidseitig unendlich. Ab jetzt und im Buch sind sie nur noch einseitig unendlich.
\begin{satz}
Eine Mehrband-Turingmaschine mit $k$ Bändern kann durch eine Einband-Turingmaschine simuliert werden.
Dies benötigt quadratischen Mehraufwand.
\end{satz}
\begin{beweis}
Die Beweisidee nutzt für das alte Alphabet $\Sigma$ das neue Alphabet $\Sigma^k \times \{0,1\}^k$, das die Zeichen auf den Bändern und, ob der Lese-/Schreibkopf an dieser Position steht, speichert.
\end{beweis}
\begin{definition}
Eine \definiere{universelle Turingmaschine} erhält als Eingabe $(M, x)$, wobei $M$ die Beschreibung einer Turingmaschine in geeignetem Binärformat und $x$ die Eingabe für $M$ ist.
Sie berechnet dann die Ausführung von $M$ auf $x$.
\end{definition}
\section{Halteproblem}
\begin{definition}
Gegeben Turingmaschine und Eingabe $(M, x)$. Das Problem, zu entscheiden, ob $M$ angewendet auf $x$ hält oder nicht, heißt \definiere{Halteproblem}.
\end{definition}
\begin{satz}
Das Halteproblem ist unentscheidbar.
\end{satz}
\begin{beweis}
Angenommen, es gäbe eine Turingmaschine $M_{HALT}$, die das Halteproblem entscheidet.
Dann könnten wir auch eine neue Turingmaschine $M_D$ konstruieren:\\
Simuliere Eingabe $M$ auf $M$ selbst und schaue, ob sie hält. Falls ja, dann gehe in Endlosschleife. Falls nicht, halte an.
Für $M = M_D$ ergibt sich nun ein Widerspruch: Falls sie hält, hält sie nicht. Falls sie nicht hält, hält sie.
\end{beweis}
\section{Rechenzeit}
\begin{definition}
Die \definiere{Rechenzeit} definiert man wie folgt:
Gegeben eine Turingmaschine $M$ und Eingabe $x$.
$TIME_M(x)$ ist die Dauer (Anzahl der Schritte) der Berechnung von $M$ auf $x$.
\end{definition}
% Im Beispiel \ref{nullenundeinsen} bla
Im Beispiel der Maschine für $L = \{ 0^n 1^n | n \geq 0 \}$ ist $TIME_M(x) = |x| $ (Länge des Strings).
\begin{satz}
Das \definiere{Speedup-Theorem} besagt, dass zu jeder Turingmaschine $M$ eine äquivalente Turingmaschine $M'$ konstruiert werden kann, sodass
$$ TIME_{M'}(x) \leq \frac{1}{k} * TIME_M(x) $$
wobei $k \in \N \setminus \{0\}$ fest gewählt ist.
\end{satz}
Zum Beispiel ist bei $k = 7$ die neue Turingmaschine siebenmal so schnell.
\begin{beweis}
Gegeben $M$ mit Alphabet $\Sigma$.
Dann wird $M'$ mit Alphabet $\Sigma^k$ konstruiert. Ein Symbol von $M'$ repräsentiert $k$ aufeinanderfolgende Symbole von $M$, d.h. $M'$ kann $k$ Schritte von $M$ ein einem einzigen ausführen.
\end{beweis}
\textbf{Anmerkung:}
Die Schritte werden in der Praxis also schon aufwändiger, die definierte Metrik $TIME$ erfasst das nur nicht. No Magic here.
\begin{definition}
Sei $f: \N \rightarrow \N$.
Dann definieren wir $DTIME(f)$ als Menge aller Entscheidungsprobleme (oder Berechnungsprobleme) $A$, zu denen eine \underline{deterministische} Turingmaschine $M$ existiert, sodass $M$ $A$ entscheidet und die Rechenzeit in $\bigO(f(n))$ liegt.
$$ DTIME(f) = \{
A
\ |\
\exists M:
M \text{ entscheidet } A
\text{ und }
\forall x \in \Sigma^\ast: TIME_M(x) = \bigO(f(|x))
\}
$$
\end{definition}
\begin{satz}
Matrixmultiplikation liegt in $\bigO(n^3)$, also in $DTIME(\sqrt{n}^3)$, wenn die Länge der Matrix auf dem Band $n$ ist.
Sie liegt sogar in $\bigO(n^{2.78})$
\end{satz}
Offen ist die Frage, ob sie in $DTIME(\sqrt{n}^2)$ liegt.
\section{Komplexitätsklassen}
\begin{definition}
Eine Menge der Form $DTIME(f(n))$ heißt \definiere{deterministische Zeitkomplexitätsklasse}.
Analog heißt $NTIME(f(n))$ für nichtdeterministische Turingmaschinen \definiere{nichtdeterministische Zeitkomplexitätsklasse}.
\end{definition}
Wir betrachten zu gegebener Funktion $f: \N \rightarrow \N$ durch Turingmaschine $M$ folgenden Algorithmus:
Rechne $M$ auf Eingabe $M$ selbst für $f(M)$ Schritte. Falls $M$ sich bis dahin akzeptiert, verwerfe die Eingabe. Falls sie sich verwirft oder bis dahin nicht gehalten hat, akzeptiere die Eingabe.
Das durch diesen Algorithmus beschriebene Problem
$$K_f = \{ M \ |\ M \text{ akzeptiert sich selbst nicht in höchstens } f(|M|) \text{ Schritten.} \}$$
ist ``offensichtlich'' entscheidbar. Die Rechenzeit für diese Entscheidung muss aber im allgemeinen $f(|M|)$ übersteigen.
Wäre $M_f$ eine Turingmaschine, die $K_f$ entscheidet und außerdem $TIME_{M_f} \leq f(|x|)$ für alle $x$, dann führt die Anwendung von $M_f$ auf $M_f$ selbst zum Widerspruch (wie beim Halteproblem).
$f$ muss dazu selbst in Zeit $\bigO(f(n))$ berechenbar und monoton steigend sein. Man nennt $f$ dann \definiere{zeitkonstruierbar}.
Durch geschickte Ausnutzung dieses Arguments erhält man den \definiere{Zeit-Hierarchie-Satz}:
\begin{satz}
Falls $f: \N \rightarrow \N$ zeitkonstruierbar ist, dann gilt:
$$ DTIME(f(n)) \subset DTIME(f(n)*\log^2(f(n))) $$
wobei $\subset$ eine echte Teilmengenbeziehung bezeichnet.
\end{satz}
\textbf{Anmerkung:}
``Vernünftige'' Funktionen wie $2^n$, $\log(n)$, $\sqrt{n}$ etc. sind zeitkonstruierbar.
\begin{satz}
Nach Borodin und Trakhtenbrot gilt das \definiere{Gap-Theorem}:
Für eine totale, berechenbare Funktion $g: \N \rightarrow \N$ mit $g(n) \geq n$ gibt es immer eine totale, berechenbare Funktion $f: \N \rightarrow \N$, sodass gilt:
$$ DTIME(f) = DTIME (g \circ f) $$
Es gibt also in der Hierarchie der Komplexitätsklassen beliebig große Lücken.
\end{satz}
\begin{definition}
\definiere{Wichtige Komplexitätsklassen:}
$$ \ComplexityClassP = \bigcup_{k \geq 1} DTIME(n^k) $$
$$ \ComplexityClassE = \bigcup_{k \geq 1} DTIME(2^{kn}) $$
$$ \ComplexityClassEXP = \bigcup_{k \geq 1} DTIME(2^{n^k}) $$
\end{definition}
Nach dem \definiere{Zeit-Hierarchie-Satz} gilt:
$$ \ComplexityClassP \subset \ComplexityClassE \subset \ComplexityClassEXP $$
\datum{19.10.15}
\begin{definition}
\definiere{Nichtdeterministische Zeitkomplexität}
Sei $T$ eine nichtdeterministische Turingmaschine.
Für $x \in \Sigma$ ist $NTIME_T(x)$
\begin{enumerate}
\item definiert genau dann, wenn alle Berechnungen von $T$ auf $x$ halten
\item Falls definiert und $x \in L(T)$ (d.h. es gibt eine akzeptierende Berechnung von $T$ auf $x$) definiert als Länge der kürzesten akzeptierenden Berechnungen von $T$ auf $x$.
\item Falls überhaupt definiert $x \notin L(T)$ so ist $NTIME_{(x)}$ die Länge der kürzesten Berechnung.
\end{enumerate}
\end{definition}
\begin{definition}
% TODO esox ? was ist das?
% TODO verstehen
Nichtdeterministische Komplexitätsklassen
$$ NTIME(f(n)) = \{ L | \exists T \text{ mit } L(T)=L \text{ und } NTIME_T(x) = \bigO(f(|x|)) \} $$
Es gibt einen nichtdeterministischen Zeithierachiesatz.
% P=U DTIME(n^k), NP = U NTIME(n^k)
% k>=1 k>=1
% E = U DTIME(2^kn), NE= U NTIME(2^KN)
% k>=1 k>=1
% EXP = DTIME(2^n^k), NEXP= U NTIME(2^N^k)
% k>=1 k>=1
$$ \ComplexityClassNP = \bigcup_{k \geq 1} NTIME(n^k) $$
$$ \ComplexityClassNE = \bigcup_{k \geq 1} NTIME(2^{kn}) $$
$$ \ComplexityClassNEXP = \bigcup_{k \geq 1} NTIME(2^{n^k}) $$
\end{definition}
Nichtdeterminismus kann durch erschöpfende Suche deterministsch simuliert werden.
z.B. $\ComplexityClassNP \subseteq \ComplexityClassEXP$
Allgemein:
$$NTIME(f(n)) \subseteq DTIME(2^{\bigO(f(n)})$$
(zeitkonstruierbar)
% ........\ --- Zeitkonstruierbar
\section{polynomielle Verifizierbarkeit}
\begin{definition}
Charakterisierung von $\ComplexityClassNP$ durch \definiere{polynomielle Verifizierbarkeit} $PV$.
\begin{align*}
L \subseteq \Sigma^{\ast} . & L \in PV \text{ genau dann, wenn }\\
& \exists V \in \ComplexityClassP ~~~\exists \text{ Polynom } p : \\
& L = \{ x ~|~ \exists y \in \{0,1\}^\ast : |y| \leq p(|x|) \land
x\#y \in V \}
\end{align*}
wobei $\# \notin \Sigma$
\end{definition}
\begin{satz}
$$ \ComplexityClassNP = PV $$
\end{satz}
\begin{beweis}
``$\subseteq$'':
$L \in \ComplexityClassNP$ . Sei $T$ eine nichtdeterministische Turingmaschine für $L$ mit Laufzeit $p(n)$.
$$ L' = \{(x,y) | y \text{ codiert eine akzeptierende Berechnung von } T \text{ auf } x \} $$
\begin{enumerate}
% TODO . (x,y,) ??? dafuq clemens
\item $x \in L \Leftrightarrow \exists y: |y| \leq (p(|x|))^2 . (x,y,) \in L'$
\item $L' \in \ComplexityClassP$
\end{enumerate}
``$\supseteq$'':
Gegeben $L, L' \in P$.
Eine nichtdeterministische Turingmaschine $T$ für $L$ rät zunächst $y$ und prüft dann $(x,y) \in L'$
\end{beweis}
$\ComplexityClassEXP$ im Gegensartz zu $\ComplexityClassNP$ bzw. $PV$ umfasst auch Probleme mit exponentiell großen Lösungen bzw solchen wo die Verifikation einer Lösung einen exponentiellen Aufwand macht.
% chapter turingmaschinen_berechenbarkeit_und_komplexitaet (end)