Lektion 6.4

Berechenbarkeit und Komplexität

18 min Lesezeit

Eine Entwicklerin wünscht sich ein Werkzeug, das jedes Programm daraufhin prüft, ob es in eine Endlosschleife gerät. Ein Lieferdienst will für 50 Kunden die kürzeste Tour und lässt den Rechner alle Reihenfolgen durchprobieren.

Das erste Vorhaben ist grundsätzlich unmöglich, das zweite praktisch nicht zu schaffen. Das sind zwei verschiedene Grenzen: Was lässt sich überhaupt berechnen? Und was lässt sich mit vertretbarem Aufwand berechnen?

Definition

Algorithmusbegriff und Turingmaschine

Ein Algorithmus ist eine endlich beschriebene, eindeutige Vorschrift aus ausführbaren Einzelschritten, die für jede Eingabe nach endlich vielen Schritten ein Ergebnis liefert. „Ausführbar“ ist dabei noch ungenau. Zur Präzisierung nutzt man ein einfaches Rechenmodell, die Turingmaschine (Alan Turing, 1936). Sie hat eine endliche Steuerung mit Zuständen, ein beidseitig unbegrenztes Band aus Feldern, die je ein Zeichen oder das Leerzeichen □ tragen, und einen Schreib-Lese-Kopf. In jedem Schritt hängt alles vom Zustand und dem Zeichen unter dem Kopf ab: Die Maschine schreibt ein Zeichen, bewegt den Kopf nach links (L), nach rechts (R) oder gar nicht (N) und wechselt den Zustand. Sie hält, wenn sie den Endzustand „halt“ erreicht.

Beispiel

Eine Turingmaschine addiert 1

Auf dem Band steht eine Binärzahl, der Kopf steht auf ihrem ersten Zeichen. Die Maschine soll 1 addieren.

ZustandliestschreibtKopfneuer Zustand
q000Rq0
q011Rq0
q0□□Lq1
q110Lq1
q101Nhalt
q1□1Nhalt

Was steht nach dem Lauf auf dem Band, wenn am Anfang 1011 steht?

In q0 läuft der Kopf über 1, 0, 1, 1 bis zum ersten □ und geht dann nach links auf die letzte Ziffer. In q1 wird jede 1 zu 0 (Übertrag) und der Kopf geht weiter nach links. Die letzte 1 wird 0, die vorletzte 1 wird 0, dann steht der Kopf auf der 0 an zweiter Stelle. Sie wird zu 1, und die Maschine hält. Auf dem Band steht 1100. Das stimmt: 1011 ist 11 und 1100 ist 12.

Definition

Registermaschine und Church-Turing-These

Die Registermaschine aus der Rechnerarchitektur (Register mit Zahlen, Befehle zum Laden, Rechnen und Springen) ist ein zweites Modell. Man kann zeigen: Jede Registermaschine lässt sich durch eine Turingmaschine nachbilden und umgekehrt. Beide berechnen dieselben Funktionen.

Die Church-Turing-These (Alonzo Church, Alan Turing) besagt: Jede im anschaulichen Sinn berechenbare Funktion lässt sich von einer Turingmaschine berechnen. Sie ist eine These und kein Satz, denn „anschaulich berechenbar“ ist kein mathematischer Begriff, man kann sie nicht beweisen. Für sie spricht, dass alle vorgeschlagenen Modelle (Registermaschine, Programmiersprachen mit unbegrenztem Speicher und weitere) dieselben Funktionen berechnen und kein Gegenbeispiel bekannt ist.

Definition

Entscheidbarkeit

Ein Entscheidungsproblem hat als Antwort ja oder nein, zum Beispiel: Ist n eine Primzahl? Es ist entscheidbar, wenn es einen Algorithmus gibt, der für jede Eingabe nach endlich vielen Schritten die richtige Antwort liefert. Sonst ist es unentscheidbar. Das Halteproblem fragt: Hält das Programm P bei der Eingabe x nach endlich vielen Schritten an?

Satz

Das Halteproblem ist unentscheidbar

