Die Turingmaschine besteht aus • der Steuereinheit, die

Werbung
Die Turingmaschine besteht aus
• der Steuereinheit, die verschiedene Zustände annimmt
• dem Band, welches unendlich ausgedehnt ist, aber nur auf
einem endlichem Bereich mit Zeichen aus einem Alphabet
beschrieben ist
• dem Lese-Schreib-Kopf
• der Übergangstabelle
Hier ist ein einfaches Turingprogramm. Außer dem Leerzeichen “
”
ist das Band nur mit 1“ belegt.
”
nachher
vorher
Zustand Zeichen Zustand Zeichen Bewegung
z0
z1
R
z1
1
z1
1
R
z2
1
H
z1
Überlegen Sie, weshalb man sagt, diese Übergangstabelle realisiere
Addition von 1 bei Unärdarstellung“.
”
Interaktive Simulation der Turingmaschine:
http:/www.Matheprisma.de, Modul Turingmaschine
In jedem Verarbeitungsschritt:
• wird das Zeichen unter dem Lese-Schreib-Kopf gelesen
• wird in der Übergangstabelle nach dem Eintrag gesucht, der
dieses Zeichen und den aktuellen Zustand der Steuereinheit
enthält,
• werden Zeichen und Zustand entsprechend der Angaben in
der Übergangstabelle geändert und
• wird der Lese-Schreib-Kopf um eine Position nach links (L)
oder rechts (R) weiterbewegt. Auch dies wird in der Übergangstabelle festgelegt.
• Der Lese-Schreib-Kopf kann auch angehalten werden (H). Die
Verarbeitung ist dann beendet.
257
258
7.1.2
Grenzen der Berechenbarkeit
Es gibt Funktionen, die nicht berechenbar sind.
Wegen der Church’schen These heißt dies: die nicht mit einer
Turingmaschine berechnet werden können.
1 3 Beispiel: Halteproblem
Menge der Eingaben: alle möglichen Übergangstabellen U
von Turingmaschinen
Funktion f :
8
1 falls die Turingmaschine mit
>
>
<
Übergangstabelle U für jede
f (U ) =
Bandbelegung anhält,
>
>
:
0 sonst
Es gibt keine Übergangstabelle für eine Turingmaschine, die
f berechnet.
2 3 Beispiel: Unentscheidbarkeit der Prädikatenlogik
Die Prädikatenlogik baut auf der Aussagenlogik auf. Prädikate enthalten Variablen; für jede Belegung der Variablen
nehmen sie den Wert wahr oder falsch an. Prädikate können
wie Aussagen verknüpft werden, zusätzlich auch mit den
Quantoren ∀ und ∃. Genaueres wird hier nicht erläutert.
Die Frage, ob eine prädikatenlogische Formel für jede Belegung der Variablen den Wert wahr annimmt, ist nicht entscheidbar.
3 3 Beispiel: Unentscheidbarkeit der Korrektheit
Die Frage, ob ein Programm semantisch korrekt ist (d.h.
es berechnet tatsächlich die spezifizierte Funktion), ist unentscheidbar.
Den Nachweis zu dieser Aussage können wir hier nicht führen.
Auch für diese Beispiele ist ein Beweis weit jenseits von dem, was
wir hier machen können.
Die Berechnung von Funktionen, die nur die Werte 0 und 1
annehmen, nennt man auch (ja/nein)-Entscheidungen. Man sagt
deshalb: Das Halteproblem ist nicht entscheidbar.
259
260
7.2
Komplexitätstheorie
4 3 Beispiele:
7.2.1
Komplexität von Algorithmen
Wie genau kann man die Laufzeit T eines Algorithmus vorhersagen?
T hängt ab
• von der jeweiligen Implementierung
• vom verwendeten Rechner
• von der jeweiligen Eingabe
• ...
Folgerung:
a) Euklidischer Algorithmus
berechnet ggT(a, b) für a, b ∈ N.
r := a mod b
solange r 6= 0
a := b
b := r
r := a mod b
ggT := b
Eingabegröße: n = max{a, b}.
• T hängt insbesondere von der Größe“ n der Eingabe ab:
”
T = T (n)
Für festes n kann T (n) immer noch unterschiedlich sein.
Wir verwenden für T (n) hier stets den worst case, also die
längste Laufzeit bei festem n.
• Es ist nicht sinnvoll, T (n) zu genau bestimmen zu wollen.
• Es genügt, die Zahl der elementaren Schritte eines Algorithmus zu bestimmen.
261
Elementare Schritte: Zuweisung, Division mit Rest, Vergleich
Laufzeit: solange-Schleife
√ wird höchstens logΘ n + 1 mal
durchlaufen (Θ = ( 5 + 1)/2).
Pro Durchlauf 3 Zuweisungen, 1 Vergleich und 1 Division
mit Rest. Also
T (n) ≤ C · (2 + 5 · (logΘ n + 1)) .
262
b) Sieb des Eratosthenes
bestimmt alle Primzahlen ≤ n.
p := 2
solange p2 ≤ n
s := 2 ∗ p {Aussieben mit Zahl p}
solange s ≤ n
streiche s {markieren}
s := s + p
setze p auf nächste, nicht gestrichene Zahl
Die t(n)-Ausdrücke will man noch vereinfachen:
5 3 Definition: Wir schreiben
T (n) = O(g(n))
mit einer Funktion g : N → R+, falls eine Konstante C > 0
und ein n0 existieren, so dass gilt
T (n) ≤ C · g(n) für alle n ≥ n0.
Eingabegröße: n
Elementare Schritte: Streichen (= Zugriff auf ein Feld
und Markieren), Zuweisung, Addition, Multiplikation,
Nächstes finden
Laufzeit: die innere solange-Schleife wird n/p-mal durch√
laufen, die äußere für Primzahlen ≤ n.
0
1
√
n
X
n
A.
T (n) ≤ C · @1 +
p
p=1, p Primzahl
6 3 Beispiele:
a) Euklidischer Algorithmus:
T (n) ≤ C · (2 + 5 · (logΘ n + 1)) .
ergibt
T (n) = O(log n).
(Wegen loga n = logb n · loga b braucht man die Basis des
log in O-Termen nicht anzugeben!)
263
264
7.2.2
b) Sieb des Eratosthenes:
0
√
1
n
A.
T (n) ≤ C · @1 +
p
p=1, p Primzahl
n
X
√
√
Es gibt höchstens n Primzahlen ≤ n, und
alle solchen Primzahlen p. Also
T (n) = O(n ·
Probleme und Instanzen
n
p
≤ n für
√
n).
7 3 Definition: Ein Problem ist eine zu berechnende Funktion
P : D → W mit zugehörigem Definitionsbereich D und
Werten in W .
Eine Instanz eines Problems P : D → W ist ein Paar
(P, S) mit S ∈ D.
(O-Terme können sehr grob nach oben abschätzen.)
8 3 Beispiele:
a) Problem größter gemeinsamer Teiler“:
”
P :N×N→N
Instanz: (a, b) = (144, 54).
b) Problem Primzahlen ≤ n “:
”
P : N → Potenzmenge von N
Instanz: n = 100
265
266
c)
Problem des Handlungsreisenden“:
”
P : {L : L ist Liste von Städten mit Entfernungen} →
R+
P (L) ist die Länge der kürzesten Rundtour, die alle Städte
einmal besucht.
W
RS
Instanz: L = SG
K
E
DO
d)
W
0
15
20
50
35
40
RS
15
0
10
45
50
50
SG
20
10
0
35
55
60
K
50
45
35
0
80
100
E
35
50
55
80
0
20
DO
40
50
60
100
20
0
Teilsummenproblem“:
”
P : {M : M ist eine Menge reeller Zahlen}×R → {0, 1}.
P (M, s) gibt an, ob es eine Teilmenge T von M gibt, bei
der die Summe der Elemente gerade s ergibt.
Instanz: M = {−0.2, 1, 2.3, 4.5}, s = 3.1.
7.2.3
Komplexität von Problemen
Wir werden jetzt Probleme in einfache“ und schwierige“ einteilen.
”
”
Ein tragfähiges Konzept hierzu ist überraschend komplex.
Ab jetzt schränken wir uns auf Entscheidungsprobleme ein, also
P : D → {0, 1}.
Als Größe n einer Eingabe S ∈ D verwenden wir die Anzahl der
bits bei geeigneter Binärcodierung.
9 3 Beispiel: Die Größe einer natürlichen Zahl k ist damit (Codierung als Binärzahl) n = O(log k).
Folge: Die Größe der Eingabe beim Euklidischen Algorithmus ist
n = O(log a + log b). Die Komplexität des Euklidischen Algorithmus wird O(n) statt O(log(max{a, b})).
10 3 Definition: Für ein (Entscheidungs-) Problem P : D →
W , ist die Komplexität t(n) des Problems P definiert als
die Laufzeit des besten Algorithmus, welcher P berechnet.
Hier genügt uns noch weniger als die Größenordnung O:
11 3 Definition: Die Klasse P ist die Menge aller Entscheidungsprobleme, für welche es eine Zahl k ∈ N gibt, so dass
die Komplexität des Problems O(nk ) ist.
267
268
P steht für polynomiale Komplexität .
Probleme aus P nennt man auch effizient berechenbar.
Warum ist P eine vernünftige Problemklasse?
• P ist weitestgehend unabhängig vom Maschinenmodell, also
davon, was man als elemtare Schritte auffasst. Wir hatten
auf den letzten Seiten — ohne es explizit zu sagen – das Random Access Memory (RAM) Modell verwendet. Verwendet man stattdessen z.B. das Modell der Turingmaschine,
so ändert sich P nicht.
• P ist weitestgehend unabhängig von der gewählten Binärcodierung für die Eingabe.
• Für Probleme, die nicht in P liegen, wächst die Komplexität
superpolynomial mit n. Für die Praxis sind solche Laufzeiten
definitiv viel zu lang.
12 3 Beispiel: Das Problem Entscheide, ob k der ggT von a
”
und b ist“, liegt in P .
Begründung: Es ist n = Länge einer Binärcodierung von k,
a und b. Berechne ggT(a, b) mit dem Euklidischen Algorithmus (Laufzeit O(n)) und vergleiche das Ergebnis mit k
(Laufzeit O(log(n)). Gesamtlaufzeit
t(n) = O(n) + O(log(n)) = O(n).
269
Eine fundamentale Schwierigkeit:
• Zugehörigkeit eines Problems zu P kann man durch Angabe eines geeigneten Algorithmus nachweisen.
• Will man zeigen, dass ein Problem nicht zu P gehört,
muss man zeigen, dass keine Algorithmen mit polynomialer
Komplexität existieren. Dies ist sehr schwierig.
• Es ist noch für kein praktisch relevantes Problem gelungen zu
zeigen, dass es nicht effizient berechenbar ist.
’Nicht effizient berechenbar’ ist deshalb keine günstige Art, schwierige Probleme zu charakterisieren.
Alternative: Aus der eigenen Erfahrung wissen wir: Es ist in der
Regel wesentlich schwieriger, eine Lösung zu bestimmen als nachzuprüfen, ob ein Lösungsvorschlag tatsächlich eine Lösung ist. Dies
geht in die beiden nächsten Definitionen ein.
13 3 Definition: Gegeben ist ein Entscheidungsproblem P : D →
{0, 1} und eine Menge von Zertifikaten Z . Eine Funktion
V : D × Z → {0, 1} verifiziert P , wenn es für jede Instanz (S, P ) von P mit P (S) = 1 ein Zertifikat z = z(S)
gibt mit V (S, z) = 1, und umgekehrt aus V (S, z) = 1
stets P (S) = 1 folgt. Die Größen n bzw. m von S bzw.
z(S) müssen dabei m = O(nk ) erfüllen. (z darf höchstens
polynomial in S wachsen.)
270
14 3 Beispiel: Das Problem Entscheide, ob p ∈ N keine Prim”
zahl ist“, wird verifiziert durch die Funktion V , welche jedem
Paar (p, a) mit a ∈ {2, . . . , p} den Wert 1 zuordnet, wenn
p durch a teilbar ist und 0 sonst. Es ist also Z = {2, . . . , p}.
Ein Algorithmus für V ist die Division mit Rest mit anschließendem Test, ob der Rest 0 ist.
Für p = 5529 ist z(p) = 57 ein Zertifikat mit V (5529, 57) =
1.
Es ist leichter auszurechnen, dass 57 die Zahl 5529 teilt, als
zu zeigen, dass 5529 keine Primzahl ist.
15 3 Definition: Die Klasse NP besteht aus all den (Entscheidungs-) Problemen, welche von einer Funktion verifiziert werden, für die es einen Algorithmus mit polynomialer Laufzeit
gibt.
Die Bezeichnung NP kommt daher, weil man die Klasse äquivalent
charakterisieren kann als die Probleme, welche mit einem nichtdeterministischen Algorithmus in polynomialer Zeit berechnet werden
können.
16 3 Satz: P ⊆ NP
Beweis Sei P : D → {0, 1} aus P . Nehme eine beliebige
Menge als Zertifikatmenge Z und setze V : D × Z →
{0, 1} als V (S, v) = P (S). Der polynomiale Algorithmus,
welcher P berechnet, berechnet auch V . Die Eingabe z wird
dabei einfach ignoriert.
Und die größte offene Frage der Theoretischen Informatik ist nun:
Gilt P = NP ?
Die Frage ist ungeklärt, aber fast alle glauben dass die richtige
Antwort Nein heißt, u.A. wegen des folgenden Resultates.
271
272
7.2.4
17 3 Satz: Die Klasse der NP-vollständigen Probleme ist nicht
leer. Diese Klasse besteht aus all den Problemen aus NP ,
für die gilt: Liegt P in P , so ist P = NP .
NP-vollständige Probleme
Die folgenden Probleme sind alle als NP-vollständig nachgewiesen.
Die Beweise können wir im Rahmen dieser Vorlesung nicht bringen.
18 3 Beispiel:
a) Das Problem des Handlungsreisenden
• Hat man für ein NP-vollständiges Problem P gezeigt P ∈ P,
so ist P = NP . Das hat bis jetzt noch niemand geschafft.
• Glaubt man P 6= NP, so liegen NP-vollständige Probleme
also nicht in P , sind also nicht effizient berechenbar.
Merke: NP-vollständig bedeutet höchstwahrscheinlich
in der Praxis nicht mit einem Algorithmus berechen”
bar“
b) Das Teilsummenproblem
19 3 Beispiel: Das Erfüllbarkeitsproblem: Gegeben ist eine aussagenlogische Formel mit n Aussageveriabeln. Gibt es eine
Belegung der Variabeln, so dass die Formel den Wert ’true’
annimmt?
Viele andere NP-vollständige Probleme beziehen sich auf Graphen.
20 3 Definition: Ein Graph ist eine Menge von Knoten, von denen
einige durch Kanten verbunden sind.
273
274
Beispiel: Haus vom Nikolaus
21 3 Beispiel: Das Hamilton-Kreis-Problem: Existiert in einem
Graph ein Hamilton-Kreis, d.h. ein Rundweg über die Kanten, der jeden Knoten genau einmal besucht?
22 3 Beispiel: Das Cliquen-Problem: Gibt es eine Clique der
Größe k in einem Graphen? Eine Clique ist eine Teilmenge
von Knoten, von denen zwei verschiedene stets auf einer
gemeinsamen Kante liegen. Die Größe der Clique ist die
Anzahl ihrer Knoten.
Mehr zu Komplexität und Rechnermodellen:
−→Automaten, Sprachen, Berechenbarkeit (Master)
275
Herunterladen