9.7 Beschränkter Speicherplatz
9.7 Beschränkter Speicherplatz
In den vergangen Kapiteln haben wir die Laufzeit einer Turingmaschine beschränkt und die Komplexitätsklassen studiert, die sich daraus ergeben, allen voran P und NP. Die neben Zeit wohl wichtigste Resource beim Rechnen ist der Platz. Turingmaschinen erlauben uns auch, präzise über den benötigten Speicherplatz zu sprechen. Der Platz einer Konfiguration $C = uqv \in \Gamma^* \times Q \times \Gamma^*$ ist die Anzahl der belegten Speicherzellen, also beispielsweise $|uv|$. Bei $k$ -Band-Maschinen müssen wir das über alle Bänder aufsummieren. Wir können eine Konfiguration also als Tupel in
darstellen. Eine Konfiguration $C = (q, (u_1, v_1), \dots, (u_k, v_k))$ besagt dann beispielsweise, dass auf Band $i$ das Wort $u_iv_i$ steht, wobei der Kopf auf dem ersten Zeichen von $v_i$ steht. Die Größe von $C$ ist dann $|C| := |u_1| + |v_1| + \cdots + |u_k| + |v_k|$. Eine Turingmaschine läuft in Platz $s(n)$, wenn für alle $x \in \Sigma^*$ alle erreichten Konfigurationen höchstens die Größe $s(|x|)$ haben. Diese Definition hat den Nachteil, dass der Platzbedarf immer mindestens $n$ ist: bereits die Startkonfiguration $\qstart x_1 x_2 \dots x_n$ besteht ja aus $n$ Zeichen. Das ist aber irgendwie unfair. Wir wollen nur den Platz zählen, der über das Eingabewort hinausgeht. Wenn wir über Platzbedarf sprechen, dann gehen wir von einer Turingmaschine aus, die
ein Eingabeband hat, auf dem sie nur lesen darf;
beliebig viele Arbeitsbänder, auf denen sie lesen und schreiben darf;
ein Ausgabeband, auf dem sie schreiben darf, aber nur nach rechts laufen darf.
Wenn wir eine Sprache $L \subseteq \Sigma^*$ entscheiden wollen, dann brauchen das Ausgabeband nicht wirklich. Wenn wir eine Funktion $f: \Sigma_1^* \rightarrow \Sigma_2^*$ berechnen wollen, dann sehr wohl.
Eingabe und Ausgabe:
wenn Sie ein C-Programm schreiben
und auf
stdout
schreiben, dann entspricht diese Operation
in gewisser Weise der Turingmaschine, die auf das
Ausgabeband schreibt; sie können ja sich den Output auch
nicht irgendwie zurückholen. Das lesen von
stdin
entspricht allerdings nicht ganz dem Eingabeband der
Turingmaschine. Ein bedeutender Unterschied ist, dass die
Turingmaschine auf dem Eingabeband zwar nicht schreiben
darf, aber dennoch beliebig nach rechts und links gehen
darf. Das können Sie auf
stdin
in der Regel nicht.
Streaming-Modell: wenn wir der Turingmaschine verbieten, auf dem Eingabe-Band nach links zu laufen, wenn sie also jedes Eingabezeichen nur einmal lesen darf, dann erhalten wir das sogenannte Streaming-Modell, das in den letzten Jahren an Popularität gewonnen hat, weil wir es heutzutage in vielen Anwendungen mit Datenmengen zu tun haben, die nicht in den Speicher des Rechners passen und auch nur einmal gelesen werden können (z.B. Sensordaten). Im Kurs Effiziente Algorithmen gibt es ein Kapitel zu Streaming-Algorithmen.
Definition 9.7.1 ($\SPACE(s)$). Sei $M$ eine Turingmaschine mit dezidiertem Eingabeband 1 und Ausgabeband $k$. Die Größe einer Konfiguration ist die Größe der Bandinhalte der Arbeitsbänder. Die Konfiguration $C = (q, (u_1, v_1), \dots, (u_k, v_k))$ hat Größe $|u_2| + |v_2| + \cdots + |u_{k-1}| + |v_{k-1}|$. Sei $s : \N \rightarrow \N$. Die Turingmaschine $M$ läuft in Platz $s$, falls
sie für jedes $x \in \Sigma^*$ terminiert und
jede erreichte Konfiguration höchstens Größe $O(s(|x|))$ hat.
Eine Sprache ist in $\SPACE(s)$, wenn es eine Turingmaschine gibt, die in Platz $s$ läuft und sie entscheidet.
Beobachtung 9.7.2 Wenn $M$ in Platz $s(n)$ läuft, dann hat $M$ Laufzeit $2^{O(s(n))}$.
Beweis Für gegebenes $n$ sei $S \in O(s(n))$ der maximale Platzbedarf der Turingmaschine. Es gibt maximal $T := |Q| \cdot \left(|\Gamma|+1\right)^{kS}$ Konfigurationen (warum?). Da $M$ terminiert, kann die Berechnung nicht mehr $T$ Schritte dauern.A\(\square\)
Übungsaufgabe 9.7.1 Zeigen Sie, dass wir die Bedingung 1 aus Definition 9.7.1 weglassen können, zumindest wenn $s(n)$ zeitkonstruierbar ist.
Wir definieren
also die Menge aller Probleme, die man mit polynomiellem Speicherplatz entscheiden kann, und
die Menge aller Probleme, die man mit logarithmischem Speicherplatz entscheiden kann. Man nennt $L$ auch LogSpace.
Übungsaufgabe 9.7.2 Zeigen Sie, dass ${\rm NP} \subseteq {\rm PSPACE}$ gilt. Fangen Sie zum Beispiel an,3-Colorability $\in$ PSPACE zu zeigen.
Übungsaufgabe 9.7.3 Sei Palindrome die Sprache aller Palindromwörter mit Trennungszeichen in der Mitte, also
Zeigen Sie, dass Palindrome $\in$ L
Übungsaufgabe 9.7.4 Zeigen Sie, dass die Sprache aller wohlgeformten Klammerausdrücke in L ist, also die Sprache über $\{a,b\}$ mit
Übungsaufgabe 9.7.5 Seien $f: \Sigma_1 \rightarrow \Sigma_2$ und $g: \Sigma_2 \rightarrow \Sigma_3$ zwei Funktionen. Zeigen Sie, dass, falls $f$ und $g$ in logarithmischem Platz berechnet werden können, dann auch $g \circ f: \Sigma_1 \rightarrow \Sigma_3$. Hinweis: der "offensichtliche" Ansatz funktioniert nicht. Warum nicht?