Skript: Exakte Exponentialzeit

Werbung
Algorithmik für schwere Probleme
Departement Informatik
Prof. Dr. Juraj Hromkovič
Dr. Hans-Joachim Böckenhauer
Dr. Richard Královič
http://www.ita.inf.ethz.ch/alscpr17
Skript: Exakte Exponentialzeit-Algorithmen
Zürich, 2. Mai 2017
Motivation. Wenn eine exakte Lösung benötigt wird und kein parametrisierter Algorithmus bekannt ist (oder der Parameter in der Eingabe gross ist), versuche einen Algorithmus
zu finden, der zwar exponentielle Laufzeit hat, aber schneller ist als die vollständige Suche.
n
Beispiel 1. Ein Algorithmus mit Laufzeit 2 2 ≈ 1.41n kann doppelt so grosse Eingaben
bewältigen wie ein Algorithmus mit Laufzeit 2n .
Ziel. Einige Entwurfsmethoden für „schnelle“ Exponentialzeit-Algorithmen kennenlernen.
Definition 1 (O ∗ -Notation). Seien f, g : N → R+ . Dann gilt f (n) ∈ O∗ g(n) , falls
ein Polynom p : N → R+ existiert, so dass f (n) ∈ O g(n) · p(n) ist.
Anschaulich: Ignoriere polynomielle Faktoren in der asymptotischen Abschätzung. Dies ist
bei exponentiellen Funktionen sinnvoll, weil
αn · p(n) ∈ O (α + ε)n
für jedes α ≥ 1 und jedes ε > 0 gilt.
Die Basis der Exponentialfunktion wird in unseren Abschätzungen ohnehin meist eine
gerundete reelle Zahl sein.
1. Methode: Branching-Algorithmen
Idee. Reduziere ein Problem der Grösse n auf mehrere kleinere Teilprobleme.
Bemerkung. Dies ist auch eine generelle Entwurfsmethode für polynomielle Algorithmen.
Mergesort reduziert zum Beispiel ein Problem der Grösse n auf zwei Teilprobleme der
Grösse n2 .
Hier ist eine typische Reduktion aber eher von n auf n − d für eine kleine Konstante d.
1
Beispiel 2 (Branching-Algorithmus für Max-IS).
Definition 2. Das Maximum-Independent-Set-Problem (Max-IS) ist das Optimierungsproblem, in einem gegebenen ungerichteten Graphen G = (V, E) eine unabhängige Menge
X ⊆ V maximaler Grösse zu finden (d. h. {u, v} ∈
/ E für alle u, v ∈ X).
Beobachtung. Trivialer Algorithmus, der in Zeit O∗ (2n ) läuft: Alle Teilmengen von V
ausprobieren.
Definition 3. Sei G = (V, E) ein Graph, v ∈ V . Die abgeschlossene Nachbarschaft von v
in G ist definiert als
n
o
N [v] = x ∈ V | {x, v} ∈ E ∪ {v} .
Beobachtung. Sei G = (V, E) ein Graph, X ein (inklusions-)maximales IS in G (d. h.
ein IS in G, zu dem kein Knoten mehr hinzugefügt werden kann). Dann gibt es für jeden
Knoten v ∈ V in N [v] einen Knoten y, so dass X ∩ N [y] = {y}.
Beweis. Wir machen eine einfache Fallunterscheidung.
• Falls v ∈ X ist, dann kann keiner der Nachbarn y von v in X sein nach der Definition
des IS. Damit folgt die Behauptung für y = v.
/ X ist, dann muss ein Nachbar y von v in X sein, sonst wäre X nicht
• Falls v ∈
maximal (X ∪ {v} wäre dann auch im IS). Nach Definition des IS ist dann keiner
der Nachbarn von y in X.
=⇒ Diese Beobachtung liefert uns einen rekursiven Algorithmus, um die Kardinalität
des maximalen IS zu berechnen:
Algorithmus Branch-IS(G)
Eingabe: Ungerichteter Graph G = (V, E).
• if V = ∅, then return 0.
• Wähle einen Knoten v mit minimalem Grad in G.
n
o
• return 1 + max Branch-IS(G − N [y]) | y ∈ N [v] .
Theorem
1. Der Algorithmus Branch-IS löst das Max-IS auf Graphen mit n Knoten in
n
∗
Zeit O 3 3 ⊆ O∗ (1.4423n ).
Beweis. Wir beweisen die Korrektheit und Laufzeitschranke einzeln.
1. Korrektheit: Folgt sofort aus der Beobachtung oben, da ein maximales IS maximaler
Grösse ein Maximum-IS ist.
2
2. Laufzeit: Sei G der Graph (in irgendeinem der Teilprobleme), v der ausgewählte Knoten
mit minimalem Grad. Seien v1 , . . . , vk die Nachbarn von v in G mit k = deg(v). Sei
|V (G)| = n.
Das Auswählen eines Knotens v mit minimalem Grad ist offensichtlich in polynomieller Zeit durchführbar. Durch das rekursive Aufrufen von Branch-IS entsteht ein
Verzweigungsbaum T , dessen Grösse (Anzahl der Knoten) wir mit T (n) bezeichnen.
=⇒ Die Gesamtlaufzeit ist in O(n2 ) · T (n).
Nun schätzen wir T (n) ab durch
deg(v)
X
T (n) ≤ 1 + T (n − deg(v) − 1) +
T (n − deg(vi ) − 1)
i=1
≤ 1 + (deg(v) + 1) · T (n − deg(v) − 1) .
Die zweite Ungleichung gilt, weil deg(v) ≤ deg(vi ) und offenbar T (l) ≤ T (l + 1) ist.
Weiter gilt T (0) = 1.
Dies gibt uns aber noch nicht unmittelbar eine Rekurrenzgleichung für die Gesamtlaufzeit des Algorithmus, weil der Knotengrad des ausgewählten Knotens in jedem
rekursiven Aufruf des Algorithmus unterschiedlich sein kann. Deshalb schätzen wir
zunächst deg(v) ab durch den schlechtestmöglichen Knotengrad, der auftreten kann:
Sei D ⊆ N die Menge aller minimalen Knotengrade, die in irgendeiner der Teilinstanzen vorkommen. Sei s∗ mit s∗ − 1 ∈ D derjenige Wert für t, der die Funktion
t · T (n − t) + 1 maximiert. Damit ergibt sich dann die Rekurrenzgleichung
T (n) ≤ 1 + s∗ · T (n − s∗ ) .
Weil die Funktion T aber auch von der Knotenanzahl n des Graphen abhängt,
und diese Knotenanzahl auch in jedem rekursiven Aufruf kleiner wird, müssen wir
zusätzlich noch zeigen, dass der schlechtestmögliche Wert s∗ nicht von n abhängt.
Dafür zeigen wir folgende Aussage.
Sei s∗ mit s∗ − 1 ∈ D derjenige Wert für t, der die Funktion t · T (n − t) + 1
maximiert. Dann maximiert s∗ auch die Funktion ts∗ T (n − s∗ − t) + s∗ + 1
(die sich durch einmaliges rekursives Einsetzen von T in sich selbst ergibt).
Um diese Hilfsaussage zu zeigen, nehmen wir an, dass T (n) = an für ein a mit
1 ≤ a ≤ 2. Damit gilt dann
⇐⇒
⇐⇒
⇐⇒
⇐⇒
⇐⇒
ts∗ T (n − s∗ − t) + s∗ + 1 ≤ (s∗ )2 T (n − 2s∗ ) + s∗ + 1
ts∗ T (n − s∗ − t) ≤ (s∗ )2 T (n − 2s∗ )
ts∗ an−s
∗ −t
≤ (s∗ )2 an−2s
∗
∗
tan−t ≤ s∗ an−s
tT (n − t) ≤ s∗ T (n − s∗ )
tT (n − t) + 1 ≤ s∗ T (n − s∗ ) + 1
3
Damit können wir in der Rekurrenz also überall die auftretenden Knotengrade
abschätzen durch denselben schlechtestmöglichen Wert und erhalten die Rekurrenz
T (n) ≤ 1 + s · T (n − s)
≤ 1 + s · (1 + s · T (n − 2s))
= 1 + s + s2 · T (n − 2s)
≤ 1 + s + s2 · (1 + s · T (n − 3s))
= 1 + s + s2 + s3 · T (n − 3s)
≤ ...
n
≤ 1 + s + s2 + . . . + s s
n
n
1 − s s +1
=
∈ O∗ (s s )
1−s
1
Die Funktion f (s) = s s erreicht bei s > 0 ihr Maximum für s = e und für ganzzahlige
Werte bei s = 3.
n
=⇒ T (n) ∈ O∗ (3 3 ) ⊆ O∗ (1.4423n ).
=⇒ Die Gesamtlaufzeit ist in O∗ (1.4423n ).
Beispiel 3 (Branching-Algorithmus für 3Sat).
Definition 4. Sei Φ eine Formel in 3-KNF über der Variablenmenge X. Seien x ∈ X und
α ∈ {0, 1}. Φ[x = α] ist die Formel in 3-KNF, die aus Φ entsteht, wenn man den Wert
x = α in Φ einsetzt und die Formel vereinfacht.
Beobachtung. Φ[x = α] lässt sich aus Φ in linearer Zeit berechnen: Falls α = 1 ist,
streiche alle Klauseln aus Φ, die x enthalten und streiche alle Vorkommen von x (hierdurch
können leere Klauseln entstehen).
Falls α = 0, verfahre umgekehrt.
Beobachtung. Φ[x = α] ist genau dann erfüllbar, wenn es eine Belegung β für X gibt,
die Φ erfüllt und die partielle Belegung α erweitert (d. h. β(x) = α).
Trivialer Branching-Algorithmus für 3Sat. Führe die Berechnung für die Eingabe Φ
zurück auf Φ[x = 0] und Φ[x = 1] für eine Variable x.
=⇒ Laufzeit auf einer Formel mit n Variablen:
T (n) = 2 · T (n − 1) + O(n) =⇒ T (n) = O∗ (2n ) .
Ziel. Verbesserung des Branchings.
4
Algorithmus Branch-3SAT(Φ) (Monien und Speckenmeyer)
Eingabe: Formel Φ in 3-KNF über der Variablenmenge X = {x1 , . . . , xn }.
• Sei L := X ∪ {x | x ∈ X} die Menge aller Literale in Φ.
• if Φ = ∅, then return JA.
• Sei F eine Klausel in Φ minimaler Länge.
• if F = ∅, then return NEIN.
• if F = (l) für ein l ∈ L, then
Rufe Branch-3SAT(Φ[l = 1]) auf und übernimm das Ergebnis.
• if F = (x ∨ y) für x, y ∈ L, then
Rufe Branch-3SAT(Φ[x = 1]) und Branch-3SAT(Φ[x = 0, y = 1]) auf und gib JA
aus, falls einer der Aufrufe JA liefert, NEIN sonst.
• if F = (x ∨ y ∨ z) für x, y, z ∈ L, then
Rufe Branch-3SAT(Φ[x = 1]), Branch-3SAT(Φ[x = 0, y = 1]) und Branch3SAT(Φ[x = 0, y = 0, z = 1]) auf und gib JA aus, falls einer der Aufrufe JA
liefert, NEIN sonst.
Theorem 2. Der Algorithmus Branch-3SAT löst 3Sat in Zeit O∗ (1.84n ).
Beweis. Wir beweisen die Korrektheit und Laufzeitschranke wieder einzeln.
1. Korrektheit: Betrachte die Klausel F = (x ∨ y ∨ z) der Länge 3 mit x, y, z ∈ L. Um
Φ zu erfüllen, muss auch F erfüllt werden, also muss mindestens eines der Literale
x, y, z auf 1 gesetzt werden. Dies ist genau dann der Fall, wenn einer der drei Fälle
• x = 1,
• x = 0 und y = 1,
• x = y = 0 und z = 1
eintritt. Die Argumentation für kürzere Klauseln ist analog.
2. Laufzeit: Die Entscheidung für eine Formel mit n Variablen wird zurückgeführt auf
(maximal) drei Teilprobleme mit n − 1, n − 2 und n − 3 Variablen. Um die Laufzeit
abzuschätzen, reicht es wieder aus, die Anzahl der Knoten im Verzweigungsbaum
abzuschätzen, da für jeden Knoten nur polynomieller Aufwand nötig ist (hier: linearer
Aufwand für die Berechnung von Φ[l = α] aus Φ).
Die Anzahl der Knoten im Verzweigungsbaum (Anzahl der betrachteten Formeln)
ist beschrieben durch
T (n) = T (n − 1) + T (n − 2) + T (n − 3) ,
T (0) = 1 .
5
Diese Rekurrenz lässt sich wie folgt lösen: Wir nehmen an, dass T (n) = an gilt für
1 ≤ a ≤ 2.
=⇒ T (n) ist die Lösung der Gleichung an = an−1 + an−2 + an−3 . Das ist äquivalent
zu: a3 = a2 + a + 1. Die einzige Lösung dieser kubischen Gleichung im Intervall [1, 2]
ist a = 1.839 . . ..
=⇒ T (n) ∈ O∗ (1.84n )
=⇒ Die Gesamtlaufzeit ist in O∗ (1.84n ).
2. Methode: Dynamische Programmierung
Beispiel 4 (TSP). O∗ (2n )-Algorithmus für TSP → siehe Übung.
Bemerkung. Dieser Algorithmus wurde vor ca. 50 Jahren entworfen und ist bis heute
der beste bekannte exakte Algorithmus für TSP.
Beispiel 5 (Graphfärbung).
Definition 5. Sei G = (V, E) ein ungerichteter Graph, k ∈ N. Eine k-Färbung von G ist
eine Abbildung c : V → {1, . . . , k}, so dass
{x, y} ∈ E =⇒ c(x) 6= c(y) .
Die chromatische Zahl χ(G) von G ist das kleinste k, so dass G eine k-Färbung besitzt.
Definition 6. Das Graphfärbungsproblem (Coloring) ist das folgende Berechnungsproblem: Gegeben ein Graph G, berechne χ(G).
Theorem 3 (Hier ohne Beweis). Coloring ist NP-schwer.
Trivialer Algorithmus für Coloring. Probiere jede Farbe für jeden Knoten aus. Da
die chromatische Zahl allgemein nur durch n = |V | beschränkt werden kann, ergibt sich
für einen Graphen mit n Knoten eine Laufzeit von O∗ (nn ).
Definition 7. Sei G = (V, E) ein ungerichteter Graph, sei c : V → {1, . . . , k} eine kFärbung von G. Wir nennen die Menge Ci := {x ∈ V | c(x) = i} die i-te Farbklasse
von c.
Beobachtung. Jede Farbklasse von c ist ein IS in G.
Beobachtung. Sei G ein ungerichteter Graph, c eine k-Färbung von G, Ci eine Farbklasse
von c. Falls Ci kein (inklusions-)maximales IS ist, gibt es einen Knoten x ∈ V − Ci , der
mit der Farbe i gefärbt werden kann, so dass das Resultat eine gültige k-Färbung ist.
6
Algorithmus DP-COL
Eingabe: Ungerichteter Graph G = (V, E).
col(∅) := 0
for i := 1 to |V | do
for all X ⊆ V mit |X| = i do
col(X) := 1 + min{col(X − I) | I ist ein maximales IS in G[X]}
(G[X] ist der von X induzierte Teilgraph von G.)
Ausgabe: χ(G) := col(V )
Theorem 4. DP-COL löst Coloring auf Graphen mit n Knoten in Zeit O∗ (2.45n ).
Beweis. Wir beweisen die Korrektheit und Laufzeitschranke wieder einzeln.
1. Korrektheit: Weil jede Farbklasse einer optimalen Färbung ein IS ist, kann man die
optimale Färbungszahl finden durch Ausprobieren aller IS und Reduktion auf den
Restgraphen. Wegen der Beobachtung oben reicht es aus, das Ausprobieren auf
maximale IS zu beschränken.
2. Laufzeit: Der Algorithmus iteriert für alle Teilmengen X von V über alle maximalen IS
i
von X. Die maximalen IS lassen sich für |X| = i in Zeit O∗ (3 3 ) aufzählen (einfache
Erweiterung des Max-IS-Algorithmus oben).
=⇒ Die Gesamtlaufzeit ist in O∗
n
X
i=1
!
i
n
· 33
i
!
Wegen
n
X
i=1
√
i
n
3
· 3 3 = (1 + 3)n < 2.45n
i
!
(die erste Gleichung folgt aus dem binomischen Satz) folgt die Behauptung.
Beispiel 6 (Anzahl perfekter Matchings bestimmen).
Ziel. „Schneller“ Exponentialzeit-Algorithmus, der in einem gegebenen Graphen zählt,
wie viele perfekte Matchings existieren.
Definition 8. Sei G = (V, E) ein ungerichteter Graph mit n = |V | gerade. Ein perfektes
Matching in G ist eine Menge M ⊆ E von n2 paarweise disjunkten Kanten.
Beobachtung. Nicht jeder Graph hat ein perfektes Matching (z. B. Stern).
Beobachtung. Ein Graph kann mehrere perfekte Matchings besitzen (z. B. gerader Kreis).
7
Entscheidungsproblem. Existiert in G ein perfektes Matching?
=⇒ In Polynomzeit lösbar, aber kompliziert.
Zählproblem. Wie viele verschiedene perfekte Matchings hat G?
=⇒ Schweres Problem.
Ziel. Algorithmus, der dynamische Programmierung verwendet mit Laufzeit O∗ (1.681n ).
Trivialer Algorithmus. Alle Kantenteilmengen der Grösse
n
2
ausprobieren.
2
Beobachtung. Führt in dichten Graphen mit O(n2 ) Kanten zu einer Laufzeit von 2O(n ) .
Definition 9. Sei G = (V, E) ein ungerichteter Graph. Sei für alle X ⊆ V , |X| gerade,
die Anzahl perfekter Matchings in G[X] definiert als pm(X).
Offensichtlich gilt pm(X) = 0, falls E(G[X]) = ∅, und pm(V ) ist der gesuchte Wert.
Um pm(V ) zu bestimmen, zählen wir zunächst alle geordneten perfekten Matchings, also
alle geordneten Folgen (e1 , . . . , en/2 ) paarweise disjunkter Kanten. Sei opm(X) die Anzahl
geordneter perfekter Matchings in G[X] für alle X ⊆ V , |X| gerade.
Der Wert opm(X) lässt sich mit dynamischer Programmierung berechnen als
opm(X) =
X
opm(X − e) .
e∈E(G[X])
(Wie oben ist G[X] der von X induzierte Teilgraph von G und für e = {v, w} ∈ E ist
X − e := X − {v, w}.)
Offenbar gilt pm(V ) = opm(V )/( n2 !).
Beobachtung. Es gibt ungefähr 2n−1 Teilmengen gerader Mächtigkeit in G und die Berechnung eines der 2n−1 Werte opm(X) umfasst eine Summe mit höchstens n2 Summanden.
=⇒ Die Gesamtlaufzeit der Berechnung von pm(V ) ist in O(n2 · 2n−1 ) ⊆ O∗ (2n ).
Ziel. Dynamische Programmierung verbessern. Nicht alle Werte opm(X) sind nötig.
Definition 10. Sei G = (V, E) ein ungerichteter Graph mit V = {v1 , . . . , vn } und n = |V |
gerade. Die Ordnung der Knoten aus V induziert eine eindeutige lexikographische Ordnung
auf der Menge aller perfekten Matchings:
• Ordne Knoten einer Kante aufsteigend nach Index.
• Ordne Kanten des Matchings lexikographisch aufsteigend.
Die resultierende Darstellung eines perfekten Matchings heisst lexikographisch geordnetes
perfektes Matching.
Beobachtung. Zu jedem perfekten Matching gibt es ein eindeutiges lexikographisch geordnetes perfektes Matching.
Idee. Verbessere Laufzeit, indem nur lexikographisch geordnete perfekte Matchings gezählt
werden.
8
Beobachtung. Sei G = (V, E) und sei (e1 , . . . , e n2 ) ein lexikographisch geordnetes perfektes Matching in G. Dann gilt
• v1 ∈ e1 ,
• für alle j ∈ {2, . . . , n2 } enthält ej den Knoten mit dem kleinsten Index, der in
e1 , . . . , ej−1 nicht vorkommt.
Idee. Definiere Klassen von relevanten Knotenmengen, die in der dynamischen Programmierung untersucht werden müssen:
Für 1 ≤ j ≤
n
2
sei
• R1 = {e ∈ E | v1 ∈ e},
• Rj = {Y ∪ e | Y ∈ Rj−1 , e ∈ E, Y ∩ e = ∅, min{V − Y } ∈ e},
=⇒ Rj enthält alle Knotenmengen, für die ein lexikographisch geordnetes perfektes
Matching (e1 , . . . , ej ) existiert, sodass ej den Knoten mit dem kleinsten Index enthält, der
in e1 , . . . , ej−1 nicht vorkommt.
Ziel. Berechne die Anzahl lopm(X) = pm(X) lexikographisch geordneter perfekter Matchings für alle relevanten Knotenmengen X mit dynamischer Programmierung.
Algorithmus DP-LOPM
Eingabe: Ungerichteter Graph G = (V, E).
R1 = {e ∈ E | v1 ∈ e}
for all X ∈ R1 , setze lopm(X) = 1
for j = 2 to n2 do
Rj = {Y ∪ e | Y ∈ Rj−1 , e ∈ E, Y ∩ e = ∅, min{V − Y } ∈ e};
for all X ∈ Rj do
lopm(X) :=
X
lopm(Y )
X=Y ∪e
Y ∩e=∅
Y ∈Rj−1
min{V −Y }∈e
Ausgabe: lopm(V ).
Anschaulich: Die Anzahl lexikographisch geordneter perfekter Matchings für X ∈ Rj lässt
sich zurückführen auf die entsprechenden Anzahlen für alle Mengen Y ∈ Rj−1 , die sich
so durch Hinzunahme einer Kante e zu X erweitern lassen, dass e den nächstgrösseren
Knoten (gemäss der Ordnung v1 , . . . , vn ) enthält.
Um die Korrektheit von DP-LOPM abzuschätzen, benötigen wir das folgende Lemma.
9
Lemma 1. Sei Fk die k-te Fibonacci-Zahl (F1 = F2 = 1, Fi = Fi−1 + Fi−2 ). Dann gilt
n
Fn+1 =
n−k
k
2
X
k=1
!
für alle geraden n ≥ 2.
Beweis. Wir bestimmen die Anzahl an aller Wörter über {0, 1} der Länge n ≥ 1, die keine
zwei aufeinanderfolgenden Nullen enthalten. Es gilt
• a1 = 2
(Wörter 0 und 1),
• a2 = 3
(Wörter 01, 10 und 11) und
• an = an−1 + an−2
(alle Wörter, die mit 1 beginnen, danach alle zulässigen
Wörter der Länge n − 1, und alle Wörter, die mit 01 beginnen,
danach alle zulässigen Wörter der Länge n − 2).
=⇒ an = Fn+2 .
Nun bestimmen wir an auf eine alternative Weise, um damit eine Darstellung für Fn+2 zu
gewinnen.
Wenn ein solches Wort der Länge n genau k Nullen enthält, gibt es n − k Einsen und
n − k + 1 Stellen, an denen jeweils höchstens eine Null eingefügt werden kann. Dies sind
n−k+1
k
!
Möglichkeiten, also insgesamt
n
X
k=0
n−k+1
k
!
und somit ist
Fn+2 =
n
X
k=0
n−k+1
k
!
und
Fn+1 =
n−1
X
k=0
!
n−k
.
k
Weil bei mehr als n2 Nullen zwei davon aufeinander folgen müssen, sind alle entsprechenden
Summanden 0, also gilt
bn
c
2
Fn+1 =
X
k=0
!
n−k
.
k
Theorem 5. Der Algorithmus DP-LOPM berechnet die Anzahl aller lexikographisch geordneten perfekten Matchings in Zeit O∗ (1.6181n ).
10
Beweis. Wir beweisen die Korrektheit und Laufzeitschranke wieder einzeln.
1. Korrektheit: Weil die Ordnung eines Matchings eindeutig ist, gilt pm(V ) = lopm(V ).
2. Laufzeit: In der j-ten Iteration sind |Rj | Mengen X zu betrachten und für jede solche
Menge müssen höchstens |E| Kanten e getestet werden.
n
=⇒ Die Gesamtlaufzeit ist in O
∗
|E| ·
2
X
!
|Rj | .
j=1
Nun schätzen wir noch |Rj | ab. Jede Knotenmenge X enthält die Knoten v1 , . . . , vj
und j weitere Knoten aus {vj+1 , . . . , vn }.
!
n−j
=⇒ |Rj | ≤
.
j
Mit Lemma 1 gilt
n
n
2
X
2
X
|Rj | ≤
j=1
j=1
!
n
!
2
X
n−j
n−j
≤
= Fn+1 .
j
j
j=0
Ferner ist |E| ∈ O(n2 ).
=⇒ Die Gesamtlaufzeit ist in O∗ (Fn+1 ).
Nach der Formel von Moivre ist
ϕn+1
= √
∈ O(ϕn ) ,
5
$
Fn+1
wobei ϕ =
√
1+ 5
2
%
≈ 1.6181 das Verhältnis des goldenen Schnittes ist.
3. Methode: Inklusion-Exklusion-Prinzip
Idee. Zähle Objekte (z. B. Graphen), die eine bestimmte Eigenschaft haben.
Beispiel 7. Sei S eine Menge mit N = |S|, seien A, B Eigenschaften von Elementen in
S, jedes Element kann keine, eine oder beide Eigenschaften haben. Sei Z die Anzahl der
Elemente ohne A und ohne B, NA die Anzahl der Elemente mit A, NB die Anzahl der
Elemente mit B und NA∩B die Anzahl der Elemente mit A und B.
Dann gilt Z = N − (NA + NB ) + NA∩B .
11
N
A∩B
A
B
Z
Verallgemeinerung. Inklusion-Exklusion-Prinzip.
Theorem 6. Gegeben sei eine Kollektion von N kombinatorischen Objekten und n Eigenschaften P1 , . . . , Pn , so dass jedes Objekt eine Teilmenge dieser Eigenschaften hat. Für
W ⊆ {1, . . . , n} sei N (W ) die Anzahl Objekte, die die Eigenschaften Pi haben für alle
i ∈ W . Sei Z die Anzahl Objekte, die keine der Eigenschaften P1 , . . . , Pn haben.
Dann gilt
(−1)|W | · N (W ) .
X
Z=N+
W ⊆{1,...,n}
W 6=∅
Beweis-Idee. Es gilt für n = 3:
Z=
N
|{z}
− N ({1}) − N ({2}) − N ({3})
alle Objekte
| {z }
Objekte mit P1
| {z }
Objekte mit P2
| {z }
Objekte mit P3
+ N ({1, 2}) + N ({1, 3}) + N ({2, 3}) − N ({1, 2, 3})
=N−
X
N (W ) +
W ⊆{1,2,3}
|W |=1
=N−
X
X
N (W ) −
W ⊆{1,2,3}
|W |=2
X
N (W )
W ⊆{1,2,3}
|W |=3
(−1)|W | · N (W ) .
W ⊆{1,2,3}
W 6=∅
Die Erweiterung auf beliebige n ist einfach.
Theorem 7 (Umformulierung von Theorem 6). Gegeben sei eine Kollektion von N
Objekten und n Eigenschaften Q1 , . . . , Qn , so dass jedes Objekt eine Teilmenge dieser
Eigenschaften hat. Für W ⊆ {1, . . . , n} sei N (W ) die Anzahl Objekte, die die Eigenschaften
Qi nicht haben für alle i ∈ W . Sei X die Anzahl Objekte, die alle Eigenschaften Q1 , . . . , Qn
haben.
Dann gilt
X=N+
X
(−1)|W | · N (W ) .
W ⊆{1,...,n}
W 6=∅
12
Beweis. Folgt sofort aus Theorem 6 für Eigenschaften Pi , so dass ein Objekt die Eigenschaft
Pi genau dann hat, wenn es Qi nicht hat.
Ziel. Inklusion-Exklusion verwenden, um einen besseren Algorithmus für Coloring zu
entwerfen.
Hierfür: Betrachte das Set-Cover-Problem.
Definition 11. Das Set-Cover-Problem (SetCover) ist das folgende Entscheidungsproblem: Gegeben eine Menge U mit n Elementen, eine Familie S von Teilmengen von U und
S
ein k ∈ N, entscheide, ob es eine Teilmenge C = {C1 , . . . , Ck0 } ⊆ S gibt mit C∈C C = U
und k 0 ≤ k. Eine solche Teilmenge C nennen wir ein k 0 -Set-Cover.
Im Folgenden wollen wir das Inklusion-Exklusion-Prinzip verwenden, um alle k-Set-Cover
einer gegebenen Instanz (U, S, k) abzuschätzen.
Definition 12. Sei (U, S, k) eine Set-Cover-Instanz. Sei ck die Anzahl geordneter k-SetCover mit Wiederholungen (C1 , . . . , Ck ) für (U, S, k), wobei Ci = Cj für i =
6 j erlaubt
ist.
Für W ⊆ U sei S[W ] = {X ∈ S | X ∩ W = ∅}, sei s[W ] = |S[W ]|.
Lemma 2. Die Anzahl geordneter k-Set-Cover mit Wiederholungen für eine Set-CoverInstanz (U, S, k) ist
ck = |S|k +
X
(−1)|W | · s[W ]k .
W ⊆U
W 6=∅
Beweis. Wir verwenden die Umformulierung des Inklusion-Exklusion-Theorems, also Theorem 7. Hierfür definieren wir die Objekte und die Eigenschaften wie folgt: Die Objekte
seien alle k-Tupel (S1 , . . . , Sk ) mit Si ∈ S. Man beachte, dass die Si in einem solchen
Tupel nicht verschieden sein müssen. Also gibt es N = |S|k viele solche Objekte.
S
Für jedes u ∈ U sagen wir, dass (S1 , . . . , Sk ) die Eigenschaft Q(u) hat, falls u ∈ ki=1 Si
gilt.
Jedes Objekt, das alle Eigenschaften Q(u) hat für alle u ∈ U , ist ein geordneter k-Set-Cover
mit Wiederholungen und umgekehrt.
Die Anzahl N (W ) der Objekte, die die Eigenschaft Q(u) nicht haben für alle u ∈ W lässt
sich berechnen als N (W ) = s[W ]k : Jede Menge Si ∈ S in einem solchen Objekt lässt sich
frei wählen aus der Menge S[W ] aller X ∈ S, die W vermeiden.
Damit folgt aus Theorem 7, dass
ck = N +
X
W ⊆U
W 6=∅
(−1)|W | · N (W ) = |S|k +
X
W ⊆U
W 6=∅
(−1)|W | · s[W ]k .
Beobachtung. Eine SetCover-Instanz (U, S, k) besitzt ein Set-Cover der Grösse ≤ k
genau dann, wenn sie ein geordnetes k-Set-Cover mit Wiederholungen besitzt, wenn also
ck > 0 gilt.
13
Theorem 8. Sei (U, S, k) eine SetCover-Instanz mit |U | = n. Die Anzahl geordneter
k-Set-Cover mit Wiederholungen ck lässt sich in Zeit O∗ (2n ) bestimmen.
Beweis. Zeige, dass sich die Werte s[W ] für alle W ⊆ U in Zeit O∗ (2n ) berechnen lassen.
Damit lässt sich dann offenbar auch die Formel aus Lemma 2 in Zeit O∗ (2n ) auswerten.
Sei für alle X ⊆ U die charakteristische Funktion f (X) definiert durch
f (X) =

