Komplexitätstheorie

Werbung
Komplexitätstheorie
Spezialgebiet für Komplexe Systeme
Yimin Ge
5ahdvn
Inhaltsverzeichnis
1 Begriffe und Definitionen
1
2 Beispiele
2
3 Die
3.1
3.2
3.3
3.4
1
Klassen P und N P
Die Komplexitätsklasse P . . . . .
Die Klasse F P und Reduzierbarkeit
Die Komplexitätsklasse N P . . . .
N P-Vollständigkeit . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
6
8
9
Begriffe und Definitionen
Definition 1. Sei f : D → R eine Funktion mit Definitionsbereich D. Dann sei
O(f ) := {g : D → R | ∃C ∈ R+ : ∀x ∈ D : |g(x)| ≤ C|f (x)|}.
Bemerkung 1. Im Rahmen der Komplexitätstheorie ist meist D = N.
Bemerkung 2. In der Literatur ist es üblich, statt f ∈ O(g) die vereinfachte, genau genommen aber mathematisch nicht ganz korrekte Notation
f (x) = O(g(x))
zu verwenden. Ich werde im Rahmen dieses Artikels ebenfalls von dieser Notation Gebrauch
machen.
Beispiel 1. Es gilt
n2 + 1 = O(n2 )
n3 + n + cos(n) = O(n3 )
11n3 + 3n2 + 4n + 9 = O(n3 )
n2 log2 (n) + 3n2 = O(n2 log n).
1
Wir sehen zB anhand des letzten Beispiels, dass die Angabe einer Logarithmenbasis für die
O-Notation nicht notwendig ist, da diese sich nur auf die Konstante auswirkt.
Im folgenden bezeichne ein Problem eine allgemeine Aufgabe, eine Instanz des Problems
bezeichnet hingegen einen konkreten Fall. Ferner wird zwischen Entscheidungsproblemen und
Suchproblemen unterschieden.
Beispielsweise ist die Faktorisierung einer natürlichen Zahl ein Suchproblem, die Faktorisierung von 1234567 eine Instanz des Problems.
Definition 2. Sei A ein Algorithmus und T (n) die Laufzeit von A in Abhängigkeit von der
Eingabelänge n. Dann heißt A polynomial, wenn es eine positive ganze Zahl k gibt, sodass
T (n) = O(nk ).
Es zeigt sich, dass die Eigenschaft, ob ein Algorithmus polynomial ist, nicht vom konkreten Modell der Berechnung (Turingmaschine, RAM, Workstation, etc) abhängt.
Definition 3. Ein Problem heiße polynomial, wenn es einen polynomialen Lösungsalgorithmus
besitzt.
Definition 4. Sei L eine formale Sprache über einem Alphabet Σ. Dann sagen wir, dass L
von der Ordnung g(n) ist, falls es eine Algorithmus mit Laufzeit T (n) = O(g(n)) gibt, der
feststellt, ob ein gegebenes Wort w ∈ Σ∗ in L enthalten ist.
Insbesondere bezeichnen wir also L als polynomial, wenn es einen polynomialen Algorithmus gibt, der feststellt, ob ein gegebenes Wort w ∈ Σ∗ in L liegt.
Man sieht leicht, dass jedes Entscheidungsproblem äquivalent zu einer formalen Sprache
ist (und umgekehrt), denn die Frage, ob ein gegebenes Wort zu einer Sprache gehört ist
trivialerweise ein Entscheidungsproblem und umgekehrt kann die Eingabe jedes Entscheidungsproblems mit einem Wort über einem Alphabet vernünftig kodiert werden (ohne näher
auf den Begriff der Vernünftigkeit einer Kodierung einzugehen). Die Frage, auf welche Eingaben die Antwort des Entscheidungsproblems “Ja” lautet, kann also auf die Sprache dieser
kodierter Eingaben zurückgeführt werden. Es gilt also
Satz 1.
Entscheidungsproblem ≡ formale Sprache.
2
Beispiele
Betrachten wir nun einige einfache Beispiele (in C), um die Analyse der Komplexität eines
Algorithmus zu demonstrieren.
Beispiel 2 (Bubblesort). Gegeben sei folgender Sortieralgorithmus (Bubblesort) für die Sortierung eines Arrays:
2
/∗ ∗
∗ @param
i n t ∗ array
Feld , w e l c h e s s o r t i e r t werden s o l l
∗ @param
int n
Größe d e s Arrays
∗/
void b u b b l e s o r t ( i nt ∗ a r r a y , i nt n )
{
i nt i , j , tmp ;
for ( i =0; i < n ; i ++)
{
for ( j =0; j < n−1− i ; j ++)
{
i f ( a r r a y [ j ] > a r r a y [ j + 1 ])
{
tmp = a r r a y [ j ] ;
a r r a y [ j ]= a r r a y [ j + 1 ] ;
a r r a y [ j +1]=tmp ;
}
}
}
}
Wir haben zwei Schleifen, eine äußere (Laufvariable i) und eine innere (Laufvariable j).
Die äußere Schleife wird auf jeden Fall genau n Mal, die innere beim ersten Durchlauf n−1
Mal, beim zweiten Durchlauf n−2 Mal usw durchlaufen. In jedem dieser Schleifendurchgänge
wird eine Operation durchgeführt, die unabhängig von der Eingabelänge n ist und deren
Zeitkomplexität daher nach oben sicherlich als konstant abgeschätzt werden kann. Für die
Laufzeit T (n) von Bubblesort gilt daher
n(n − 1)
= O(n2 )
T (n) = O(K ((n − 1) + (n − 2) + · · · + 1)) = O K
2
für eine Konstante K.
Beispiel 3 (Binäre Suche). Gegeben sei folgender Suchalgorithmus (Binäre Suche) für ein
sortiertes Array:
/∗ ∗
∗ @param
i n t ∗ array
Feld , i n dem g e s u c h t werden s o l l
∗ @param
int n
Größe d e s Arrays
∗ @param
int pattern
Suchmuster
∗ @return
int
−1 f a l l s n i c h t gefu n den , s o n s t i n d e x
∗/
i nt b i n a r y S e a r c h ( i nt ∗ a r r a y , i nt n , i nt p a t t e r n )
{
i nt l e f t =0 , middle , r i g h t=n , i n d e x =−1;
while ( l e f t <= r i g h t && index <0 )
{
middle = ( l e f t +r i g h t ) / 2 ;
i f ( a r r a y [ middle ] < p a t t e r n )
{
l e f t = middle +1;
3
}
e l s e i f ( a r r a y [ middle ] > p a t t e r n )
{
r i g h t = middle −1;
}
else
{
i n d e x = middle ;
}
}
return i n d e x ;
}
In diesem Beispiel wird das Feld ihrer Größe nach so lange halbiert, bis das Element
gefunden wird oder die Halbierung nicht mehr möglichi ist. Im schlimmsten Fall, wenn also
das Element nicht im Array vorkommt, wird die Halbierung so oft wie möglich durchgeführt.
Für disen Fall werden log2 (n) Schritte benötigt. Alle weiteren Programmteile hängen nicht
von der Eingabegröße n ab und können daher nach oben mit einer Konstante abgeschätzt
werden. Für die Laufzeit T (n) gilt daher
T (n) = O(K log2 (n)) = O(log(n))
für eine Konstante K.
3
Die Klassen P und N P
Obwohl wesentlich feinere Differenzierungen hinsichtlich der Komplexität von Problemen
möglich sind, sind vor allem zwei Komplexitätsklassen von großer Bedeutung, nämlich die
Klasse P aller effizeint lösbarer Probleme und die Klasse N P aller Probleme, für die eine
Überprüfung, ob eine gebotene Lösung zu einer Probleminstanz tatsächlich eine Lösung ist,
polynomial ist. Es ist bis heute unbekannt ob P = N P gilt. Diese Frage gehört zu den 7
Millenium-Problemen, deren Lösung jeweils eine Million US-Dollar wert sind.
Es gibt allerdings eine Vielzahl sogennanter N P-vollständiger Probleme, von denen man
weiß, dass jedes Problem in N P auf diese (effizient) zurückgeführt werden können. Falls also
gezeigt werden kann, dass eines dieser Probleme in P liegt, würde P = N P folgen.
Nach Satz 1 ist jedes Entscheidungsproblem äquivalent zu einer formalen Sprache. Wir
können uns also bei der Behandlung der Komplexitätsklassen auf formale Sprachen und
deren Akzeptanz beschränken.
3.1
Die Komplexitätsklasse P
Intuitiv kann die Komplexitätsklasse P als Klasse aller Entscheidungsprobleme, für die es ein
Polynom P (n) und einen Algorithmus gibt, der für jede Eingabe der Länge n höchstens P (n)
Einzelschritte bzw. Zeiteinheiten benögtigt, um die Instanz dieses Entscheidungsproblems zu
lösen, auffassen.
4
Wie bereits erwähnt benötigt die genaue Frage nach der Zeitkomplexität bzw nach dem
konkrenten Polynom P die genaue Spezifikation der zu Grunde liegenden Maschine. Im Rahmen dieses Artikels werden wir uns der gewöhnlichen, deterministischen Turing-Maschine
bedienen. Ohne näher auf den Beweis einzugehen sei aber betont, dass die konkrete Maschinenimplementierung für die Frage, ob ein Problem in P liegt, absolut irrelevant ist.
Definition 5. Wir sagen, dass eine deterministische Turingmaschine eine Zeitkomplexität
von T (n) hat (wobei T (n) eine Funktion aus N ist), wenn die TM für jede Eingabe der Länge
n in höchstens T (n) Schritten anhält.
Definition 6. Wir bezeichnen mit P die Klasse aller formalen Sprachen, für die es eine
deterministische Turingmaschine M und ein Polynom P (n) gibt, sodass L = L(M) gilt und
M die Zeitkomplexität P (n) hat.
Das in Abschnitt 2 genannte Beispiel zur binären Suche (als Entscheidungsproblem formuliert entspricht dies der Frage, ob ein gegebenes Element in eimem (sortierten) Feld enthalten ist) ist trivialerweise polynomial, denn es gilt sicherlich log(n) < Kn für hinreichend
große Konstanten K.
Bemerkung 3. Da es für eine Turingmaschine keine Möglichkeit gibt, sprunghaft den Lese/Schreibkopf zu ändern, sondern den Kopf immer nur um eine Position nach links oder eine
Position nach rechts bewegen kann, muss die Ordnung, die wir für die Implementierung einer
Turingmaschine erhalten, im Allgemeinen nochmals mit n multipliziert werden (ein Sprung
entspricht ca n Einzelschritten). Dies ist jedoch für die Frage, ob ein gegebener Algorithmus
polynomial (und das entsprechende Problem daher in P liegt) irrelevant.
Weitere Beispiele für Probleme aus P sind:
Beispiel 4 (Palindrom). Gegeben sei ein beliebiges Wort über einem beliebigen Alphabet.
Die Frage sei nun, ob dieses Wort ein Palindrom ist.
Betrachten wir dazu folgende Implementierung in C:
i nt pa lindr o m ( char ∗ s , i nt n )
{
i nt i ;
for ( i =0; i < n / 2 ; i ++)
{
i f ( s [ i ] != s [ n−1−i ] )
return 0 ;
}
return 1 ;
}
Dieser Algorithmus ist linear, denn es gibt nur eine Schleife, die n/2 Mal durchlaufen wird
und alle anderen Operationen unabhängig von der Eingabelänge sind.
Das Palindrom-Problem ist also aus P.
Man kann den Algorithmus auch sehr einfach auf einer Turingmaschine (mit zusätzlichem
Gedächtnis) mit einer Zeitkomplexität von O(n2 ) implementieren.
5
Beispiel 5 (2-Färbung). Gegeben sei ein ungerichteter Graph G = (V, E), für den festgestellt
werden soll, ob eine Färbung der Knoten (oBdA in Rot und Blau) existiert, sodass keine
zwei durch eine Kante verbundenen Knoten gleich gefärbt sind.
Es ist offensichtlich, dass keine solche Färbung existiert, wenn es einen Zyklus ungerader
Länge gibt.
Falls es keine Zyklen ungerader Länge gibt, so kann der Graph mit folgendem Algorithmus gefärbt werden: wir wählen einen beliebigen Knoten v und färben ihn rot. Anschließend
werden alle Nachbarn von v blau gefärbt. Da es keine Zyklen ungerader Länge und insbesondere also kein Dreieck gibt, verursacht dies keine Probleme. Anschließend werden alle
Nachbarn der zuletzt gefärbten Knoten rot gefärbt. Da es keine Zyklen der Länge 5 gibt,
verursacht dies keine Probleme. Dies wird so lange fortgesetzt bis alle Knoten, die von v aus
erreicht werden können, gefärbt sind. Danach wird die gesamte Prozedur wieder für einen
noch nicht gefärbten Knoten durchgeführt. Dies wird so lange wiederholt, bis alle Knoten
gefärbt sind.
Dieser Algorithmus ist linear, da jeder Knoten nur einmal behandelt wird. Für die Feststellung, ob die Färbung möglich ist, wird eine zusätzliche Überprüfung pro Kante benötigt.
Damit ist die Laufzeit des Algorithmus aus O(n + k), wobei n die Anzahl der Knoten und
k die Anzahl der Kanten seien. Das Problem der 2-Färbung ist somit aus P.
Es ist im Übrigen nicht schwer, obigen Algorithmus auf einer Turingmaschine zu implementieren und zu zeigen, dass er polynomial ist.
3.2
Die Klasse F P und Reduzierbarkeit
Wir haben die Klasse P für Entscheidungsprobleme definiert. Analog kann man die Klasse
F P für effizient (dh polynomial) lösbare Berechnungsprobleme einführen.
Definition 7. Wir bezeichnen mit F P die Klasse aller Funktionen f : Σ∗ → Γ∗ mit Alphabeten Σ und Γ, für die es ein Polynom P (n) und eine deterministische Turingmaschine
mit der Zeitkomplexität P (n) gibt, die für jedes Wort w ∈ Σ∗ das Wort f (w) auf das Band
schreibt.
Beispiel 6 (2-Färbung). Gesucht sei ein Algorithmus, der jedem ungerichteten Graphen
eine Zweifärbung berechnet, sofern dies möglich ist.
Wir haben in Beispiel 5 einen linearen Algorithmus zur Konstruktion angegeben. Das
Berechnungsproblem der Zweifärbung ist somit in F P.
Definition 8. Sei L eine Sprache über einem Alphabet Σ und L′ eine Sprache über einem
Alphabet Γ. Dann sagen wir, dass L auf L′ in polynomialer Zeit reduzierbar (oder einfach
reduzierbar ) ist, wenn es eine Funktion f : Σ∗ → Γ∗ aus F P gibt, sodass für alle x ∈ Σ∗
x∈L
f (x) ∈ L′
⇔
gilt.
Falls L auf L′ in polynomialer Zeit reduzierbar ist, schreiben wir auch
L ⊳ L′ .
6
Bemerkung 4. Es ist wichtig, dass f in F P liegt, denn sonst wäre jede beliebige Sprache L
auf jede beliebige andere Sprache L′ trivial reduzierbar, indem wir nämlich zwei verschiedene,
beliebige Wörter w und w ′ über Γ wählen und
(
w falls x ∈ L
f (x) =
w ′ falls x 6∈ L
setzen.
Beispiel 7 (Kanten-2-Färbbarkeit). Wir wollen zu einem gegebenen ungerichteten Graphen
G wissen, ob sich seine Kanten derart mit zwei Farben (oBdA rot und blau) färben lassen,
sodass keine zwei Kanten, die einen gemeinsamen Knoten haben, gleich gefärbt sind.
Dieses Entscheidungsproblem kann wie folgt auf das Entscheidungsproblem der 2-Färbung
(siehe Beispiel 5) reduziert werden: wir konstruieren einen dualen Graphen Ĝ, dessen Knoten
die Kanten von G sind und zwei Kanten von G genau dann in Ĝ verbunden sind, wenn sie
in G einen gemeinsamen Knoten besitzen.
Wir sehen, dass jede 2-Färbung von Ĝ eine Kanten-2-Färbung von G ergibt und umgekehrt. Folglich ist Ĝ genau dann 2-färbbar, wenn G Kanten-2-färbbar ist.
Um zu zeigen, dass das Problem der Kanten-2-Färbbarkeit in P liegt, muss noch gezeigt
werden, dass die Reduktion in polynomialer Zeit durchführbar ist.
Falls die Graphen mit Adjazenzmatrizen implementiert sind, kann einer Matrix M auf
folgende Weise die entsprechende Matrix M̂ zugeordnet werden:
Die Zeilen und Spalten von M̂ sind mit allen Paaren (i, j) markiert, für die i ≤ j und
Mij = 1 gilt. Weiters hat M̂ in der Zeile mit (i, j) und der Spalte mit (i′ , j ′ ) genau dann eine
1, wenn wenn i = i′ oder j = j ′ gilt. Diese Konstruktion kann mit einer Laufzeit von O(n2 )
durchgeführt werden, wobei n die Anzanhl der Knoten ist (also M die Größe n × n hat).
Aus der Abgeschlossenheit von Polynomen bezüglich der Komposition folgt unmittelbar
Satz 2. Die ⊳-Relation ist transitiv, d.h. falls L1 ⊳ L2 und L2 ⊳ L3 für drei Sprachen
L1 , L2 , L3 gilt, so folgt auch L1 ⊳ L3 .
Beweis. Seien Σ1 , Σ2 , Σ3 jeweils die Alphabete, denen L1 , L2 , L3 zugrunde liegen.
Wegen L1 ⊳ L2 und L2 ⊳ L3 gibt es Funktionen f1 : Σ∗1 → Σ∗2 und f2 : Σ∗2 → Σ∗3 , sodass
für alle x ∈ Σ∗1
x ∈ L1 ⇔ f1 (x) ∈ L2
und für alle x ∈ Σ∗2
x ∈ L2
⇔
f2 (x) ∈ L3
gilt.
Weiters gibt es wegen f1 , f2 ∈ F P Turingmaschinen M1 bzw. M2 mit Zeitkomplexitäten
P1 (n) bzw P2 (n), die f1 bzw. f2 berechnen, wobei P1 (n) und P2 (n) Polynome sind.
Es sei h := f2 ◦ f1 . Dann gilt für alle x ∈ Σ∗1 , dass
x ∈ L1
⇔
h(x) ∈ L3 .
7
Es bleibt somit zu zeigen, dass h in F P liegt.
Betrachten wir dazu eine Turingmaschine M , die zunächst M1 und anschließend M2 mit
der Ausgabe von M1 simuliert. Offensichtlich berechnet M die Funktion h. Die Ausgabe von
M1 hat höchstens die Länge n + P1 (n), also benötigt M höchstens
P1 (n) + P2 (n + P1 (n))
Schritte, also liegt h in F P.
Satz 3. Seien L ⊂ Σ∗ und L′ ⊂ Γ∗ Sprachen, sodass L in polynomialer Zeit auf L′ reduzierbar
ist. Falls L′ in P liegt, dann gehört auch L zu P.
Beweis. Laut Voraussetzung gibt es eine deterministische Turingmaschine M ′ , die L′ ⊂ Γ
akzeptiert und ein Polynom P (n) als Zeitkomplexität hat. Weiters gibt es eine Funktion
f : Σ∗ → Γ∗ und eine deterministische Turingmaschine M mit polynomialer Zeitkomplexität
Q(n), die f berechnet.
Wir betrachten nun eine Turingmaschine M , die zunächst M simuliert, d.h. für jede Eingabe x aus Σ∗ wird das Wort f (x) auf das Band geschrieben, wenn M anhält. Anschließend
wird das restliche Band geleert. Dieser Prozess hat die Zeitkomplexität O(Q(n)). Anschließend wird M ′ simuliert. Dieser Prozess hat die Zeitkomplexität O(P (Q(n))), da das Ergebnis
von M ′ maximal Q(n) lang ist.
Es folgt daher, dass M eine Zeitkomplexität von O(Q(n) + P (Q(n))) hat.
M akzeptiert aber genau dann, wenn M ′ akzeptiert. Andererseits akzeptiert aber nach
Konstruktion M genau die Sprache L, also gilt L = L(M ) und daher L ∈ P.
3.3
Die Komplexitätsklasse N P
Intuitiv kann man die Komplexitätsklasse N P als die Klasse aller Entscheidungsprobleme
(oder formaler Sprachen), die zwar nicht notwendigerweise in polynomialer Zeit lösbar sind,
allerings die Eigenschaft haben, dass in polynomialer Zeit überprüft werden kann, ob eine
“angebotene” Lösung die Aufgabe wirklich löst, erklären.
Beispiel 8 (Zerlegbarkeit). Gegeben sei eine positive ganze Zahl n > 1. Gefragt ist, ob es
positive ganze Zahlen p, q < n gibt, sodass n = pq gilt.
Dies ist ein Problem, das in der Mathematik seit tausenden von Jahren behandelt wird.
Trotzdem ist nicht bekannt, ob das Problem der Zerlegbarkeit in P liegt. Allerdings liegt das
Problem offensichtlich in N P, denn falls Zahlen p, q als Zerlegung von n “angeboten” werden,
so kann effizient überprüft werden, ob tatsächlich n = pq gilt (die Multiplikation zweier
Zahlen p, q hat einen Aufwand von O(log p + log q) und ist damit sicherlich polynomial.
Definition 9. Wir sagen, dass eine nichtdeterministische Turingmaschine M die Zeitkomplexität T (n) hat, falls es für jede Eingabe der Länge n, die M akzeptiert, eine akzeptierende
Berechnung gibt, die höchstens T (n) Berechnungsschritte benötigt.
8
Definition 10. Wir bezeichnen mit N P die Klasse aller formaler Sprachen, die von einer
nichtdeterministischen Turingmaschine mit polynomialer Zeitkomplexität akzeptiert (oder
gelöst) werden können.
Ohne Beweis sei folgender Satz erwähnt:
Satz 4. Jede nichtdeterministische Turingmaschine mit Zeitkomplexität T (n) kann von einer
deterministischen Turingmaschine mit der Zeitkomplexität
O(K T (n) )
simuliert werden, wobei K eine Konstante ist.
3.4
N P-Vollständigkeit
Wie bereits erwähnt ist nicht bekannt, ob P = N P gilt. Es gibt allerdings einige Probleme
in N P, die bei dieser Frage einen besonderen Stellenwert haben, nämlich sogenannte N Pvollständige Probleme. Das sind, kurz gesagt, Probleme, auf die alle Probleme in N P effizient
zurückgeführt werden können. Könnte man zeigen, dass ein N P-vollständiges Problem in P
liegt, so wäre P = N P bewiesen.
Definition 11. Eine Sprache L heißt N P-hart, falls es für jede Sprache L′ der Klasse N P
eine Reduktion in polynomialer Zeit auf L gibt, wenn also für alle L′ aus N P
L′ ⊳ L
gilt. Eine N P-harte Sprache L heißt N P-vollständig, wenn L aus N P ist.
Satz 5. Sei L eine N P-vollständige Sprache. Dann ist jede Sprache in N P, auf die L in
polynomialer Zeit reduziert werden kann, ebenfalls N P-vollständig.
Beweis. Sei L0 ⊂ Γ∗ eine Sprache der Klasse N P und sei f : Σ∗ → Γ∗ eine Reduktion von
L ⊂ Σ∗ auf L′ in polynomialer Zeit. Wir zeigen, dass L0 N P-vollständig ist.
Sei L′ ⊂ (Σ′ )∗ eine beliebige Sprache aus N P. Dann gibt es eine Reduktion g : (Σ′ )∗ → Σ∗
in polynomialer Zeit. Es folgt, dass für alle x ∈ (Σ′ )∗ gilt:
x ∈ L′
⇔
g(x) ∈ L
⇔
f (g(x)) ∈ L0 .
Es genügt also zu zeigen, dass f ◦ g eine Funktion in F P ist, also polynomial berechnet
werden kann.
Es sei M eine Turingmaschine, die f berechnet und M eine Turingmaschine, die g berechnet. M habe die Zeitkomplexität p(n) und M habe die Zeitkomplexität q(n), wobei p(n)
und q(n) Polynome sind.
Wir betrachten eine Zweiband-Turingmaschine, die auf Band 1 M simuliert (dieser Prozess benötigt maximal q(n) Schritte) und anschließend das Wort auf Band 2 kopiert (dieser Prozess benötigt maximal n + q(n) Schritte), wo M simuliert wird (dieser Prozess
benötigt maximal p(q(n)) Schritte). Somit kann f (g(x)) mit einer Zeitkomplexität von
O(n + q(n) + p(q(n))) berechnet werden, also liegt f ◦ g in F P.
9
Zum Abschluss sei noch (ohne Beweis) eine Liste bekannter N P-vollständiger Probleme
angegeben:
1. (Erfüllbarkeit): Für jede boolsche Formel f (x1 , . . . , xn ) soll entschieden werden, ob sie
erfüllbar ist, es also eine Belegung x1 , . . . , xn ∈ {0, 1} gibt, sodass f (x1 , . . . , xn ) = 1
gilt.
2. (3-Erfüllbarkeit): Für jede boolsche Formel f (x1 , . . . , xn ) in konjunktiver Normalform
mit höchstens drei Literalen je Klausel soll entschieden werden, ob sie erfüllbar ist.
Interessant dabei ist, dass das Problem der allgemeinen Erfüllbarkeit polynomial (sogar
linear) auf das Problem der 3-Erfüllbarket reduziert werden kann, indem jede Klausel
(in KNF), die mehr als 3 Literlale hat, durch mehrere Klauseln zu je 3 Literalen ersetzt
werden kann (genauer: für jede Klausel der Länge n benötigt man n − 2 Klauseln der
Länge 3).
3. (3-Färbung): Es ist für jeden ungerichteten Graphen zu bestimmen, ob eine Färbung
der Knoten in drei Farben existiert, sodass je zwei verbundene Knoten unterschiedlich
gefärbt sind. Während das Problem der 2-Färbung in P liegt (vgl. Beispiel 5), weiß
man, dass das Problem der 3-Färbung N P-vollständig ist.
4. (k-Färbung für k ≥ 3): Analog zur 3-Färbung, allerdings mit k statt 3 Farben.
5. (Hamiltonkreis): Für jeden ungerichteten Graphen ist zu bestimmen, ob er einen Hamiltonkreis besitzt. Ein Hamiltonkreis ist dabei ein Kreis, der jeden Knoten eines Graphen
genau einmal besucht.
6. (Travelling Salesman Problem): Dies ist ein N P-vollständiges Problem mit großer praktischer Relevanz. Die Eingabe ist eine Liste S1 , . . . , Sn von Städten mit einer Matrix
dij ≥ 0,
i, j = 1, . . . , n
die die Distanz von Si zu Sj repräsentieren (oder die Kosten der Reise von Si nach Sj ).
Die Aufgabe ist, zu entscheiden, ob alle Städte besucht werden können, ohne dass die
Gesamtkosten eine gegebene Zahl k überschreiten.
Quellen
[1] Jirı́ Adámek, Vorlesungsskript Theoretische Informatik, Oktober 2005,
http://www.iti.cs.tu-bs.de/TI-INFO/milius/teaching/SKRIPTE/ti_bachelor.
pdf,
http://www.iti.cs.tu-bs.de/TI-INFO/milius/teaching/SKRIPTE/ti_bachelor2.
pdf
10
Herunterladen