9.4 Viele Beispiele aus NP
9.4 Viele Beispiele aus NP
Problem 9.4.1 (3-Colorability). Gegeben ein Graph $G= (V,E)$, gibt es eine Färbung $c : V \rightarrow \{1,2,3\}$ mit
Wir müssen nun eine Zertifikatmaschine mit polynomieller Laufzeit angeben. Um uns nicht in technischen Details zu verlieren, werden wir einfach einen Algorithmus angeben, der zwei Inputs entgegennimmt: den Graphen $G$ (im Turingmaschinenkontext also das Eingabewort $x$) und ein Zertifikat. Hier ist unser Code:
Beobachtung 9.4.2 3-Colorability ist in NP.
Beweis. Wir müssen nun eine Zertifikatmaschine mit polynomieller Laufzeit angeben. Um uns nicht in technischen Details zu verlieren, werden wir einfach einen Algorithmus angeben, der zwei Inputs entgegennimmt: den Graphen $G$ (im Turingmaschinenkontext also das Eingabewort $x$) und ein Zertifikat. Hier ist unser Code:
def is_3_coloring(graph, c):
(V,E) = graph
for (u,v) in E:
if c[u] == c[v]:
return False
if c[u] not in [1,2,3] or c[v] not in [1,2,3]:
return False
return True
Falls nun $G$
$3$-färbbar
ist, wenn es also eine
solche Färbung $c: V \rightarrow \{1,2,3\}$ gibt,
dann wird obiger Algorithmus
is_3_coloring(graph,c)
auch
True
ausgeben. Falls er für ein $c$
True
ausgibt, dann ist $c$ tatsächlich eine gültige
3-Färbung und $G$ ist $3$ -färbbar.A\(\square\)
Das obige Beispiel verdeutlicht die Essenz der Klasse NP: es ist nicht klar, wie wir einen effizienten Algorithmus für 3-Colorabilityschreiben können; aber überprüfen, ob eine gegebene Färbung eine 3-Färbung von $G$ ist, das ist einfach.
Übungsaufgabe 9.4.1
(CNF-Satisfiability). Gegeben eine Formel $F$
in konjunktiver Normalform. Gibt es eine Belegung der
Variablen, so dass $F$ zu
True
wird?
Auch hier können wir eine einfache Prüf-Funktion
schreiben, die eine Formel $F$ und eine Belegung
$\alpha$ entgegennimmt, dann jede Klausel auswertet
und schaut, ob immer
True
rauskommt. Somit gilt:
auchCNF-Satisfiability
ist in NP.
Problem 9.4.3 (Subset Sum). Gegeben eine Liste $p_1, \dots, p_n \in \N$ von "Preisen" und ein "Guthaben" $g \in \N$, gibt es eine Menge $I \subseteq [n]$ mit
Dies ist ebenfalls in NP.
Sei $G = (V,E)$ ein Graph. Eine Menge $I \subseteq V$ heißt unabhängig, wenn es keine Kante $\{u,v\} \in E$ gibt mit $u,v \in I$.
Problem 9.4.4 Gegeben ein Graph $G=(V,E)$ und eine Zahl $k$ . Finde eine unabhängige Menge in $I$ in $G$ mit $|I| \geq k$, falls es eine solche gibt.
Ist dies in NP? Schon syntaktisch nicht! Es ist ja gar kein Entscheidungsproblem. Wir können aber eine Entscheidungsvariante definieren:
Problem 9.4.5 (Independent Set) Gegeben ein Graph $G=(V,E)$ und eine Zahl $k$. Gibt es eine unabhängige Menge in $I$ in $G$ mit $|I| \geq k$?
Das Entscheidungsproblem Independent Setist offensichtlich in NP. Als Zertifikat kommt z.B. einfach die Menge $I$ in Frage. Für alle Entscheidungsprobleme, die wir oben als Beispiele aufgelistet haben, kann man ganz natürlich das zugehörige Suchproblem definieren: gegeben ein Graph, finde eine 3-Färbung (falls es sie gibt); gegeben eine CNF-Formel, finde eine erfüllende Belegung (falls es sie gibt); gegeben ein Instanz von Subset Sum, finde eine Menge $I$ mit $\sum_{i \in I} p_i = g$.
Übungsaufgabe 9.4.2 Zeigen Sie für folgende Probleme, dass wir, falls wir einen effizienten Algorithmus dafür haben, dann auch einen effizienten Algorithmus schreiben können, der das entsprechende Objekt findet, falls es denn existiert!
Subset Sum (das ist einfach),
Independent Set (das ist auch recht einfach),
CNF-Satisfiability (auch),
3-Colorability (das ist trickreicher).
Dies geht nicht immer! Erinnern Sie sich an Primes. Der Agrawal–Kayal–Saxena-Algorithmus lässt uns entscheiden, ob eine gegebene Zahl $n$ prim ist; also auch, ob $n$ zusammengesetzt ist; allerdings geht daraus kein Algorithmus hervor, der einen Faktor auch findet. Wo wir gerade beim Faktorisieren sind: das Problem gegeben eine Zahl $X \in \N$, zerlege sie in ihre Primfaktoren ist ja kein Entscheidungsproblem. Können wir ein "entsprechendes" Entscheidungsproblem formulieren? Es sollte gelten: wenn wir das Entscheidungsproblem lösen können, dann auch das Suchproblem. Wie wir gesehen haben, ist Primes bzw.NonPrimesnicht das entsprechende Entscheidungsproblem, weil es uns nicht erlaubt, den Faktor auch zu finden.
Problem 9.4.6 (Small Factor) Gegeben eine Zahl $X \in \N$, binär codiert als $x \in \{0,1\}^n$, und eine Zahl $K \in \N$: gibt es einen echten Teiler $Z$ von $\N$ mit $Z \leq K$?
Übungsaufgabe 9.4.3 Zeigen Sie: wenn man Small Factor effizient lösen kann, dann kann man auch die Primzahlfaktorisierung von $X$ effizient finden. Hinweis: Effizient heißt in diesem Zusammenhang polynomiell in der Anzahl der Bits. Der Algorithmus probiere alle kleineren Zahlen aus, ob sie $X$ teilen, ist nicht effizient!
Das Entscheidungsproblem Small Factor ist offensichtlich in NP: das Zertifikat $z$ ist jener Faktor (so er denn existiert), und die Zertifikatmaschine $M$ muss nun $z$ mit $K$ multiplizieren und schauen, ob auch $X$ herauskommt. Nicht so offensichtlich jedoch ist folgendes:
Übungsaufgabe 9.4.4 Sei No Small Factor das Komplement von Small Factor, also
wobei $(x)_2$ und $(k)_2$ die von $x$ und $k$ codierten natürlichen Zahlen sind.
Diese Übungsaufgabe ist quasi eine Warnung: was denn eine Zertifikatmaschine auf ihrem zweiten Band erwartet, das geht nicht immer aus der Problemstellung hervor!