Fixed-Parameter Komplexität

Werbung
Fixed-Parameter Komplexität
Ausarbeitung für das Seminar
Perlen der theoretischen Informatik“
”
(AG Meyer auf der Heide)
Betreuer: Dr. Rolf Wanka
Karsten Tiemann
[email protected]
Fakultät für Elektrotechnik, Informatik und Mathematik
der Universität Paderborn
Paderborn, 11. Januar 2004
2. Pseudopolynomielle Algorithmen
1
1
Einleitung
Bei einem Algorithmus, der ein NP-hartes Problem löst, rechnet man mit einem
schlechten Laufzeitverhalten. Diese Befürchtung ist natürlich gerechtfertigt, da unter der Voraussetzung P 6= NP polynomielle Laufzeit zumindest nicht auf allen
Instanzen erreicht werden kann. Trotzdem wäre es verfehlt, solche Probleme als
in kurzer Zeit nicht lösbar hinzunehmen, da es (wie wir sehen werden) durchaus
Subprobleme geben kann, die schnell lösbar sind. Dies bedeutet, dass die zu dem
Subproblem gehörigen Probleminstanzen handhabbar sind und passende Algorithmen (wir werden einige vorstellen) auf den Instanzen dieses Subproblems kein sehr
unangenehmes Laufzeitverhalten zeigen.
Obwohl solche Algorithmen nicht das gesamte Problem, sondern nur Subprobleme handhabbar machen, können diese Algorithmen sehr nützlich sein, da es
durchaus Anwendungen gibt, in denen glücklicherweise gerade nur Instanzen eines
solchen gut lösbaren Subproblems auftreten.
Die erste Art gutartiger Subprobleme, die wir betrachten werden, kann von
so genannten pseudopolynomiellen Algorithmen gut gelöst werden. Diese nur für
manche Probleme existenten Algorithmen haben zwar keine polynomielle Laufzeit in
der Eingabelänge, aber eine Laufzeit die durch ein Polynom in Abhängigkeit von der
Eingabelänge und der größten in der Codierung einer Instanz vorkommenden Zahl
beschränkt werden kann. Daher sind Instanzen schnell von pseudopolynomiellen
Algorithmen lösbar, bei denen die größte in der Codierung der Instanz vorkommende
Zahl relativ klein ist.
Nach den pseudopolynomiellen Algorithmen werden in dieser Ausarbeitung
als Verallgemeinerung die parametrisierten Polynomialzeit-Algorithmen betrachtet.
Auch diese Algorithmen machen Subprobleme von schweren Problemen handhabbar. Allerdings müssen dies nicht unbedingt Algorithmen sein, die die genannte
Abhängigkeit der Laufzeit von der größten in der Instanzcodierung vorkommende
Zahl erfüllen.
Es wäre noch zu sagen, dass wir nicht nur die schnelle Lösbarkeit mancher
Subprobleme aufzeigen werden. Wir werden auch argumentieren, dass für gewisse
Subprobleme (im Fall P 6= NP) eine schnelle Lösung nicht möglich ist.
2
2.1
Pseudopolynomielle Algorithmen
Einführung in pseudopolynomielle Algorithmen
Wir wollen in diesem Kapitel Algorithmen zur Lösung von Entscheidungsproblemen betrachten. Dabei sind Probleminstanzen / Algorithmuseingaben immer von
der Form x1 #x2 #...#xn mit xi ∈ {0, 1}∗ ; d. h. wir betrachten nur Probleme, deren
Instanzen sich mit Binärzahlen darstellen lassen. Die auf diese Weise codierbaren
Probleme nennt man auch integer-valued problems. Die Einschränkung auf diese
Probleme ist nicht von Nachteil, da sich eigentlich alle wichtigen Probleme auf diese
Weise darstellen lassen. Man denke hier zum Beispiel an das Rucksackproblem (Gewichte und Werte der Waren sind sowieso Zahlen) oder graphorientierte Fragestellungen wie TSP (Adjazenzmatrix kann als Folge der Matrixeinträge aufgeschrieben
werden).
Wenn nun eine Instanz eines integer-valued problem I = x1 #x2 #...#xn vorliegt,
bezeichnen wir mit M ax-Int(I) die größte in der Codierung von I vorkommende
Zahl: M ax-Int(I) := max{xi | i = 1, 2, ..., n}.
Definition 1. Sei U ein integer-valued problem und A ein das Entscheidungsproblem U lösender Algorithmus. A ist ein pseudopolynomieller Algorithmus für
U , falls es ein Polynom p gibt, so dass die Laufzeit von A für jede Eingabe I in
O( p(|I|, M ax-Int(I)) ) liegt.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
2. Pseudopolynomielle Algorithmen
2
Man beachte, dass für eine Instanz I die Zahl M ax-Int(I) exponentiell in |I|
sein kann (z.B. falls I nur aus x1 besteht). Daher folgt aus der Existenz eines pseudopolynomiellen Algorithmus nicht die Existenz eines Polynomialzeit-Algorithmus.
Für Algorithmuseingaben I mit der Eigenschaft, dass M ax-Int(I) polynomiell in
|I| ist, folgt jedoch aus der Existenz eines pseudopolynomiellen Algorithmus A eine
polynomielle Laufzeit von A auf dieser Eingabe I.
Diese Betrachtungen machen nun auch schon klar, warum pseudopolynomielle
Algorithmen interessant sind. Wenn man ein NP-vollständiges Entscheidungsproblem U betrachtet, ist die Bearbeitung von größeren Instanzen nicht in jedem Fall
wegen einer explodierenden Laufzeit hoffnungslos. Falls für U ein pseudopolynomieller Algorithmus bekannt ist und man nur Instanzen I mit M ax-Int(I) polynomiell
in |I| betrachtet (z.B. weil in einer Anwendung nur solche Instanzen auftreten),
kommt man in Polynomialzeit zu einem Ergebnis. Man hat es hier also mit einem
in Polynomialzeit bearbeitbaren Sonderfall / Subproblem eines NP-vollständigen
Problems zu tun.
2.2
Ein pseudopolynomieller Algorithmus für das Rucksackproblem
Bei dem NP-vollständigen (siehe [Lue75]) Entscheidungsproblem Rucksack sind n
Objekte mit ihren Gewichten gi und Werten wi sowie zwei natürliche Zahlen Gmax
und W min gegeben. Man möchte wissen, ob es eine Rucksackfüllung vom Gewicht
maximal Gmax und vom Wert mindestens W min gibt. Die Codierung einer Instanz des Rucksackproblems besteht aus 2n + 2 natürlichen Zahlen g1 , g2 , ..., gn ,
w1 , w2 , ..., wn , Gmax , W min .
Unser pseudopolynomieller Algorithmus für das Rucksackproblem wird das Prinzip der dynamischen Programmierung nutzen. Bei der dynamischen Programmierung führt man die Lösung eines Problems auf die Lösung einfacherer Teilprobleme
zurück. Dabei nutzt man keine laufzeitaufwendige Rekursion ohne Verwendung von
schon berechneten Zwischenlösungen zu Teilproblemen. Stattdessen berechnet man
beginnend bei den einfachsten Teilproblemen Zwischenlösungen zu immer komplexeren Teilproblemen, die man in einer Tabelle abspeichert, um dann letztendlich
zur Lösung des eigentlich Problems zu kommen. Dieses Konzept wird sicherlich bei
der nun folgenden Erklärung eines konkreten Algorithmus klarer.
Wir wollen den pseudopolynomiellen Algorithmus für das Rucksackproblem nun
erläutern. Dabei geben wir einen Algorithmus an, der das Entscheidungsproblem
löst, ein ganz ähnlicher Algorithmus zur Lösung des Optimierungsproblems kann in
[Wan02] nachgelesen werden.
Wichtig für den auf der Eingabe I = (g1 , g2 , ..., gn , w1 , w2 , ..., wn , Gmax , W min )
arbeitenden Algorithmus sind die für i ∈ {0, ..., n} und w ∈ Z definierten Zahlenwerte Gi (w). Dabei ist Gi (w) das mindestens benötigte Rucksackgewicht, wenn
man durch eine Teilmenge der ersten i Objekte mindestens Wert w erreichen will.
Falls es nicht möglich ist, mit den ersten i Objekten auf den Wert w zu kommen,
setzt man: Gi (w) := ∞. Zum besseren Verständnis der Zahlenwerte Gi (w) sind sie
in Abbildung 1 für eine Beispielinstanz mit vier Objekten aufgeführt.
Es gibt nun eine rekursive Beziehung, aus der sich eine Möglichkeit zur Bestimmung der Werte Gi (w) ergibt. Zu dieser Beziehung kommt man, wenn man
überlegt, wie man zum minimal benötigten Rucksackgewicht Gi (w) für den Wert
w mit den ersten i Objekten kommen kann. Auf der einen Seite kann dieses Gewicht Gi (w) dem minimalen Rucksackgewicht Gi−1 (w) zur Erreichung des Wert w
mit den ersten i − 1 Objekten entsprechen. In diesem Fall ist das i-te Objekt nicht
hilfreich, um auf eine Rucksackfüllung vom Wert w mit möglichst kleinem Gewicht
zu kommen.
Auf der anderen Seite kann das i-te Objekt hilfreich sein. In diesem Fall kommt
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
2. Pseudopolynomielle Algorithmen
Objekt i
Gewicht gi
Wert wi
1
4
3
2
1
2
3
3
4
4
2
1
3
Gi (w)
0
1
2
3
4
5
6
w↓
0
0
∞
∞
∞
∞
∞
∞
...
1
0
4
4
4
∞
∞
∞
...
2
0
1
1
4
5
5
∞
...
3
0
1
1
3
3
4
4
...
4
0
1
1
3
3
4
4
...
i→
Abbildung 1: Rucksackproblem: Objekte (links) und einige Werte Gi (w) (rechts)
dieses Objekt vom Wert wi in den Rucksack. Der Rest der Rucksackfüllung besteht aus solchen Objekten, die zu einem minimalen Rucksackgewicht Gi−1 (w − wi )
gehören, um den Wert w − wi mit den ersten i − 1 Objekten erreichen. In diesem
Fall hat man als Rucksackgewicht das Gewicht gi des i-ten Objektes zuzüglich
dem Gewicht Gi−1 (w − wi ). Man kann also insgesamt Gi (w) durch eine Minimumsbildung aus den beiden erwähnten Fällen errechnen: Gi (w) = min{Gi−1 (w),
Gi−1 (w − wi ) + gi }. Wir können somit alle Werte Gi (w) für i ∈ {0, ..., n} und w ∈ Z
über diese rekursive Beziehung ermitteln:

 0