Es gibt keinen Algorithmus, der für jedes Programm P und jede Eingabe x immer richtig sagt, ob P bei x hält. Läuft ein Programm P bei x tatsächlich irgendwann zu Ende, merkt man das beim Ausführen. Nur das „hält nie“ lässt sich nicht allgemein feststellen.

Definition

Laufzeitaufwand: polynomiell und exponentiell

Der Laufzeitaufwand zählt die Schritte eines Algorithmus in Abhängigkeit von der Eingabegröße n (O-Notation). Er heißt polynomiell, wenn er höchstens nkn^k für ein festes k wächst, und exponentiell, wenn er wie 2n2^n wächst. Die Tabelle zeigt die Schrittzahl, dazu die Dauer bei angenommenen 10910^9 Schritten pro Sekunde:

nn2n^2n3n^32n2^n
1010010001024
3090027000etwa 1,1⋅1091{,}1 \cdot 10^9, etwa 1 Sekunde
502500125000etwa 1,1⋅10151{,}1 \cdot 10^{15}, etwa 13 Tage

Ein tausendmal schnellerer Rechner hilft bei 2n2^n kaum: Er schafft nur etwa 10 weitere Elemente, denn 210=10242^{10} = 1024.

Definition

Die Klassen P und NP, SAT, Handlungsreisender, Rucksackproblem

P ist die Klasse der Entscheidungsprobleme, die ein Algorithmus in polynomieller Zeit löst. NP ist die Klasse der Entscheidungsprobleme, bei denen sich eine vorgeschlagene Lösung in polynomieller Zeit überprüfen lässt. Es gilt P⊆NP\mathrm{P} \subseteq \mathrm{NP}. Ob P=NP\mathrm{P} = \mathrm{NP} gilt, ist ungeklärt. Die NP-vollständigen Probleme sind die schwersten in NP: Hätte eines einen polynomiellen Algorithmus, hätten ihn alle in NP. Keiner ist bekannt, vermutet wird P≠NP\mathrm{P} \ne \mathrm{NP}.

  • SAT: Gibt es für eine aussagenlogische Formel eine Belegung der Variablen, die sie wahr macht? Die Formel (a∨b)∧(¬a∨c)∧(¬b∨¬c)(a \lor b) \land (\lnot a \lor c) \land (\lnot b \lor \lnot c) wird mit a = wahr, b = falsch, c = wahr wahr. Eine Belegung zu prüfen ist schnell, es gibt aber 2n2^n Belegungen. SAT ist NP-vollständig.
  • Handlungsreisender: Gesucht ist die kürzeste Rundreise durch n Städte, die jede genau einmal besucht und zum Start zurückkehrt. Bei gleichen Wegen in beiden Richtungen gibt es (n−1)!2\frac{(n-1)!}{2} Rundreisen, bei 10 Städten 181440.
  • Rucksackproblem: Gegenstände haben Gewicht und Wert, der Rucksack hat eine Tragfähigkeit. Gesucht ist die Auswahl mit dem höchsten Wert. Bei n Gegenständen gibt es 2n2^n Auswahlen.

Auch die Entscheidungsfassungen der beiden letzten Probleme sind NP-vollständig: „Gibt es eine Rundreise höchstens dieser Länge?“ und „Gibt es eine Auswahl mindestens dieses Wertes?“.

Definition

Brute-Force, Greedy und Näherungslösungen

Brute-Force probiert alle Möglichkeiten durch. Das Ergebnis ist optimal, der Aufwand bei den Problemen oben aber exponentiell. Ein Greedy-Verfahren baut die Lösung Schritt für Schritt auf und nimmt jeweils, was im Moment am besten aussieht, ohne es zurückzunehmen. Es ist schnell, liefert aber nicht immer das Optimum. (Bei den kürzesten Wegen nach Dijkstra und den Spannbäumen nach Prim liefert es dagegen das Optimum.) Eine Näherungslösung ist eine Lösung, die nicht unbedingt optimal ist, aber in vertretbarer Zeit gefunden wird. Beim Handlungsreisenden geht man etwa stets zur nächsten noch nicht besuchten Stadt.

Beispiel