1,
falls X ∈ S,
sonst.
0,
Dann gilt
X
s[W ] =
f (X) .
X⊆U −W
(Jede Menge X ∈ S, die W vermeidet, trägt 1 zu der Summe bei.)
Wir bestimmen s[W ] jetzt mit Hilfe dynamischer Programmierung. Sei U = {u1 , . . . , un }.
Für i ∈ {0, 1, . . . , n} und W ⊆ U sei gi (W ) die Anzahl von Mengen in S, die W vermeiden
und alle Elemente aus {ui+1 , . . . , un } − W enthalten, d. h.
X
gi (W ) =
f (S) .
{ui+1 ,...,un }−W ⊆S
S⊆U −W
Für i = 0 gilt also
g0 (W ) =
X
X
f (S) =
U −W ⊆S⊆U −W
f (S) = f (U − W ) .
S=U −W
=⇒ Mit einem Durchlauf durch S lassen sich alle Werte g0 (W ) für alle W ⊆ U in Zeit
O(2n ) bestimmen.
Weiterhin können wir aus
gn (W ) =
X
f (S) =
X
f (S) = s[W ]
S⊆U −W
∅⊆S⊆U −W
die Werte s[W ] ablesen.
Es bleibt zu zeigen, wie sich gi (W ) aus den bereits berechneten gi−1 -Werten ableiten lässt.
Wir unterscheiden zwei Fälle.
• Falls ui ∈ W ist, dann gilt {ui , . . . , un } − W = {ui+1 , . . . , un } − W , also ist
gi (W ) =
X
f (S) =
{ui+1 ,...,un }−W ⊆S⊆U −W
X
f (S) = gi−1 (W ) .
{ui ,...,un }−W ⊆S⊆U −W
• Falls ui ∈
/ W , dann zählt gi−1 (W ) alle Mengen von gi (W ), die ui enthalten, und
gi−1 (W ∪ {ui }) zählt alle Mengen aus gi (W ), die ui nicht enthalten. Also gilt:
gi (W ) = gi−1 (W ) + gi−1 (W ∪ {ui }) .
In jedem der beiden Fälle lässt sich gi (W ) mit konstantem Aufwand berechnen, es
ergibt sich also eine Gesamtlaufzeit in O(n · 2n ) ⊆ O∗ (2n ).
14
Anwendung für Coloring
Beobachtung. Sei G = (V, E) ein ungerichteter Graph, sei S ⊆ Pot(V ) die Menge aller
IS von G. Betrachte die SetCover-Instanz (V, S, k). Dann hat (V, S, k) ein k-Set-Cover
genau dann, wenn G k-färbbar ist.
Beweis. Wir zeigen die Äquivalenz durch zwei Implikationen.
=⇒ : Sei {C1 , . . . , Ck } ein k-Set-Cover von (V, S, k). Da jede Teilmenge eines IS wieder
ein IS ist, gibt es dann auch ein k-Set-Cover (C10 , . . . , Ck0 ), so dass die Ci0 paarweise
disjunkt sind. =⇒ c : V → {1, . . . , k}: c(u) = i ⇐⇒ u ∈ Ci0 ist eine k-Färbung
von G.
⇐= : Sei c eine k-Färbung von G. Die Farbklassen von c sind IS von G, also gibt es k IS,
die V überdecken.
Algorithmus IE-COLORING
Eingabe: Graph G = (V, E) mit |V | = n.
1. Schritt: Konstruiere ein Tupel (V, S), wobei S die Menge aller IS von G sei.
2. Schritt: k := 1
while k < n do
Berechne Anzahl geordneter k-Set-Cover mit Wiederholungen ck für (V, S, k)
if ck > 0, then return χ(G) = k, else k := k + 1
Theorem 9. Der Algorithmus IE-COLORING löst Coloring in Zeit O∗ (2n ).
Beweis. Wir beweisen die Korrektheit und Laufzeitschranke wieder einzeln.
1. Korrektheit: Folgt unmittelbar aus den Beobachtungen oben.
2. Laufzeit: Da es maximal 2n IS in G gibt, ist Schritt 1 in Zeit O(2n ) durchführbar,
Schritt 2 läuft nach Theorem 8 in O∗ (n · 2n ) ⊆ O∗ (2n ).
Beobachtung. Der Algorithmus zur Bestimmung der geordneten k-Set-Cover und der
Algorithmus IE-COLORING brauchen exponentiellen Platz zur Berechnung der s[W ].
Ziel. Polynomielle Platzkomplexität für für Bestimmung geordneter k-Set-Cover.
Theorem 10. Sei (U, S, k) eine SetCover-Instanz mit |U | = n, und sei S = {S1 , . . . , Sl }
in polynomiellem Platz und polynomieller Zeit aufzählbar, d. h. es existiert ein Polynom p,
so dass Si+1 aus Si in Zeit und Platz p(n) berechenbar ist.
Dann lässt sich die Anzahl der geordneten k-Set-Cover von (U, S, k) in polynomiellem
Platz und in Zeit 2n · |S| · p(n) berechnen.
Beweis-Idee. Für jede Teilmenge W ⊆ U separat über alle X ∈ S iterieren, um s[W ] zu
berechnen, Wert s[W ] auf laufende Summe aufaddieren.
15
Literaturhinweise
Dieses Kapitel der Vorlesung basiert im Wesentlichen auf folgendem Buch.
Fedor Fomin, Dieter Kratsch: Exact Exponential Algorithms, Springer 2010.
16
Herunterladen