∞
Gi (w) =

min{Gi−1 (w), Gi−1 (w − wi ) + gi }
falls w ≤ 0, i ∈ {0, ..., n}
falls w ≥ 1, i = 0
falls w ≥ 1, i ∈ {1, ..., n}
Diese Beziehung nutzen wir nun, um mit dynamischer Programmierung das
Entscheidungsproblem Rucksack auf der Instanz I = (g1 , ..., gn , w1 , ..., wn , Gmax ,
W min ) zu lösen. In dem folgenden Algorithmus stelle man sich Gi (w) als zweidimensionales Array mit (n + 1) · W min Elementen vor.
Rucksack(g1 , ..., gn , w1 , ..., wn , Gmax , W min )
for w := 1 to W min do
for i := 0 to n do
begin
if (i = 0) then
Gi (w) := ∞
else
begin
if (w − wi ≤ 0) then value := gi
else value := Gi−1 (w − wi ) + gi ;
Gi (w) := min(Gi−1 (w), value);
end
end
if (Gn (W min ) ≤ Gmax ) then return true
else return false;
Satz 2. Der vorgestellte Algorithmus ist ein pseudopolynomieller Algorithmus für
das Entscheidungsproblem Rucksack. Seine Laufzeit auf einer Instanz I = (g1 , ..., gn ,
w1 , ..., wn , Gmax , W min ) liegt in O(n · W min ) = O(|I| · M ax-Int(I)).
Beweis. Dieser Algorithmus entscheidet das Rucksackproblem, da zurückgegeben
wird, ob das für den Wert W min minimal benötigte Rucksackgewicht kleinergleich
Gmax ist. Der Algorithmus hat Laufzeit O(n · W min ). Er ist pseudopolynomiell, da
für jede Eingabe I gilt n < |I| und W min ≤ M ax-Int(I).
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
2.3
4
Nichtexistenz von pseudopolynomiellen Algorithmen
Um hier erläutern zu können, wie man die Nichtsexistenz von pseudopolynomiellen
Algorithmen zeigen kann, müssen erst zwei Dinge definiert werden. Zuerst definieren
wir für ein Problem U Subprobleme, deren größte Zahl in eine Eingabeinstanz durch
ein Funktion in der Eingabelänge begrenzt sind.
Definition 3. Wenn U ein integer-valued problem und f : N → N eine Funktion
ist, erhält man das durch f beschränkte Subproblem von U Value(f )-U indem man
von allen Probleminstanzen zu U nur die Probleminstanzen I behält, für die gilt:
M ax-Int(I) ≤ f (|I|).
Mit dieser Definition ist es nun möglich, eine Komplexitätsklasse zu definieren,
die alle Probleme enthält, die sogar dann NP-hart bleiben, wenn man die größte
Zahl in jeder Eingabe durch ein Polynom in der Eingabelänge begrenzt.
Definition 4. Wenn es für ein integer-valued Entscheidungsproblem U ein Polynom p gibt, so dass Value(p)-U NP-hart ist, dann ist U stark NP-hart.
Mit dieser Klasse der stark NP-harten Probleme ist es nun möglich, eine Aussage bezüglich der Nichtexistenz von pseudopolynomiellen Algorithmen für gewisse
Probleme zu treffen.
Satz 5. Falls P 6= NP gilt, gibt es für kein stark NP-hartes integer-valued Entscheidungsproblem einen pseudopolynomiellen Algorithmus.
Beweis. Wenn wir ein stark NP-hartes Problem U vorliegen haben, gibt es ein
Polynom q, so dass Value(q)-U NP-hart ist. Nehmen wir nun an, dass es für U einen
pseudopolynomiellen Algorithmus A gibt. Dann existiert ein Polynom p, so dass für
jede Eingabeinstanz I die Laufzeit von A in O(p(|I|, M ax-Int(I))) liegt. Nun ist
zu beachten, dass für jede Instanz I zum Subproblem Value(q)-U gilt M ax-Int(I)
≤ q(|I|). Damit ist die Laufzeit von A auf der solchen Instanzen des Subproblem
Value(q)-U in O(p(|I|, q(|I|))) und somit polynomiell in |I|. Im Fall P 6= NP kann
Value(q)-U nicht NP-hart sein. Widerspruch!
Mit Hilfe von Satz 5 kann man somit die Nichtexistenz von pseudopolynomiellen Algorithmen (unter dem Vorbehalt P 6= NP) zeigen. So kann man beispielsweise
durch eine Reduktion zeigen, dass das Entscheidungsproblem des Handlungsreisenden (TSP) stark NP-vollständig ist (siehe Abschnitt 3.2.3 in [Hro98]). Daraus folgt,
dass es keinen pseudopolynomiellen Algorithmus für TSP geben kann.
3
3.1
Parametrisierte Komplexität
Einführung in parametrisierte Komplexität
Wir wollen nun die mit der parametrisierten Komplexität zusammenhängenden
Begrifflichkeiten definieren.
Definition 6. Es sei U ein Entscheidungsproblem und L die Menge aller Instanzen dieses Problems. Eine beliebige in Polynomialzeit berechenbare Funktion
P ar : L → N nennt man Parametrisierung von U. Ein Algorithmus A ist ein
Par-parametrisierter Polynomialzeit-Algorithmus für U, falls
(i) A das Entscheidungsproblem U löst und
(ii) es eine Funktion f : N → N und ein Polynom p : N → N gibt, so dass die
Laufzeit von A für jede Eingabe I ∈ L in O( f (P ar(I)) · p(|I|) ) liegt.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
5
Wenn es für U einen solchen Par-parametrisierten Polynomialzeit-Algorithmus gibt,
nennt man U fixed-parameter-tractable in Bezug auf Par.
Man beachte, dass in dieser Definition die Funktion P ar wichtig ist. Denn interessant ist nicht, ob ein Problem fixed-parameter-tractable unter Vernachlässigung
der Parametrisierung P ar ist (zu P ar(I) = |I| und f (n) = 2n ist dies leicht zu bewerkstelligen), sondern ob ein Problem fixed-parameter-tractable in Bezug zu einer
konkreten Funktion P ar ist.
Es sollte hier nun noch anhand einiger Beispiele erwähnt werden, welche Parametrisierungsfunktionen P ar typischerweise verwendet werden. Bei Graphenproblemen (z.B. Clique oder Vertex-Cover) mit Instanzen der Form I = (G, k) ist
P ar(I) = k eine oft betrachtete Parametrisierung. Bei Datenbankproblemen mit
Instanzen (d, φ) bestehend aus der Datenbank d und einer Anfrage φ kann man die
Parametrisierung P ar(I) = |φ| betrachten.
Wenn ein Problem U fixed-parameter-tractable bezüglich einer Funktion P ar
ist, bedeutet dies, dass man all diejenigen Instanzen I recht schnell lösen kann, für
die P ar(I) klein ist. Hier zeigt sich schon eine Verwandtschaft zu den pseudopolynomiellen Algorithmen. Diese können eine Probleminstanz I dann schnell bearbeiten,
wenn M ax-Int(I) klein ist. Bei genauerem Hinsehen wird klar, dass pseudopolynomielle Algorithmen ein Spezialfall von parametrisierter Komplexität sind. Wenn es
für ein Problem U einen pseudoplynomiellen Algorithmus gibt, ist dieses Problem
fixed-parameter-tractable bezüglich P ar(I) = M ax-Int(I).
3.2
Parametrisierte Komplexität bei Vertex-Cover
Wir wollen uns nun anschauen, ob Vertex-Cover fixed-parameter-tractable bezüglich
P ar(I) = k ist. Bei dem Entscheidungsproblem Vertex-Cover möchte man zu einer
Instanz (G, k) mit ungerichtetem Graph G = (V, E) und Zahl k ∈ N wissen, ob es
eine Knotenteilmenge S ⊆ V der Größe |S| = k gibt, so dass jede Kante aus E zu
mindestens einem Knoten aus S inzident ist. Man möchte also wissen, ob man mit
k Knoten alle Kanten des Graphen überdecken kann. Vertex-Cover ist nach [Kar72]
NP-vollständig.
Es sind inzwischen viele k-parametrisierte Polynomialzeit-Algorithmen für VertexCover bekannt. Es konnten in der Vergangenheit Algorithmen mit immer besseren
Laufzeiten entworfen werden. Um diese Entwicklung hier darstellen zu können, wollen wir einige dieser Algorithmen vorstellen.
3.2.1
Vertex-Cover Algorithmus von Buss & Goldsmith
Als erstes stellen wir den Algorithmus aus [BG93] vor. Für diesen Algorithmus sind
zwei Eigenschaften von Graphen und dazugehörigen Vertex-Covern wichtig.
Lemma 7. Wenn ein Graph G = (V, E) ein Vertex-Cover S ⊆ V mit |S| = k hat,
muss S alle Knoten aus V enthalten, die einen Grad größer als k haben.
Beweis. Wenn es einen Knoten vom Grad mindestens k + 1 gibt, der nicht im
Vertex-Cover S enthalten ist, müssen seine mindestens k + 1 Nachbarn alle im
Vertex-Cover enthalten sein. Es würde somit |S| ≥ k + 1 gelten.
Lemma 8. Angenommen G ist ein Graph ohne isolierte Knoten. (Isoliert ist ein
Knoten, wenn er zu keiner Kante inzident ist.) Wenn alle Knoten in G Grad ≤ k
haben und dieser Graph ein Vertex-Cover der Größe ≤ m besitzt, hat G maximal
m · k viele Kanten.
Beweis. Da jeder Knoten maximal Grad k hat, kann ein Knoten aus S maximal
k Kanten überdecken. Es gibt maximal m Kanten überdeckende Knoten, da S
maximal m Knoten enthält.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
6
Diese Beobachtungen ermöglichen es uns nun, einen Algorithmus anzugeben, der
das Vertex-Cover Problem entscheidet:
VertexCoverBussGoldsmith(G = (V, E), k)
H ⊆ V bestehe aus allen Knoten vom Grad größer als k.
Breche ab mit Ausgabe false, falls |H| > k.
m := k − |H|.
Entferne aus G = (V, E) alle Knoten der Menge H und deren inzidente Kanten.
Entferne alle isolierte Knoten aus G.
Breche ab mit Ausgabe false, falls |E| > m · k.
Probiere alle möglichen Vertex-Cover der Größe m auf G.
Breche ab mit dem Ergebnis der Vertex-Cover Suche.
Der Algorithmus terminiert im Fall |H| > k wegen der in Lemma 7 und im Fall
|V | > m · (k + 1) wegen der in Lemma 8 erklärten Zusammenhänge mit Ausgabe
false. Diese beiden Lemmata begründen auch die Korrektheit des Algorithmus. Nun
wollen wir noch zeigen, dass der Algorithmus ein k-parametrisierter PolynomialzeitAlgorithmus ist.
Satz 9. Das Vertex-Cover Entscheidungsproblem wird von dem gerade beschriebenen Algorithmus auf einer Instanz (G, k) mit einem n-Knoten Graph in Laufzeit
O(kn + 2k k 2k+2 ) entschieden. Somit liegt ein k-parametrisierter PolynomialzeitAlgorithmus für Vertex-Cover vor.
Beweis. Die Korrektheit des Algorithmus wurde schon besprochen. Zu betrachten
ist noch die Laufzeit. Das Finden aller Knoten vom Grad > k kann in Zeit O(k · n)
erledigt werden, wenn der Graph als Adjazenzliste vorliegt. Der Graph, auf dem
später alle möglichen Vertex-Cover der Größe m gesucht werden, hat maximal m · k
Kanten. Da es keine isolierten Knoten gibt, hat dieser Graph maximal 2·m·k Knoten.
Es wird in diesem Graph mit maximal 2 · m · k Knoten nach allen möglichen VertexCovern der Größe m gesucht. Die Anzahl der potentiellen Vertex-Cover dieser Größe
ist nicht größer als (2 · m · k)m .
Für jedes potentielle Vertex-Cover kann in Zeit O(m · k) getestet werden, ob es
alle maximal m · k Kanten überdeckt. Damit haben wir eine Laufzeit für die Suche
nach einem Vertex-Cover in O((2 · m · k)m · m · k). Aus m := k − |H| folgt m ≤ k
und somit liegt der Aufwand für die Suche in O((2k 2 )k · k 2 ) = O(2k · k 2k · k 2 ) =
O(2k · k 2k+2 ). Es ergibt sich eine Gesamtlaufzeit für den Algorithmus in O(k · n +
2k · k 2k+2 ).
3.2.2
Vertex-Cover Algorithmus von Papadimitriou & Yannakakis
Wir wollen nun einen zweiten k-parametrisierten Polynomialzeit-Algorithmus mit
eher besserer Laufzeit vorstellen. Dieser Algorithmus nach [PY93] verwendet ein so
genanntes maximales Matching.
Definition 10. Sei G = (V, E) ein Graph. Eine Teilmenge der Kanten M ⊆ E ist
ein Matching in diesem Graph, falls keine zwei Kanten aus M einen gemeinsamen
Endpunkt haben. Ein Matching heißt maximales Matching, falls jede Kante aus
E \ M mindestens einen Knoten mit einer Kante aus M gemeinsam hat.
Man kann ein maximales Matching für einen Graphen G = (V, E) recht einfach konstruieren, indem man wiederholt eine beliebige Kante des Graphen zum
Matching hinzufügt und dann diese Kante und die zu ihren Endpunkten inzidenten Kanten entfernt. Wir wollen nun zwei Zusammenhänge zwischen maximalen
Matchings und Vertex-Covern vorstellen, die für den in diesem Abschnitt erklärten
Algorithmus wichtig sind.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
7
Lemma 11. Wenn M ein maximales Matching im Graphen G = (V, E) mit m :=
|M | vielen Kanten ist, gehören zu jedem Vertex-Cover von G mindestens m Knoten.
Beweis. Wenn S ⊆ V ein Vertex-Cover zu G ist, ist jede Kante {u, v} aus E zu
mindestens einem Knoten aus S inzident (u ∈ S oder v ∈ S). Da M ein Matching
ist, sind die 2m Knoten der m Kanten aus M alle voneinander verschieden. Daher
muss ein Vertex-Cover S mindestens m Knoten enthalten, jeweils mindestens einen
Knoten jeder der m Kanten aus M .
Lemma 12. Wenn M ein maximales Matching zu dem Graphen G = (V, E) mit
m := |M | vielen Kanten ist, gibt es ein Vertex-Cover zu G mit 2m Knoten.
Beweis. Es sei S die Menge aller 2m Knoten der m Kanten aus M . Da M ein
maximales Matching ist, gilt für jede Kante des Graphen G, dass sie entweder in
M enthalten ist oder einen Knoten mit einer Kante aus M gemeinsam hat. Daher
ist S ein Vertex-Cover.
Die beiden Lemmata zeigen gut, dass maximale Matchings im Zusammenhang
mit Vertex-Covern interessant sein können. Für den Algorithmus von Papadimitriou
und Yannakakis ist nun noch wichtig, dass man basierend auf einem maximalen
Matching M ein Vertex-Cover zu G mit minimaler Anzahl von Knoten finden kann.
Dieses Verfahren wollen wir nun erklären.
Angenommen M ist ein maximales Matching zu dem Graphen G = (V, E) und
U die Menge aller Knoten der Kanten aus M . In dem Vertex-Cover für G mit minimaler Knotenanzahl ist für jede Kante {u, v} ∈ M entweder (1) der Knoten u,
(2) der Knoten v oder (3) beide Knoten u und v enthalten. Daher kann man dieses
Vertex-Cover für G finden, indem man jede der 3|M | Möglichkeiten der Kombinationen dieser 3 Fälle für die |M | vielen Kanten durchprobiert.
Wenn man nun eine dieser 3|M | Möglichkeiten betrachtet, liegen die Entscheidungen für die Zugehörigkeiten der Knoten aus U zu dem Vertex-Cover schon fest.
Die die Zuordnung der Knoten aus V \ U ergibt sich automatisch. Man nimmt all
diejenigen Knoten aus V \ U in das Vertex Cover auf, die zu einer Kante inzident
sind, deren anderer Knoten (dieser liegt in U ) nicht im Vertex-Cover enthalten ist.
Durch die Hinzunahme solcher Knoten ist sichergestellt, dass alle nicht zu M
gehörigen Kanten von einem Knoten des Vertex-Cover überdeckt werden. Alle zu
M gehörigen Kanten werden von dem Vertex-Cover überdeckt, da mindestens ein
Knoten einer solchen Kante für das Vertex-Cover ausgewählt wurde. In jeder der
3|M | Möglichkeiten erhält man also ein Vertex-Cover. Dasjenige mit der kleinsten
Knotenanzahl unter diesen 3|M | ist das kleinste / optimale Vertex-Cover zu G.
Mit dem gerade erklärten Verfahren sowie den Lemmata 11 & 12 sollte klar sein,
dass der folgende Algorithmus das Entscheidungsproblem Vertex-Cover entscheidet:
VertexCoverPapadimitriouYannakakis(G = (V, E), k)
Berechne maximales Matching M .
Breche ab mit Ausgabe false, falls |M | > k.
Breche ab mit Ausgabe true, falls 2|M | ≤ k.
Teste 3|M | mögliche Vertex-Cover basierend auf M .
Breche ab mit Ausgabe true, falls Vertex-Cover mit ≤ k Knoten gefunden.
Breche ab mit Ausgabe false, falls kein Vertex-Cover mit ≤ k Knoten gefunden.
Satz 13. Das Vertex-Cover Entscheidungsproblem wird von dem gerade beschriebenen Algorithmus auf einer Instanz (G, k) mit einem n-Knoten Graph in Laufzeit
O(3k kn) entschieden. Somit liegt ein k-parametrisierter Polynomialzeit-Algorithmus
für Vertex-Cover vor.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
8
Beweis. Zur Korrektheit des Algorithmus wurde schon argumentiert. Die Laufzeit
ist noch zu betrachten. Zuerst wird im Algorithmus (nach dem vorher schon skizzierten Verfahren) ein maximales Matching konstruiert. Diese Konstruktion kann
abgebrochen werden, sobald das Matching aus k + 1 Kanten besteht. Daher kann
diese Konstruktion in Zeit O(k · n) erfolgen.
Wir wollen nun noch die Laufzeit für die Betrachtung der 3|M | Vertex-Cover
basierend auf dem maximales Matching M der Größe m := |M | betrachten. Es sei
U wieder die Menge aller 2m Knoten der Kanten aus M .
Zunächst wollen wir zeigen, dass die Anzahl der Kanten von G in O(n · k) liegt.
Dazu ist zu betrachten, dass es in G zum einen m viele Kanten gibt, die zu dem
berechneten maximalen Matching M gehören. Da M maximales Matching ist, gibt
es keine Kante in G, deren Knoten beide nicht in U liegen. Es verbleiben also nur
die Kanten, die aus einem der (n − 2m) Knoten in V \ U und einem in U bestehen.
Von jedem Knoten u ∈ (V \ U ) aus kann es maximal 2m solcher Kanten geben,
falls es Kanten von u zu jedem der 2m Knoten in U gibt. Damit gibt es maximal
(n − 2m) · 2m Kanten zwischen Knoten aus V \ U und solchen aus U und m Kanten
in M . Insgesamt gibt es also m + (n − 2m) · 2m = 2nm − 3m2 = O(nm) viele Kanten
im Graphen. Wegen m ≤ k liegt die Kantenanzahl in O(nk).
Bei der Konstruktion jedes der 3m betrachteten Vertex-Cover müssen alle Kanten durchlaufen werden, um in dem Fall, dass eine Kante zwischen einem Knoten
aus (V \ U ) und einem aus U verläuft den Knoten aus (V \ U ) zum Vertex-Cover
hinzuzufügen, falls der Knoten aus U nicht zum Vertex-Cover gehört. Da es O(nk)
viele Kanten gibt, fällt 3m mal Aufwand O(nk) an. Laufzeit zur Betrachtung der
3m Vertex-Cover ist mit m ≤ k also O(3k nk). Als Gesamtlaufzeit zusammen mit
der Berechnung des Matchings ergibt sich O(kn + 3k nk) = O(3k kn).
3.2.3
Vertex-Cover Algorithmen von Balasubramanian, Fellows & Raman
Der in diesem Abschnitt erläuterte k-parametrisierte Polynomialzeit-Algorithmus
für Vertex-Cover Instanzen (G, k) nutzt zu Beginn die schon aus dem Algorithmus
von Buss & Goldsmith (siehe Abschnitt 3.2.1) bekannten Methoden um das Problem auf dem Graphen G mit n Knoten in Zeit O(kn) auf ein Problem auf einem
Graphen mit O(k 2 ) vielen Knoten und Kanten zu reduzieren. Die darauf folgende
Baumsuche werden wir im Folgenden erklären.
VertexCoverBalasubramanianFellowsRaman(G = (V, E), k)
H ⊆ V bestehe aus allen Knoten vom Grad größer als k.
Breche ab mit Ausgabe false, falls |H| > k.
m := k − |H|.
Entferne aus G = (V, E) alle Knoten der Menge H und deren inzidente Kanten.
Entferne alle isolierte Knoten aus G.
Breche ab mit Ausgabe false, falls |E| > m · k.
Baumsuche nach einem Vertex-Cover der Größe m auf G.
Breche ab mit dem Ergebnis der Vertex-Cover Baumsuche.
Mit der noch zu beschreibenden Baumsuche soll also in dem (neuen, verkleinerten) Graphen G nach einem Vertex-Cover der Größe m gesucht werden. Dazu speichert jeder Baumknoten u einen Graphen G(u) und eine Knotenmenge S(u) ⊆ V ,
die zu einem Vertex-Cover ausgebaut werden soll. Wir nennen diese Knotenmenge
S(u) partielles Vertex-Cover. Für die Wurzel w des Baumes ist die Menge S(w)
leer, der Graphs G(w) entspricht dem (verkleinerten) Graphen G. Im Ablauf der
Baumsuche werden Baumknoten Kinder bekommen, deren partielles Vertex-Cover
aus dem partiellen Vertex-Cover des Elternknoten und ein oder zwei zusätzlichen
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
x
9
x
a
b
c
b
a
Abbildung 2: Fälle (i) und (ii) beim Bilden von Knotennachfolgern
Knoten bestehen. Wenn für ein Kind Graphknoten zu dem partiellen Vertex-Cover
des Elternknoten hinzugefügt werden, legt man für das Kind den Graphen des Elternknoten ohne diese zugefügten Knoten und die dazu inzidenten Kanten an. Falls
durch die Änderungen isolierte Knoten entstehen, werden diese entfernt.
Zu einem Knoten u des Baumes werden keine Nachfolger mehr angelegt, falls
durch das konstruierte Vertex-Cover alle Graphkanten überdeckt wurden (G(u) ist
leer) oder falls nach dem Hinzufügen von m Knoten zum Vertex-Cover noch kein
alle Kanten überdeckendes Vertex-Cover geschaffen werden konnte (|S(u)| ≥ m).
Im ersten Fall hat man ein Vertex-Cover mit m Knoten (und damit eines mit k
Knoten für den Ursprungsgraphen) gefunden.
Es ist nun noch zu erklären, welche Nachfolger zu einem Baumknoten u angelegt
werden. Man wählt aus dem zu dem Baumknoten gehörigen Graphen G(u) einen
beliebigen Knoten x. Man läuft dann im Graphen G(u) von x aus zu einem Nachbarknoten a, von da wiederum zu einem Nachbarknoten b von a und von da aus
schließlich zu einem Nachbarknoten c von b. Es gibt nun vier möglich Fälle:
(i) Zufällig entspricht der Knoten c wieder dem Knoten x. (Siehe Abbildung 2
links.) In einem Vertex-Cover für den Graphen sind entweder die Knoten (1)
x und a oder (2) a und b oder (3) b und x enthalten. Daher bildet man in diesem
Fall zum Baumknoten insgesamt drei Nachfolger. Die je zwei für jeden Fall
genannten Knoten werden für den Nachfolger zum Vertex-Cover hinzugefügt.
Sie und die zu ihnen inzidenten Kanten werden wie vorher erklärt nicht auf
den Nachfolger übernommen.
(ii) Falls der Knoten c von x verschieden ist, werden drei Nachfolger zu den möglichen Vertex-Covern (1) x und b oder (2) a und c oder (3) a und b. (Siehe
Abbildung 2 rechts.)
(iii) Falls der Knoten b bis auf a keinen Nachbarknoten hat, wird ein Nachfolger
zum Vertex-Cover mit dem Knoten a angelegt.
(iv) Falls der Knoten a bis auf x keinen Nachbarknoten hat, wird ein Nachfolger
zum Vertex-Cover mit dem Knoten x angelegt.
Somit ist die Baumsuche nach einem Vertex-Cover komplett beschrieben. Der
Algorithmus von Balasubramanian, Fellows und Raman kann das Vertex-Cover Entscheidungsproblem lösen.
Satz 14. Das Vertex-Cover Entscheidungsproblem wird von dem gerade beschriebenen
√ Algorithmus auf einer Instanz (G, k) mit einem n-Knoten Graph in Laufzeit
O(( 3)k k 2 + kn) entschieden. Somit liegt ein k-parametrisierter PolynomialzeitAlgorithmus für Vertex-Cover vor.
Beweis. Die Korrektheit des Algorithmus wurde schon betrachtet. Daher interessiert uns nun noch die Laufzeit des Algorithmus. Der Algorithmus beginnt mit den
selben Schritten wie der in Abschnitt 3.2.1 besprochene von Buss und Goldsmith.
Es folgt aus der Argumentation des Beweises von Satz 9, dass alle Schritte des
Algorithmus vor der Baumsuche in Laufzeit O(k · n) durchgeführt werden können.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
10
Nur a Knoten:
2 b und viele a Knoten:
1. b Knoten
2. b Knoten
3 Knoten weniger
Abbildung 3: Knoten vom Typ a und b im Suchbaum
Zu betrachten bleibt die Laufzeit dieser Baumsuche. Gesucht ist in dem durch die
Algorithmusschritte vor der Baumsuche vereinfachten Problem nach einem VertexCover der Größe m ≤ k in einem Graphen mit O(k 2 ) vielen Kanten und O(k 2 )
Knoten. Daher fällt in jedem Baumknoten für die Nachbarschaftssuche der Tiefe 3
und das Anlegen der maximal 3 Nachfolger mit ihren Graphen Laufzeit O(k 2 ) an.
Es bleibt noch die Frage zu klären, wie viele Baumknoten es gibt. Bei der Suche nach Vertex-Covern werden partielle Vertex-Cover S(u) genutzt. Das partielle
Vertex-Cover ist für die Wurzel leer. Für manchen Baumknoten (Knotentyp a)
werden 3 Nachfolger angelegt, deren partielle Vertex-Cover um zwei Knoten größer
sind. Wenn nur diese Möglichkeit zu betrachten wäre, hätte man im worst case einen
vollständigen 3-Nachfolger-pro-Knoten-Baum der Tiefe d k2 e vorliegen, da Baumknoten mit einem partiellen Vertex-Cover einer Größe m (wobei für m gilt m ≤ k) keine
Kinder mehr bekommen. Ein solcher Baum hätte die Knotenanzahl:
k
2
1 + 3 + 3 + ... + 3
dk
2e
k
k
3d 2 e+1 − 1
=
= O(3d 2 e+1 ) = O(3 2 ).
3−1
Es gibt nun aber auch noch Baumknoten (Knotentyp b), die nur einen Nachfolger
besitzen, wobei das partielle Vertex-Cover des Kindknoten nur um einen Knoten
größer ist als das des Elternknoten. Wir werden sehen, dass der Suchbaum mit
k
diesen beiden Baumknotentypen maximal 3d 2 e mehr Knoten hat, als der Suchbaum,
der nur Knoten vom Typ a besitzt. Um zu dieser Schlussfolgerung zu kommen,
betrachten wir in dem vorher erwähnten vollständigen 3-Nachfolger-pro-KnotenBaum der Tiefe d k2 e aus Knoten vom Typ a einen beliebigen Pfad von der Wurzel
zu einem der Blätter. Wir wollen nun klären, wie sich die Anzahl der Baumknoten
ändert, wenn wir auch Knoten vom Typ b zulassen.
Sei l die Anzahl der Typ b Knoten auf dem betrachteten Pfad. Da für jeden
Knoten vom Typ b nur einer statt zwei Knoten zum partiellen Vertex-Cover hinzugefügt werden, muss es auf dem Pfad für je zwei zusätzliche b Knoten einen a
Knoten ganz unten im Baum weniger geben (siehe Abbildung 3). Man hat somit
für je 2 zusätzliche b-Knoten im Baum mindestens 3 Knoten weniger, die Anzahl
der Knoten wird also sogar kleiner durch 2b 2l c der l b-Knoten auf dem Pfad. Es
verbleibt also maximal ein b-Knoten auf dem Pfad der noch zu betrachten ist. Diek
ser Knoten macht diesen Pfad um einen Knoten länger. Es gibt 3d 2 e Pfade von
k
der Wurzel zu einem Blatt in unserem Baum und damit maximal 3d 2 e zusätzliche
k
k
Knoten im Baum durch die b-Knoten. Man hat somit im Baum 3d 2 e + O(3 2 ) =
k
O(3 2 ) viele Knoten.
Nun kann die Gesamtlaufzeit des Algorithmus betrachtet werden. Die Schritte
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
3. Parametrisierte Komplexität
11
des Algorithmus vor der Baumsuche benötigen Laufzeit in O(k · n). Danach wird
k
in einem Baum mit O(3 2 ) vielen Knoten in jedem Knoten Laufzeitaufwand O(k 2 )
k
verursacht. Damit ergibt sich die Gesamtlaufzeit O(3 2 · k 2 + k · n).
Balasubramanian, Fellows und Raman [BFR98] beschreiben in ihrem Papier
noch einen Algorithmus mit niedrigerer Laufzeit O(1.324718k · k 2 + k · n). Dieser
Algorithmus basiert auf derselben Grundidee. Zuerst werden auch wieder die ersten Schritte aus dem Algorithmus von Buss und Goldsmith durchgeführt, dann
folgt eine Baumsuche. Diese Baumsuche ist nun aber geschickter und komplexer
gestaltet. Es werden deutlich mehr als 4 verschieden Fälle für die Erweiterung des
partiellen Vertex-Cover angewendet. Dabei sind diese Fälle für die Erweiterungen
des partiellen Vertex-Cover so gewählt, dass (durch die Hinzunahme von Knoten
zum partiellen Vertex-Cover und das Löschen von inzidenten Kanten) aus dem Ursprungsgraph erst ein Graph mit Knoten vom Grad 3 oder 4 wird und dann ein
Graph mit Knoten vom Grad 4 entsteht, auf dem dann die restlichen Schritte erfolgen. Die Laufzeitschranke kann über eine vollständige Induktion bewiesen werden.
3.2.4
Zusammenfassung zu den Vertex-Cover Algorithmen
Wir haben mehrere k-parametrisierte Polynomialzeit-Algorithmen für Vertex-Cover
mit sehr unterschiedlichen Laufzeiten vorgestellt. Man kann daran nun ganz gut sehen, dass es nicht nur von Interesse ist, zu wissen, dass ein Problem fixed-parametertractable in Bezug auf eine gewisse Parametrisierung (hier P ar(I) = k) ist. Darüber
hinaus ist es nämlich durchaus interessant, P ar-parametrisierte PolynomialzeitAlgorithmen mit einer langsam wachsenden Funktion f in der Laufzeitschranke
O( f (P ar(I)) · p(|I|) ) zu kennen. Findet man nämlich einen solchen Algorithmus
mit einer langsamer wachsenden Funktion f , kann man auch für recht große Werte
von k noch in recht kurzer Zeit zu einer Lösung kommen.
Autoren
Buss, Goldsmith
Papadimitriou, Yannakakis
Balasubramanian, Fellows, Raman
3.3
Laufzeit
O(2k k 2k+2 + kn)
O(3k kn)
O(1.324718k k 2 + kn)
Nichtexistenz eines P ar-parametrisierten PolynomialzeitAlgorithmus
Die Nichtexistenz eines Algorithmus läst sich wie bei den pseudopolynomiellen Algorithmen dadurch zeigen, dass ein Subproblem NP-hart bleibt.
Definition 15. Für ein Entscheidungsproblem U , seine Instanzmenge L und eine
Parametrisierung P ar besteht das k-fixed-parameter-set SetU (k):= {I ∈ L | P ar(I)
= k} aus allen Instanzen mit dem selben Parameter k.
Satz 16. Falls P 6= NP und SetU (k) für ein festes k NP-hart ist, gibt es für das
Problem U keinen P ar-parametrisierten Polynomialzeit-Algorithmus.
Beweis. Angenommen SetU (k) ist für ein festes k NP-hart. Ein P arparametrisierter Polynomialzeit-Algorithmus A hat bei jeder Eingabe I ∈ L eine
Laufzeit in O( f (P ar(I)) · p(|I|) ). Für ein festes k ist auch f (P ar(I)) = f (k) eine
Konstante. Damit hat A auf allen Instanzen zu SetU (k) eine polynomielle Laufzeit
O( p(|I|) ). Falls P 6= NP steht dies im Widerspruch dazu, dass SetU (k) NP-hart
ist.
Mit Hilfe von Satz 16 kann man beispielsweise ein Nichtexistenz-Resultat in
Bezug auf das NP-harte Entscheidungsproblem SetCover zeigen. Beim SetCoverProblem hat man eine Zahl k ∈ N und m Gruppen G1 , ..., Gm gegeben. Jede Gruppe
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
LITERATUR
12
C
C
1
4
2
5
3
A
6
B
1
3
5
2
A
6
4
B
Abbildung 4: SetSetCover (2) (links) und Vertex-Cover (rechts) äquivalent
ist eine Menge von Objekten. X := ∪m
i=1 Gi ist die Menge aller Objekte. Man möchte
nun wissen ob es k der m Gruppen gibt, so dass in der Vereinigung dieser k Gruppen
alle Objekte aus X enthalten sind.
Für jedes Objekt x ∈ X einer SetCover InstanzPkann man nun zählen, in wie
vielen der m Gruppen es Mitglied ist: num(x) := x∈Gi 1. Als Parametrisierung
P ar zu SetCover kann man nun das Maximum über die Mitgliedsanzahlen aller
Objekte betrachten: P ar(I) := max{num(x) | x ∈ X}.
Zu dieser Parametrisierung ist das 2-fixed-parameter-set SetSetCover (2) das
Subproblem von SetCover mit den Instanzen, bei denen jedes Objekt in maximal 2
Gruppen enthalten ist. Dieses Subproblem entspricht dem Vertex-Cover Entscheidungsproblem (siehe Abbildung 4), wenn man bei den Graphen der Vertex-Cover
Instanzen mehrfache Kanten zwischen 2 Knoten und Schlaufen (Kanten mit demselben Start- und Endknoten) zuläst. Es sollte deutlich sein, dass das NP-vollständige
Vertex-Cover Problem auf dieser Art von Graphen weiterhin NP-hart ist. Aus der
NP-Vollständigkeit von Vertex-Cover folgt somit, dass das 2-fixed-parameter-set zu
SetCover NP-hart ist. Somit kann es für SetCover bei der hier betrachteten Parametrisierung P ar unter der Voraussetzung P 6= NP keinen P ar-parametrisierten
Polynomialzeit-Algorithmus geben.
Literatur
[BG93]
J.F. Buss, J. Goldsmith. Nondeterminism within P. SIAM Journal on Computing, Volume 22, Seiten 560–572. 1993.
[BFR98]
R. Balasubramanian, M. R. Fellows, V. Raman. An Improved Fixed Parameter Algorithm for Vertex Cover. Information Processing Letters, Volume
65, Seiten 163–168. Elsevier, 1998.
[DF97]
R. G. Downey, M. R. Fellows. Parameterized Complexity. ISBN 0-38794883-X, Springer, 1997.
[Hro98]
J. Hromkovič. 3.2 Pseudo-Polynomial-Time-Algorithms, 3.3 Parameterized
Complexity. Algorithmics for Hard Problems (Introduction to Combinatorial
Optimization, Randomization, Approximation, and Heuristics), Seiten 146–159,
ISBN 3-540-66860-8. Springer, 1998.
[Kar72]
R. M. Karp. Reducibility among combinatorial problems. In R. E. Miller und
J. W. Thatcher (eds.), Complexity of Computer Computations, Seiten 85–103.
Plenum Press, New York, 1972.
[Lue75]
G. S. Lueker. Two NP-complete problems in nonnegative integer programming. Technical Report No. 178. Computer Science Labatory, Princeton University, Princeton, New Jersey, 1975.
[PY93]
C. H. Papadimitriou, M. Yannakakis. On limited nondeterminism and the
complexity of the V-C dimension. Proceedings of the 8th Annual Conference on
Structure in Complexity Theory, Seiten 12–18. 1993.
[Wan02]
R. Wanka. Vorlesungsskript Approximationsalgorithmen. Universität Paderborn, http://www.upb.de/cs/ag-madh/vorl/Approx02/, 2002.
Perlen der theoretischen Informatik: Fixed-Parameter Komplexität
Herunterladen