Rucksack: Brute-Force gegen Greedy

Die Tragfähigkeit beträgt 10 kg. A wiegt 6 kg und hat den Wert 30, B wiegt 5 kg und hat den Wert 24, C wiegt 5 kg und hat den Wert 24. Bestimme die beste Auswahl mit Brute-Force und mit dem Greedy-Verfahren „höchster Wert je Kilogramm zuerst“.

Brute-Force: Bei drei Gegenständen gibt es 23=82^3 = 8 Auswahlen. Ohne Gegenstand ist der Wert 0. A allein hat 30, B allein 24, C allein 24. A und B (11 kg), A und C (11 kg) und alle drei (16 kg) sind zu schwer. B und C wiegen zusammen 10 kg und haben den Wert 48. Das Optimum ist also 48.

Greedy: Der Wert je Kilogramm ist bei A 5, bei B und C je 4,8. Greedy nimmt zuerst A (6 kg). Dann passt weder B noch C (6 + 5 = 11 kg). Der Wert ist 30, nur 62,5 % des Optimums. Greedy ist schneller, hier aber nicht optimal.

Häufige Fehler

Unentscheidbar heißt: noch nicht gelöst

„Mit schnelleren Rechnern wird man das Halteproblem irgendwann lösen.“

Richtig ist

Unentscheidbar ist bewiesen: Kein Algorithmus löst das Problem, auf keinem Rechner. Die Geschwindigkeit spielt keine Rolle.

Häufige Fehler

NP heißt nicht polynomiell

„NP-Probleme sind unlösbar, weil sie nicht polynomiell sind.“

Richtig ist

NP steht für „nichtdeterministisch polynomiell“. NP-Probleme sind lösbar, etwa durch Brute-Force. Vermutlich gibt es nur keinen schnellen, also polynomiellen Algorithmus. Probleme in P gehören auch zu NP.

Zusammenfassung

  • Eine Turingmaschine (Zustände, Band, Schreib-Lese-Kopf) präzisiert den Algorithmusbegriff. Registermaschinen sind gleich mächtig.

  • Die Church-Turing-These: Alles anschaulich Berechenbare ist turingberechenbar. Sie ist eine These und lässt sich nicht beweisen.

  • Das Halteproblem ist unentscheidbar. Der Beweis führt die Annahme eines Entscheiders durch ein Programm, das sich selbst widerspricht, zum Widerspruch.

  • Polynomieller Aufwand ist handhabbar, exponentieller wächst so schnell, dass schnellere Rechner kaum helfen.

  • P: in polynomieller Zeit lösbar. NP: Lösungen in polynomieller Zeit prüfbar. Ob P=NP\mathrm{P} = \mathrm{NP} gilt, ist offen.

  • SAT, Handlungsreisender und Rucksackproblem sind NP-vollständig. Für keines kennt man ein exaktes Verfahren mit polynomiellem Aufwand.

  • Brute-Force ist exakt, aber teuer. Greedy ist schnell, aber nicht immer optimal. Näherungslösungen tauschen Genauigkeit gegen Zeit.

Übungen

Aufgabe 1Multiple Choice

Die Turingmaschine „addiere 1“ aus dem Beispiel startet auf dem Wort 111. Was steht nach dem Halt auf dem Band?

Aufgabe 2Multiple Choice

Welche Aussage über Greedy-Verfahren stimmt?

Aufgabe 3Numerisch

Ein Algorithmus braucht bei der Eingabegröße n genau 2n2^n Schritte. Wie oft so viele Schritte braucht er bei n = 25 im Vergleich zu n = 20?

Aufgabe 4Numerisch

Wie viele verschiedene Rundreisen gibt es bei 6 Städten, wenn Hin- und Rückrichtung als dieselbe Rundreise zählen?

Aufgabe 5Multiple Choice

Warum kann es kein Programm geben, das für jedes Programm und jede Eingabe richtig entscheidet, ob es hält?

Aufgabe 6Freitext

Erkläre am Beispiel SAT den Unterschied zwischen „eine Lösung finden“ und „eine Lösung prüfen“. Warum gehört SAT zu NP?