Lösungsvorschläge zu den Aufgaben

Werbung
Lösungsvorschläge zu den Aufgaben
Version: 06.02.2007
Hinweis: Diese Lösungen sind nicht als Musterlösungen gedacht, die zeigen sollen, wie
man seine Lösungen aufschreiben soll. Sie sollen nur kurz und knapp eine jeweils mögliche
Lösung skizzieren.
Auch gilt wieder: Für die Rückmeldung gefundener Fehler bin ich immer dankbar.
Aufgabe 1: a) Aussage ist korrekt. Argument: Nach Vizing kann man die Kanten
mit ∆ + 1 Farben färben. Nach dem Schubfachprinzip gibt es also eine Farbe, die an
mindestens e/(∆ + 1) vielen Kanten benutzt wird. Damit gibt es ein Matching M , das
mindestens e/(∆ + 1) viele Kanten enthält. Also braucht jeder Vertex Cover mindestens
|M | ≥ e/(∆ + 1) viele Knoten.
Anderes Argument: Jeder Knoten kann höchstens ∆ Kanten abdecken. Da e Kanten
abzudecken sind, hat jeder Vertex Cover mindestens e/∆ ≥ e/(∆ + 1) viele Knoten.
b) Diese Aussage ist falsch, wie man an folgendem Beispiel sieht: Ein Graph aus 6 Knoten, mit vier Kanten und Maximalgrad zwei. Er habe Kanten {1, 2}, {3, 4}, {5, 6}, {1, 3}.
Da der Graph ein Matching aus drei Kanten enthält, braucht jeder Vertex Cover mindestens drei Knoten. Die Schranke aus b) besagt aber, dass ein Vertex Cover aus höchstens
2 · 4/(3) = 8/3 < 3 Knoten existiert, was nicht wahr ist.
c) Die Aussage ist wahr. Nummeriere o.B.d.A. die Kanten des betrachteten inklusionsmaximalen Matchings durch als {1, 2}, {3, 4}, . . . , {m − 1, m}. Es hat also m/2 Kanten.
Da es inklusionsmaximal ist, hat jede Kante des Graphen mindestens einen Knoten mit
einer dieser Kanten gemeinsam.
Damit kann jedes Matching M maximal m Kanten enthalten: Wären es mehr, so gäbe
es nach dem Schubfachprinzip einen Knoten in der Menge {1, . . . , m}, der Endpunkt
von mindestens zwei Kanten in M wäre, das somit kein Matching sein könnte.
d) Gegenbeispiel: Sei n ≥ 4. Der Stern, also der Graph mit den Kanten
{1, 2}, {1, 3}, . . . , {1, n} ist ein Gegenbeispiel: Die Menge {2, . . . , n} ist ein inklusionsminimaler Vertex Cover. {1} ist der minimale Vertex Cover. Quotient beider Kardinalitäten
ist n − 1 ≥ 3.
Aufgabe 2:
a) Jeder ungerichtete Baum hat mindestens einen Knoten v vom Grad 1. Sei die einzige
Kante an ihm die Kante e = {v, w}. Man entfernt ihn sowie e und färbt den Restbaum
rekursiv. Da zu w nun höchstens ∆−1 Kanten inzident sind, ist eine Farbe übrig, mit der
man die entfernte Kante färbt. Die Implementierung geht in Linearzeit O(n). Man muss
nur dafür sorgen, dass man effizient jeweils an einen Knoten vom Grad 1 herankommt.
Dies kann mit einer Queue geschehen, auf der man Knoten vom Grad 1 hält. Wenn eine
Kante entfernt wird und dabei ein Knoten Grad 1 bekommt, muss er auf die Queue
gelegt werden.
Andere Lösung: DFS-Aufruf, DFS-Baum aufbauen. (Es gibt keine Back-Kanten!) Die
Kanten des Wurzelknotens des DFS-Baums können mit maximal ∆ Farben gefärbt
werden. Dann geht man schichtweise im DFS-Baum von oben nach unten vor. Jeder
Knoten außer der Wurzel im DFS-Baum wird von oben über genau eine Kante erreicht.
Wenn diese die Farbe c hat, kann man die Kanten zu seinen Kindern (davon gibt es
maximal ∆ − 1 viele) mit den Farben aus der Menge {1, . . . , ∆} \ {c} färben.
b) In weiser Voraussicht entwirft man einen Algorithmus, der für Wälder und nicht nur
für Bäume funktioniert.
Zunächst entfernt man Knoten mit Grad 0, da diese in keinem minimalen Vertex Cover
vorkommen. Es bleibt ein Wald ohne Knoten mit Grad 0 übrig, also gibt es, wenn dieser
nicht der leere Wald ist, mindestens einen Knoten v vom Grad exakt 1 (jeder Baum hat
einen solchen).
Wenn ein Knoten v Grad 1 hat (Kante {v, w}), dann muss jeder Vertex Cover v oder
w enthalten. Jeder Vertex Cover C, der v enthält, kann dadurch, dass man v aus C
entfernt und w hinzufügt, zu einem Vertex Cover C 0 umgebaut werden mit |C 0 | ≤ |C|,
der v nicht enthält.
Also kann man bei Bäumen so verfahren: Knoten v vom Grad 1 finden, seinen Nachbarknoten w zum Vertex Cover hinzunehmen, w und seine Nachbarn entfernen. Es entsteht
wieder ein Wald. Iterieren.
Wie unter a) kann man das in Linearzeit implementieren.
Aufgabe 3: Man färbt die Kanten der Reihe nach mit Farben aus der Menge {1, . . . , ∆}.
Seien also nun alle Kanten bis auf eine Kante e = {v, w} gefärbt. Wenn es eine Farbe
gibt, die sowohl an v als auch an w fehlt, dann sind wir fertig, weil wir e mit dieser
Farbe färben können.
Also nehmen wir an, dass jede Farbe, die an v fehlt, an w vorkommt und umgekehrt.
An v fehle eine Farbe α und an w fehle eine Farbe β.
Wir betrachten nun den Teilgraphen H von G, der nur aus Kanten besteht, die mit
α oder β gefärbt sind. Wir behaupten, dass v in diesem Teilgraph nicht von w aus
erreichbar ist und zeigen dies nun:
Beobachtung 1: Da G bipartit ist und v und w auf verschiedenen Seiten der Bipartition
liegen, haben alle Wege von w nach v (auch in Teilgraphen) ungerade Länge.
Beobachtung 2: Da an w die Farbe α vorkommt, starten Wege in H von w aus mit einer
Kante der Farbe α und anschließend haben die Kanten jeweils abwechselnd die Farben
β und α. Damit enden ungerade Wege immer mit einer Kante der Farbe α.
Aus beiden Beobachtungen folgt, dass es in H keinen Weg von w zu v gibt, da an v
die Farbe α fehlt. Wir können somit in der Zusammenhangskomponenten von H, die w
enthält, die Farben α und β vertauschen, ohne dass die Farben an v beeinflusst werden.
Wir erhalten eine Färbung, bei der an w nun die Farbe α fehlt und können die Kante e
mit α färben.
Aufgabe 4:
Eine Kante e verbindet nie zwei Blätter miteinander. Das gilt sowohl, wenn e eine
Backkante ist, als auch, wenn e eine Treekante ist. Daher ist V 0 tatsächlich ein Vertex
Cover.
Bleibt zu zeigen, dass jeder Vertex Cover mindestens |V 0 |/2 viele Knoten enthält. Zu
diesem Zwecke zeigen wir, dass es ein Matching gibt, das alle Knoten aus V 0 enthält.
Wir markieren nun Kanten: Jedes Nichtblatt sucht sich von seinen Kindern genau eines
aus und markiert die Kante zu diesem Kind. Wenn wir nun die markierten Kanten
betrachten, so erhalten wir eine Reihe von knotendisjunkten Pfaden, die jeweils in einem
Blatt enden. Wenn man von diesen Pfaden jeweils die erste, dritte, fünfte etc. Kante
nimmt, dann erhält man ein Matching M (denn die Pfade sind knotendisjunkt), in dem
höchstens der letzte Knoten nicht vorkommt (der ein Blatt ist).
M enthält also alle Knoten aus V 0 und enthält somit mindestens |V 0 |/2 viele Kanten.
Jeder Vertex Cover muss alle Kanten eines Matchings abdecken und enthält somit mindestens |V 0 |/2 Knoten.
Aufgabe 5: Wir berechnen einen Vertex Cover C, der höchstens doppelt so groß ist wie
der minimale Vertex Cover. Das geht mit dem Algorithmus, der Approximationsgüte 2
hat. Dann geben wir V 0 := V \ C aus.
Dass V 0 eine unabhängige Menge ist, folgt daraus, dass C ein Vertex Cover ist.
Da der Eingabegraph G eine unabhängige Menge aus 3n/4 Knoten besitzt, hat er ein
Vertex Cover aus höchstens n/4 Knoten. Der Approximationsalgorithmus mit Güte 2
berechnet also ein Vertex Cover C aus höchstens n/2 Knoten. Die Menge V 0 hat also
mindestens n/2 Knoten.
Aufgabe 6:
a) Als Beispiel nehmen wir einen Graph, der aus drei Zusammenhangskomponenten
besteht. Die erste ist nur ein einziger isolierter Knoten. Die zweite ist eine Clique auf
vier Knoten. Die dritte ist ein Stern mit insgesamt fünf Knoten.
Der Durchschnittsgrad aller Knoten ist, da wir 0+6+5=11 Kanten und 10 Knoten
zählen, 22/10 = 2.2.
Der maximale Grad ist (wegen des Sterns) vier. Nun überlegt man sich relativ leicht,
dass der maximale induzierte Durchschnittsgrad wegen der Clique 3 ist. Insgesamt ist
die geforderte Ungleichung wegen 2.2 < 3 < 4 erfüllt.
b) Für n = 1 gilt die Aussage trivialerweise, da dort δ ∗ (G) = 0 ist und man mit einer
Farbe auskommt. Nun zum Induktionsschritt.
Wir wählen einen Knoten von minimalem Grad. In jedem Graph G gibt es einen Knoten,
der Grad höchstens δ ∗ (G) hat, denn ansonsten hätte der auf V induzierte Teilgraph
einen Durchschnittsgrad größer als δ ∗ (G). Also entfernen wir einen Knoten mit Grad
höchstens δ ∗ (G). Für den Restgraph G0 gilt nach Definition von δ ∗ , dass δ ∗ (G0 ) ≤ δ ∗ (G)
ist. Der Grund: Alle bei der Berechnung von δ ∗ (G0 ) betrachteten induzierten Teilgraphen
wurden auch bei δ ∗ (G) schon betrachtet. Wir färben die Knoten des Restgraphs nach
Induktionsvoraussetzung mit δ ∗ (G) + 1 vielen Farben. Der entfernte Knoten ist mit
höchstens δ ∗ (G) vielen Farben verbunden, daher ist für ihn noch eine Farbe frei, mit der
wir ihn färben.
Der Beweis funktioniert mit d nicht, da nach Entfernen eines Knotens mit minimalem
Grad der Durchschnittsgrad des restlichen Graphen höher sein kann als der Durchschnittsgrad des ursprünglichen Graphen.
c) Da alle Knoten einer Farbe eine unabhängige Menge bilden, gilt folgende Aussage:
In einem mit c Farben knotenfärbbaren Graphen gibt es (nach dem Schubfachprinzip)
eine unabhängige Menge aus mindestens n/c Knoten.
d) Ein planarer Graph hat maximal 3n − 6 Kanten. Induzierte Teilgraphen von planaren
Graphen sind auch wieder planar. Damit ist δ ∗ (G) ≤ (6n − 12)/n = 6 − (12/n) < 6.
Nach b) kann also jeder planare Graph auf n Knoten mit höchstens 7 − (12/n), also
höchstens 6 Farben gefärbt werden.
Aufgabe 7:
Jedem Knoten v aus Iopt ordnen wir einen Knoten f (v) aus I zu, und zwar wie folgt:
Wenn v ∈ I ist, dann sei f (v) = v. Ansonsten gibt es einen Knoten w aus I, mit dem v
über eine Kante verbunden ist. Wäre das nicht so, könnte man v zu I hinzufügen und
hätte eine echte Obermenge von I gefunden, die immer noch unabhängige Menge ist,
im Widerspruch zur Inklusionsmaximalität von I. Da Iopt eine unabhängige Menge ist,
ist w sogar aus I \ Iopt . Wir setzen f (v) := w für irgendeinen solchen Knoten w.
Da jeder Knoten des Graphen einen Grad höchstens ∆ hat, gibt es für jedes w aus I
höchstens ∆ Knoten v 0 aus Iopt mit f (v 0 ) = w. (Liegt w in I ∩ Iopt , so gibt es sogar nur
maximal einen solchen.)
Damit ist die Kardinalität von Iopt höchstens ∆ mal so groß wie die von I. Für das
Argument reicht ∆ ≥ 1 aus.
Ein anderes Argument: Man durchläuft der Reihe nach die Knoten v1 , . . . , vr der Menge
I und entfernt den aktuellen Knoten vi sowie seine Nachbarn. Man erhält eine Partition
von V = V1 ∪· · ·∪Vr , wenn Vi die in Runde i entfernten Knoten enthält. Jedes Vi enthält
genau einen Knoten aus I, aber höchstens ∆ Knoten aus Iopt : Wären es ∆ + 1 Knoten,
dann würde Iopt einen Knoten vi sowie alle seine Nachbarn enthalten und wäre somit
(bei ∆ ≥ 1) keine unabhängige Menge. Also folgt |Iopt |/|I| ≤ ∆.
Aufgabe 8:
In der ersten Phase des Algorithmus (Auswahl von I) erhält man eine Knotenmenge I
mit Kantenmenge E 0 .
Nach Entfernen aller Knoten des Vertex Covers (das aus höchstens |E 0 | Knoten besteht),
hat man mindestens |I| − |E 0 | Knoten übrig, die (als Komplement eines Vertex Covers)
eine unabhängige Menge bilden.
Der Erwartungswert von |I| ist p · n, der Erwartungswert von |E 0 | ist p2 · |E|, da jede
Kante mit Wahrscheinlichkeit p2 überlebt“.
”
Man erhält wegen der Linearität des Erwartungswerts also eine unabhängige Menge, die
im Erwartungswert p · n − p2 |E| Knoten enthält. Durch Ableiten stellt man fest, dass
dies maximal wird, wenn man p = n/(2|E|) wählt, also p = 1/d setzt. Dies ist zulässig,
da d ≥ 1 angenommen wird.
Für diesen Wert von p ergibt sich eine erwartete Anzahl von n/d − n/(2d) = n/(2d)
Knoten in der unabhängigen Menge.
Aufgabe 9: Man benutzt den Greedy-Algorithmus für das Set-Cover-Problem, wobei
die Kosten jeder Menge gleich 1 gesetzt werden. Man stoppt allerdings, nachdem k
Mengen gewählt worden sind.
Um die Kardinalität der überdeckten Menge mit der optimalen Lösung zu vergleichen,
nehmen wir an, dass die optimale Lösung k Mengen auswählt, die zusammen genau N
Elemente überdecken. Sei Ni die Anzahl der vom Greedy-Algorithmus nach i Runden
überdeckten Elemente und Di die Differenz zwischen N und Ni , also
Di := N − Ni .
Wir zeigen, dass Di ≤ N · (1 − 1/k)i gilt: Für i = 0 gilt dies wegen N0 = 0, also D0 = N .
Wenn wir in Runde i des Greedy-Algorithmus sind, dann gibt es eine Menge M , deren
relative Kosten kleiner gleich k/Di−1 sind. (Man kann mit höchstens k Mengen die Di−1
Elemente überdecken und nach dem Schubfachprinzip muss eine der Mengen relative
Kosten kleiner gleich k/Di−1 haben.)
Da die Menge M Kosten 1 hat, überdeckt sie also mindestens Di−1 /k Elemente neu. Also
ist Ni ≥ Ni−1 +Di−1 /k bzw. Di ≤ Di−1 −Di−1 /k = Di−1 ·(1−1/k). Im Induktionsschritt
folgt also Di ≤ N · (1 − 1/k)i .
Nach i = k Schritten ist also Dk ≤ N ·(1−1/k)k ≤ N/e und somit überdeckt der GreedyAlgorithmus nach k Runden mindestens N − N/e = N · (1 − 1/e) viele Elemente.
(P.S.: Wir haben hier die bekannte Abschätzung 1 + x ≤ ex für x = (−1/k) verwendet:
1 − (1/k) ≤ e−1/k und somit (1 − (1/k))k ≤ 1/e.
Aufgabe 10: Sei zur Schreibvereinfachung G := (1/Z − ε) die angenommene Güte des
Approximationsalgorithmus für das Maxcover-Problem.
Sei 1 ≤ r ≤ m die kleinste Anzahl an Mengen, mit denen man die Menge {1, . . . , n}
überdecken kann. r ist also die optimale Lösung des Set-Cover-Problems. Wir nehmen
für einen Moment an, dass wir die Zahl r kennen.
Nun wendet man den Approximationsalgorithmus für das Maxcover-Problem mit dem
Parameter k := r an.
Man erhält eine Auswahl aus r Mengen, die zusammen wegen der Approximationsgüte
mindestens n/G viele Elemente überdecken.
Es bleibt noch eine Restmenge aus n0 ≤ n − n/G = n · (1 − 1/G) vielen Elementen zu
überdecken. Diese kann logischerweise wieder mit höchstens r Mengen überdeckt werden. Wenn wir also wieder den Approximationsalgorithmus für das Maxcover-Problem
anwenden, erhalten wir eine Auswahl aus r Mengen, die zusammen mindestens n0 /G
Elemente überdecken. Nun wiederholt sich das Ganze.
Die Anzahl der noch zu überdeckenden Elemente ist nach i solchen Durchgängen auf
höchstens n · (1 − 1/G)i abgesunken. Man wählt ein i0 so, dass
ln n
ln(1 − 1/G)
ln n
=
1
ln 1−1/G
i0 > −
=
ln n
1
)
ln(1 + G−1
ist, denn dann hat man nach i0 Durchgängen spätestens alle Elemente überdeckt. Wir
wählen also
ln n
c+1
i0 := b
1
ln(1 + G−1
)
viele Durchgänge, insgesamt also höchstens i0 · r Mengen. Die Zahl r war das Optimum,
also erhalten wir eine Approximationsgüte von höchstens i0 . Wenn G = 1/Z ist, dann
ist
1
G
1/Z
1
1
ln(1 +
) = ln
= ln
= ln
= ln
=1
G−1
G−1
1/Z − 1
1−Z
1/e
und wir haben eine Approximationsgüte von bln nc + 1 nachgewiesen.
Wir beobachten nun, dass der Nenner als Funktion in G streng monoton fallend in G ≥ 1
ist. Für G = 1/Z − ε ergibt sich also für eine Konstante c > 1:
ln(1 +
1
) = c.
G−1
Wir erhalten eine Approximationsgüte von höchstens b(1/c) · ln nc + 1.
Nun kennt man aber die Zahl r nicht. Daher führt man den Algorithmus für alle in Frage
kommenden r = 1, . . . , m durch und wählt die beste bei diesen Versuchen gewählte
Mengenauswahl.
Nach dem in der Vorlesung zitierten negativen Resultat für die Approximierbarkeit des
Set-Cover-Problems kann man also annehmen, dass das Maxcover-Problem in Polynomialzeit nicht besser als mit relativer Güte 1/Z approximiert werden kann.
Aufgabe 11: Wir betrachten nur die ungewichtete Variante des Problems. Wenn alle
Mengen Kardinalität zwei haben, dann kann man das 2-Set-Cover-Problem als Graph-
problem darstellen: n Knoten für jedes Element und für jede zweielementige Menge eine
Kante e. Die Aufgabe lautet in die Graphensichtweise umformuliert nun: Finde eine
Auswahl der Kanten derart, dass jeder Knoten zu mindestens einer Kante inzident ist.
Zu minimieren ist die Anzahl der ausgewählten Kanten.
Natürlich kann man dabei davon ausgehen, dass jeder Knoten im Graphen G einen Grad
mindestens 1 hat, da das Problem ansonsten keine Lösung hätte.
Wir behaupten folgendes: Sei M ein maximales Matching. Dann besteht die optimale
Lösung des 2-Set-Cover-Problems aus n − |M | vielen Kanten.
Beweis: Es gibt eine Kantenauswahl aus sovielen Kanten mit den geforderten Eigenschaften: Wähle ein maximales Matching M und für jeden Knoten, der nicht in M vorkommt,
wähle eine der zu ihm inzidenten Kanten. Man erhält so genau |M |+(n−2|M |) = n−|M |
viele Kanten, die zusammen alle Knoten abdecken.
Umgekehrt: Gegeben sei eine minimale Kantenauswahl E 0 , die alle Knoten abdeckt. Wir
durchlaufen die Kanten der Reihe nach. Jede Kante deckt mindestens einen neuen Knoten ab, da die Kantenauswahl sonst nicht minimal gewesen wäre. Wenn wir t1 Kanten
haben, die genau einen neuen Knoten abdecken und t2 Kanten, die genau zwei neue
Knoten abdecken, dann gilt t1 + t2 = |E 0 | und t1 + 2t2 = n (da alle Knoten abgedeckt
sind.) Durch Subtraktion der ersten von der zweiten Gleichung erhält man t2 = n − |E 0 |.
Da jede der t2 Kanten zwei neue Knoten abdeckt, haben wir ein Matching der Größe
mindestens t2 = n − |E 0 | gefunden.
Aus beiden Transformationen zusammen folgt die behauptete Aussage.
Aufgabe 12:
a) Diesen Teil haben wir schon in Aufgabe 9 mitbewiesen.
b) Wenn r = 1 ist, zeigt a), dass der Greedy-Algorithmus die optimale Lösung berechnet.
Sei also im Folgenden r ≥ 2.
Wir rechnen (in weiser Voraussicht) für eine Zahl T aus, wie groß man i wählen muss,
damit noch weniger als T Elemente zu überdecken bleiben. Man analysiert also die
Ungleichung n · (1 − 1/r)i < T . Also:
ln n + i · ln(1 − 1/r) < ln T
⇔
ln T − ln n
i>
ln(1 − 1/r)
⇔
i>
ln n − ln T
.
ln(1 + 1/(r − 1))
ln n
c + 1 Runden ausreichen.
Setzt man T = 1, so erhält man, dass i0 = b ln(1+1/(r−1))
Die Güte ergibt sich also als
i0 /r ≤
ln n
+1
r · ln(1 + 1/(r − 1))
1
Wenn man nun berücksichtigt, dass r · ln(1 + r−1
) ≥ 1 ist für alle r ≥ 2, erhalten wir
eine Güte von höchstens ln n + 1.
c) Bei T noch zu überdeckenden Elementen bleiben noch höchstens weitere T Runden,
weil in jeder Runde mindestens ein neues Element überdeckt wird. Für alle 1 ≤ T ≤ n
ln n−ln T
+ 1 ausgewählten Mengen
gilt also, dass der Greedy-Algorithmus mit T + ln(1+1/(r−1))
auskommt.
d) Nun zur Skizze, wie das zu einer besseren Analyse führen kann: Wir setzen T = r,
da die obige Schranke für alle T gilt. Der Greedy-Algorithmus kommt also mit r +
ln n−ln r
+ 1 vielen Mengen aus. Die Güte ist also für eine Konstante c > 0 durch
ln(1+1/(r−1))
ln n−ln r
+ c beschränkt. Mit ein wenig Analysis kann man nun zeigen, dass dies
r·ln(1+1/(r−1))
kleiner gleich ln n − ln ln n + c0 für eine Konstante c0 > 0 ist. (Reine Rechenarbeit.)
Aufgabe 13: Die Eigenschaft eines Teilgraphen, dass jeder Empfänger über einen Weg
mit mindestens einem Sender verbunden ist, möge Eigenschaft (*) heißen. Es gibt stets
eine optimale Lösung des Problems (also einen Teilgraphen von G), der keine Kreise
enthält. Dies liegt daran, dass man eine Kreiskante entfernen kann, ohne dadurch die
Zusammenhangseigenschaften zu verändern. Da Kantenkosten nicht negativ sind, werden die Kosten dadurch höchstens kleiner. Dies kann man wiederholen, bis es keine
Kreise mehr gibt.
a) Wie schon in der Aufgabe angedeutet, so fügt man einen Extraknoten r hinzu, der
über Kanten mit Kosten 0 zu allen Sendern verbunden ist. Diese Kanten nennen wir
Extrakanten. Es entstehe der Graph G0 . Wenn G0 nicht zusammenhängend ist, dann
gibt es keine Lösung des ursprünglichen Problems: Gibt es nämlich für jeden Empfänger
einen Weg zu einem Sender, so wäre G0 zusammenhängend, weil man dann von jedem
Empfänger über einen Weg den Extraknoten r erreichen kann und von dort alle Sender.
Wenn G0 zusammenhängend ist, dann berechnet man einen minimalen Spannbaum auf
G0 .
Behauptung: Der minimale Spannbaum auf G0 ist eine optimale Lösung des Problems.
(Man entfernt den Extraknoten und die Extrakanten aus der Lösung natürlich wieder).
Erstens: In dem Spannbaum gibt es von jedem Empfänger einen Weg zum Extraknoten. Dieser führt zwangsweise über einen Senderknoten, da es keine Kanten von den
Empfängerknoten zum Extraknoten gibt. Wenn man den Extraknoten und die Extrakanten entfernt, bleibt also ein Teilgraph übrig, in dem jeder Empfänger einen Weg zu
einem Sender besitzt. So erhalten wir einen Teilgraph, der die gleichen Kosten hat wie
der minimale Spannbaum und der die Eigenschaft (*) hat.
Zweitens: Nun zeigen wir, wie man aus einem Teilgraph von G, der die Eigenschaft
(*) hat, einen höchstens billigeren Spannbaum auf G0 erhalten kann. Wie oben schon
erwähnt, können wir davon ausgehen, dass der Teilgraph keinen Kreis enthält. Wir fügen
den Extraknoten hinzu und durchlaufen die Extrakanten der Reihe nach. Würde die aktuell betrachtete Extrakante einen Kreis schließen, fügen wir sie nicht hinzu. Ansonsten
fügen wir sie ein. Es entsteht ein zusammenhängender Graph, da offensichtlich nach
Wahl der Kanten der Extraknoten zu jedem Sender einen Weg hat und die Empfänger
jeweils zu mindestens einem Sender einen Weg haben. Die Kosten dieses Spannbaums
sind genauso groß wie die Kosten des Teilgraphen, da die hinzugefügten Kanten Kosten
0 haben.
b) Wir benutzen das Steinerbaumproblem und wählen als Required-Menge die Knotenmenge, die aus dem Extraknoten und den Empfängern besteht. Wie unter a) kann man
aus dem minimalen Steinerbaum einen Teilgraphen konstruieren, der jeden Empfänger
mit einem Sender verbindet, indem man die Extrakanten und den Extraknoten entfernt.
Die Kosten sind genauso groß wie die Kosten des Steinerbaums.
Analog dazu kann man aus dem Teilgraphen, in dem jeder Empfänger mit einem Sender
über einen Weg verbunden ist, einen Spannbaum konstruieren, der alle Required-Knoten
enthält, indem man wie dort die Extrakanten der Reihe nach hinzufügt oder auch nicht.
Das Steinerbaumproblem ist mit relativer Güte 2 in Polynomialzeit zu approximieren.
Aufgabe 14:
Für jede Menge Si des Set-Cover-Problems verwenden wir einen Knoten vi , für jedes
Element einen Knoten wj . Für jeden Mengenknoten vi fügen wir eine gerichtete Kante
zu allen wj ein, für die j ∈ Si gilt. (Jeder Mengenknoten zeigt also auf alle Elemente
seiner zugehörigen Menge.) Die Kosten dieser Kanten seien Null.
Vom Knoten r aus zeigen Kanten zu allen Mengenknoten vi , wobei die Kosten der Kante
zum Knoten vi gleich den Kosten der Menge Si sein sollen.
Als Required-Knoten werden der Knoten r sowie alle Elementknoten wj gewählt.
Wir zeigen nun: Aus einem Steinerbaum mit Kosten c kann man (in Polynomialzeit) ein
Set Cover mit Kosten c ablesen:
Da es ein gerichteter Steinerbaum ist, gibt es für jeden Elementknoten wj einen Weg
von r zu wj , sagen wir, über vi . Dann ist j ∈ Si . Wenn man also alle Mengen Si wählt,
für die der Steinerbaum eine Kante von r zu vi hat, dann erhält man ein Set Cover.
Die Kosten dieses Set Covers sind gleich den Kosten des Steinerbaums (da die Kosten
zwischen den v-Knoten und den w-Knoten gleich 0 sind.)
Umgekehrt kann man aus einem Set Cover mit Kosten c einen Spannbaum mit Kosten c berechnen, der alle Elementknoten und den Knoten r enthält: man wählt von r
ausgehend alle Kanten zu denjenigen vi -Knoten, deren zugehörige Mengen im kostenminimalen Set Cover gewählt werden. Für jedes Element j gibt es nun eine Menge Si(j)
im Set Cover, die j enthält. Wir fügen die Kante von vi(j) zu wj hinzu. Wir erhalten so
einen Spannbaum, der alle Elementknoten und r enthält und Kosten c hat.
Da sich Kosten c der Lösung des einen Problems in Kosten c der Lösung des anderen
Problems übersetzen, ist dies offensichtlich eine approximationserhaltende Reduktion.
Zur Approximierbarkeit habe ich folgende Antwort erwartet und hätte auch volle Punktzahl gegeben: Für die Approximierbarkeit des gerichteten Steinerbaumproblems heißt
”
das, dass unter den entsprechenden komplexitätstheoretischen Annahmen folgt, dass
man es nicht mit einer Güte von c · ln n mit c < 1 approximieren kann.“
Es gibt allerdings ein kleines Problem: Wenn die Eingabe des Set-Cover-Problems exponentiell viele Mengen enthält, dann ist der Parameter für das Set-Cover-Problem, in
dem die Approximierbarkeit gemessen wird, immer noch n. Bei der Reduktion entsteht
jedoch ein Steinerbaumproblem mit exponentiell vielen Knoten. Ich überlasse es nun
dem Leser und der Leserin, sich zu überlegen, ob damit die obige Aussage immer noch
korrekt ist. (Eine solche Schwierigkeit in der Argumentation war in der Aufgabenstellung
allerdings nicht beabsichtigt.)
Aufgabe 15: Ein 2-Matching ist ein Graph, der aus lauter (knotendisjunkten) Kreisen
der Länge mindestens drei besteht. Da eine TSP-Tour ebenfalls ein 2-Matching ist, sind
die Kosten des optimalen 2-Matchings nicht größer als die Kosten der optimalen TSPTour. Wir nummerieren die Kreise C1 , . . . , Cr durch. Dabei ist r ≤ n/3, da jeder Kreis
Länge mindestens drei hat.
Wir erzeugen eine TSP-Tour wie folgt: Wir entfernen für jedes i aus Kreis Ci eine Kante
(vi , wi ). Anschließend fügen wir Kanten ein, und zwar jeweils von wi zu vi+1 . (Wenn
i + 1 = r + 1 ist, dann zu v1 stattdessen.)
Dass wir nun eine TSP-Tour vorliegen haben, ist offensichtlich. Wie haben sich die
Kosten verändert? Das 2-Matching hatte Kosten mindestens n, da n Kanten vorliegen,
bei denen jede mindestens Kosten 1 hat.
Wir haben r Kanten entfernt, die jeweils Kosten mindestens 1 haben. Und r Kanten
hinzugefügt, die Kosten höchstens 2 haben. Also haben die Kosten um höchstens r ≤ n/3
zugenommen. Wenn OP T ≥ n die Kosten einer optimalen TSP-Tour bezeichnet, so
haben wir nun eine Tour berechnet, die Kosten höchstens OP T + r hat. Als Güte
T +r
erhalten wir OP
= 1 + OPr T ≤ 1 + n/3
= 4/3.
OP T
n
Aufgabe 16: a) Sei T ein unter dem üblichen Kostenmaß c minimaler Spannbaum. Sei
T 0 ein unter dem Kostenmaß c0 minimaler Spannbaum. Wenn c0 (T ) = c0 (T 0 ) ist, dann ist
nichts zu zeigen, da dann auch T unter c0 minimaler Spannbaum ist. Ebenso ist nichts
zu zeigen, wenn n = 2 ist, da es dann nur einen Spannbaum gibt.
Sei also c0 (T 0 ) < c(T ) und n ≥ 3.
T enthält also eine Kante f , die teurer als alle Kanten in T 0 ist. Wenn wir f aus T entfernen, entstehen zwei Zusammenhangskomponenten V1 und V2 , von denen mindestens
eine zwei oder mehr Knoten enthält, da n ≥ 3 ist. Da T 0 zusammenhängend ist, aber f
nicht enthält, muss es in T 0 eine Kante e geben, die zwischen V1 und V2 verläuft. Fügen
wir die Kante e zu den beiden Zusammenhangskomponenten hinzu, so entsteht wieder
ein Spannbaum. Dieser ist nun unter dem Kostenmaß c billiger als T , weil wir f entfernt
und eine billigere Kante eingefügt haben. Dies ist ein Widerspruch zur Minimalität des
Baums T unter dem Kostenmaß c, also ist T auch minimal unter dem Kostenmaß c0 .
b) Okay, beachten wir.
c) Induktion über n. Wenn n = 2 ist, dann ist der Spannbaum T eine Kante. Von jedem
der beiden Knoten gibt es einen Hamiltonpfad zum anderen (aus der Kante bestehend).
Seine Kosten sind sogar c0 (H) = c0 (T ).
Für den Induktionsschritt stellen wir uns den Spannbaum als an v gewurzelt vor, seine
T -Nachbarn liegen eine Ebene darunter. Die Kinder mögen v1 , . . . , vt heißen, an denen
die Teilbäume T1 , . . . Tt hängen.
Falls Ti mindestens zwei Knoten enthält, dann gibt es nach Induktionsvoraussetzung
von vi zu einem T -Kind von vi einen Hamiltonpfad (im Teilbaum). Den nennen wir Hi .
Seine c0 -Kosten sind höchstens drei Mal so groß wie die c0 -Kosten von T .
Falls Ti nur den Knoten vi enthält, dann sei Hi der leere Weg von vi nach vi . Wir
setzen nun alle Hamiltonpfade zusammen: Wir starten in v1 , durchlaufen H1 . Von dem
letzten Knoten gehen wir zu v2 , durchlaufen H2 . Von dem letzten Knoten gehen wir zu
v3 , durchlaufen H3 . Etc. Schließlich, nachdem Ht durchlaufen wurde, gehen wir zu v.
Dies kann als Hamiltonpfad von v zu v1 gesehen werden (rückwärts). Welche Kanten
verwenden wir, die noch nicht in T vorkommen? Wir springen von einem Kind von vi
zu vi+1 . Dies ist in T ein Weg der Länge drei, also haben wir eine Kante benutzt, die
höchstens drei Mal so teuer ist wie die teuerste Kante aus T (siehe b). Oder wir sind
von vi zu vi+1 gelaufen (wenn Hi leer war). Dies ist in T ein Weg der Länge zwei.
Den Approximationsalgorithmus erhält man nun wie folgt: Wir berechnen mit Kruskal
einen minimalen Spannbaum. Dieser ist auch (siehe a) unter Kostenmaß c0 minimal. Mit
dem Resultat aus c) erhalten wir einen Hamiltonpfad von v zu einem seiner Kinder. Wir
ergänzen die Kante von v zu diesem Kind (die schon in T vorhanden ist, also ändert
sich der c0 -Wert nicht) und erhalten eine Tour, die höchstens dreimal so teuer ist wie
die optimale Tour (bzgl. Kostenmaß c0 .).
Aufgabe 17: Sei E 0 ein minimaler k-Cut. Nach Entfernen von E 0 aus dem Graphen
liegen k Zusammenhangskomponenten vor. Seien v1 , . . . , vk Knoten mit der Eigenschaft,
dass vi ein Knoten in der i-ten Zusammenhangskomponente ist. Dann gilt offensichtlich,
dass E 0 auch ein minimaler Multiway Cut für S1 = v1 , . . . , Sk = vk ist.
Wenn wir den Algorithmus für das Multiway-Cut-Problem als Unterroutine verwenden
wollen, dann ist das Problem nur, dass wir nicht wissen, welche Knoten in der optimalen k-Cut-Lösung in den Zusammenhangskomponenten
liegen. Wir probieren daher alle
Möglichkeiten durch, also nk viele Auswahlen v1 , . . . , vk , und berechnen jeweils einen
minimalen Multiway Cut für diese k Knoten. (Jeder solche ist auch ein k-Cut). Von
allen diesen geben wir den mit der geringsten Kantenzahl (bzw. dem geringsten Kantengewicht) aus. Da eine der Möglichkeiten die richtige ist, erhalten wir eine Lösung mit
relativer Güte 2 − (2/k), da auch der Algorithmus für das Multiway-Cut-Problem eine
solche berechnet.
Aufgabe 18: a) Einen minimalen M1 , M2 -Trenner kann man wie folgt berechnen: Man
kontrahiert alle Knoten aus M1 zu einem Knoten v1 sowie alle Knoten aus M2 zu einem
Knoten aus v2 . Ein minimaler v1 − v2 -Schnitt, den man in Polynomialzeit berechnen
kann, liefert nun einen minimalen M1 , M2 -Trenner. (Dies ist relativ offensichtlich; entsprechende Verschmelzungen haben wir ja schon in der Vorlesung verwendet.)
b) Wir müssen zunächst zeigen, dass die berechnete Kantenmenge ein Multiway Cut
ist. Zu diesem Zweck betrachten wir o.B.d.A. die beiden Knoten 1 und 2 und zeigen,
dass zwischen ihnen kein Weg mehr existiert: In nur einem der drei berechneten Trenner
können nach Entfernung der Kanten des Trenners Wege zwischen Knoten 1 und 2 noch
existieren. Da man die Vereinigung von zwei Trennern ausgibt, werden in mindestens
einem dieser beiden alle Wege zwischen 1 und 2 zerstört.
Nun zur Güte: Angenommen, A ist ein minimaler Multiway Cut. Wenn man A aus G
entfernt, dann erhält man 4 Zusammenhangskomponenten Z1 , . . . , Z4 . Sei nun Aij die
Menge der Kanten aus A, die zwischen Zusammenhangskomponente Zi und Zj verlaufen.
A13 ∪ A14 ∪ A23 ∪ A24
A12 ∪ A14 ∪ A23 ∪ A34
A12 ∪ A13 ∪ A24 ∪ A34
Es gilt für die Kosten
ist ein {1, 2}, {3, 4}-Trenner, nennen wir ihn E2 .
ist ein {1, 3}, {2, 4}-Trenner, nennen wir ihn E3 .
ist ein {1, 4}, {2, 3}-Trenner, nennen wir ihn E4 .
c:
c(E2 ) + c(E3 ) + c(E4 ) = 2 · c(A),
da jede Kante in genau zweien der Kantenmengen E2 , E3 , E4 vorkommt.
Andererseits gilt für die berechneten Trenner, nennen wir sie C12 , C13 und C14 :
c(C12 ) ≤ c(E2 ), c(C13 ) ≤ c(E3 ), c(C14 ) ≤ c(E4 ),
Also ist S := c(C12 ) + c(C13 ) + c(C14 ) ≤ c(E2 ) + c(E3 ) + c(E4 ) = 2 · c(A).
Der teuerste der drei Trenner hat Kosten mindestens S·(1/3), also sind die Gesamtkosten
der beiden ausgegebenen Trenner durch S·(2/3) ≤ (2/3)·2·c(A) beschränkt. Wir erhalten
eine relative Güte von 4/3.
Aufgabe 19: Das Gewicht einer Kante e im Graphen H aus der Aufgabenstellung sei
mit w(e) bezeichnet.
Wir betrachten einen minimalen Multiway Cut A für die Knoten S1 , . . . , Sk und definieren die Kantenmengen A1 , . . . , Ak so, dass Ai alle Kanten aus A enthält, die einen
Endknoten in Ai haben. Natürlich gilt wieder c(A1 ) + · · · + c(Ak ) = 2 · c(A), da jede
Kante aus A in genau zwei Mengen Aj vorkommt.
Jedes Ai ist ein isolierender Si -Schnitt und somit für alle j ein Si − Sj -Schnitt. Es ist
also c(Ai ) ≥ w(i, j).
Wir betrachten den Kreis 1 → 2 → 3 → · · · → k → 1 im Graphen H und entfernen die
teuerste Kante auf diesem Kreis, erhalten so einen Spannbaum.
Die Kosten des Kreises sind beschränkt durch
w(1, 2) + w(2, 3) + · · · + w(k, 1) ≤ c(A1 ) + c(A2 ) + · · · + c(Ak ) = 2 · c(A).
Da die teuerste Kante Kosten mindestens (1/k) · (w(1, 2) + w(2, 3) + · · · + w(k, 1)) hat,
hat der Spannbaum, den wir berechnet haben, Kosten höchstens (1 − (1/k)) · (w(1, 2) +
w(2, 3) + · · · + w(k, 1)) ≤ (2 − (2/k)) · c(A).
Der minimale Spannbaum ist natürlich höchstens noch billiger.
Aufgabe 20: Wir durchlaufen die Kanten des Matchings M . Wir verwalten Mengen
V1 , . . . , Vk , die zu Beginn leer sind. Die aktuelle Kante sei {v, w}. Wir überprüfen folgende k Fälle:
– v zu V1 hinzufügen und w zu V2 hinzufügen.
– v zu V2 hinzufügen und w zu V3 hinzufügen.
...
– v zu Vk−1 hinzufügen und w zu Vk hinzufügen.
– v zu Vk hinzufügen und w zu V1 hinzufügen.
Sei c := (k − 1)/k. Als Potenzialfunktion verwenden wir φ(e) := w(e) · c, falls mindestens
ein Knoten der Kante noch keinem Vi zugeteilt ist, φ(e) = w(e), falls e zwischen zwei
verschiedenen Vi verläuft und φ(e)
P = 0, falls e innerhalb einer Menge Vi verläuft. Zu
Beginn ist das Potenzial Φ := e∈E φ(e) gleich c · w(E). Der Algorithmus durchläuft
die Kanten des Matchings und wählt von den k Fällen oben jeweils denjenigen, der
das Potenzial maximiert. Die restlichen Knoten werden dann wieder einer nach dem
anderen verteilt (dabei wird der betrachtete Knoten immer so verteilt, dass das Potenzial
möglichst groß wird.)
Wenn wir eine Kante e des Matchings behandeln, dann erhöht sich ihr Potenzial von
c·w(e) auf w(e), da sie in allen k Fällen zwischen zwei verschiedenen V· -Mengen verläuft.
Betrachten wir nun eine Kante e0 , die genau einen Knoten z mit e gemeinsam hat:
Liegt der andere Knoten von e0 außerhalb der Vj -Mengen, so bleibt das Potenzial von
e0 unverändert. Liegt der andere Knoten von e0 in einer Menge Vj , dann ist in genau
k − 1 der k Fällen das Potenzial der Kante e0 anschließend w(e0 ), in einem Fall ist das
Potenzial 0. Über alle k Fälle gemittelt ist das Potenzial der Kante also durchschnittlich
((k − 1)/k) · w(e0 ) = c · w(e0 ).
Nach dem Schubfachprinzip folgt nun wieder, dass in mindestens einem der k Fälle das
Gesamtpotenzial mindestens so groß ist wie vorher, plus dem Potenzialgewinn für die
Matchingkante e0 .
Nachdem wir alle Matchingkanten behandelt haben, erhalten wir also einen k-Maxcut,
der Potenzial mindestens c · w(E) + w(M ) · (1/k) hat. Am Ende des Algorithmus gibt
das Potenzial das Gewicht der Kanten zwischen verschiedenen Vj -Mengen an, das dann
also mindestens mindestens c · w(E) + w(M ) · (1/k) ist.
Aufgabe 21: Der Einfachheit halber betrachten wir alle möglichen Schnitte und berechnen zunächst ihre Werte:
Schnitt
{A}
{B}
{C}
{D}
{A, B}
{A, C}
{A, D}
Wert
16
24
13
7
16
23
21
Damit ergeben sich die folgenden Werte für die minimalen v, w–Schnitte:
v/w A B C D
A − 16 13 7
B
− 13 7
C
− 7
Der (eindeutige) minimale A, B–Schnitt hat A alleine auf einer Seite. Damit muss A im
Gomory-Hu-Baum ein Blatt sein, das zu einer Kante des Gewichts 16 inzident ist. Auf
analoge Art sieht man, dass D ein Blattknoten ist, der zu einer Kante mit Gewicht 7
inzident ist und dass C ein Blattknoten ist, der zu einer Kante vom Gewicht 13 inzident
ist. Damit ist klar, dass nur noch der folgende Gomory-Hu-Baum vorliegen kann:
A--16--B--07--D
|
|
13
|
|
C
Aufgabe 22:
Die zweite Eigenschaft der schwachen Submodularität besagt, dass für beliebige X, Y ⊆
V Folgendes gilt:
c(X) + c(Y ) ≥ c(X \ Y ) + c(Y \ X).
Wir definieren wie gehabt die Mengen V00 , . . . , V11 .
Wir betrachten eine Kante e, die zur rechten Seite etwas beiträgt.
Fall 1): Die Kante trägt sowohl zu c(X \ Y ) als auch zu c(Y \ X) bei. Dann verläuft die
Kante zwischen V10 und V01 und trägt somit sowohl zu c(X) als auch zu c(Y ) bei.
Fall 2): Die Kante trägt zu c(X \Y ), aber nichts zu c(Y \X) bei. Dann liegt ein Endpunkt
in V10 , der andere in V11 oder V00 . Damit trägt die Kante entweder zu c(Y ) oder c(X)
bei.
Fall 3): Die Kante trägt zu c(Y \X), aber nichts zu c(X \Y ) bei. Dann liegt ein Endpunkt
in V01 , der andere in V11 oder V00 . Damit trägt die Kante entweder zu c(X) oder zu c(Y )
bei.
Aufgabe 23: Für einen Knoten v und einen Schnitt X sei EX (v) die Menge der Knoten,
die auf der gleichen Seite wie v im Schnitt liegen (v inklusive).
Betrachte einen Gomory-Hu-Baum (T, w 0 ) und eine Kante emin = {u, v}, die den kleinsten w 0 -Wert in T hat. Man überlegt sich leicht, dass der von emin induzierte Schnitt X
auch ein minimaler Schnitt ist (und nicht nur ein minimaler u, v–Schnitt).
Sei Y nun ein von X verschiedener minimaler Schnitt. Weil beide Schnitte verschieden
sind, so gilt EX (v) 6= EY (v). Also gilt entweder EX (v) 6⊆ EY (v) oder EY (v) 6⊆ EX (v),
o.B.d.A. sei EX (v) 6⊆ EY (v). Also gibt es einen Knoten w ∈ EX (v), der nicht in EY (v)
liegt. Der Schnitt Y ist also nicht nur ein minimaler Schnitt, sondern ein minimaler
v, w–Schnitt. Da v und w im Schnitt X auf der gleichen Seite liegen, führt im GomoryHu-Baum der Weg von v zu w nicht über die Kante emin . Da die billigste Kante e0 auf
dem Weg von v nach w das Gewicht des minimalen v, w–Schnitts angeben muss, muss
sie das Gewicht des minimalen Schnitts haben und somit müssen die Gewichte von emin
und e0 gleich sein. Da die beiden Kanten verschieden sind, gibt es im Gomory-Hu-Baum
zwei Kanten mit gleichem Gewicht, was aber nach Voraussetzung nicht sein kann.
Aufgabe 24: Aussage a) ist wahr. Wir wählen als Graphen G den Gomory-Hu-Baum
selber, mit den gleichen Kantengewichten. Für zwei Knoten v, w im Baum ist klar,
dass der minimale v, w-Schnitt das gleiche Gewicht hat wie die billigste Kante auf dem
Weg von v nach w: In jedem Schnitt muss mindestens eine Kante des Wegs die Seiten
wechseln. Andererseits kann man die beiden Zusammenhangskomponenten, die nach
Entfernen der billigsten Wegkante entstehen, als beide Seiten des Schnitts wählen, so
dass nur die billigste Kante die Seiten wechselt.
Aussage b) ist nicht wahr: Betrachte den Beispiel-Gomory-Hu-Baum auf Seite 47 des
Skripts: Man bekommt den Graphen H, indem man in Teil (b) des Bildes alle fehlenden Kanten mit dem Wert 8 einträgt. Damit ist der Graph, der aus den Kanten
{A, C}, {A, D}, {D, B} besteht, ein minimaler Spannbaum. (Alle seine Kanten haben
Gewicht 8, der Algorithmus von Kruskal kann die Kanten so wählen.) Damit kann dieser
Baum nicht Gomory-Hu-Baum des Graphen G sein, da ein minimaler A, B–Schnitt den
Wert 19 hat und nicht 8.
Aufgabe 25: Wir bezeichnen mit V1 , V2 jeweils die beiden Seiten eines Schnitts.
a) Die Zerlegung V1 , V2 hat genau |V1 | · |V2 | viele Kanten im Schnitt. Wenn |V1 | = i ist,
dann sind das i · (n − i) Kanten.
Es gilt in−i2 > n−1 genau dann, wenn in > n−1+i2 bzw. (i−1)n > i2 −1 = (i−1)·(i+1)
bzw. wenn n > i + 1 ist. Dies ist für alle i außer i = 1 und i = n − 1 der Fall. Damit
ist für jedes Knotenpaar v, w der Schnitt, in dem nur v auf einer Seite ist und derjenige
Schnitt, in dem nur w auf einer Seite ist, ein minimaler v-w-Schnitt.
Ein Gomory-Hu-Baum für den vollständigen Graphen ist daher der folgende: Ein Stern
auf den n Knoten, mit einem Knoten Z als Zentrum. Die Kantengewichte sind alle n−1.
Man sieht relativ leicht ein, dass dieser Baum genau die minimalen v-w-Schnitte für alle
Knotenpaare beschreibt und auch die Gewichte passen.
c) Jeder Schnitt hat mindestens zwei Kanten, weil ansonsten kein Kreis vorläge. Für
jedes Knotenpaar v, w ist daher der Schnitt, der v auf einer Seite und alle anderen auf
der anderen Seite hat, ein minimaler v-w-Schnitt. (Ebenso der Schnitt, bei dem w alleine
auf einer Seite liegt.) Dies liegt daran, dass auch dieser Schnitt zwei Kanten hat. Damit
können wir wieder, wie in a), den Stern auf n Knoten als Gomory-Hu-Baum wählen,
allerdings müssen nun die Kantengewichte alle auf 2 gesetzt werden.
b) Die Bipartitheit kann so interpretiert werden, dass die Knoten mit zwei Farben - rot
und weiß - gekennzeichnet sind und es keine Kanten zwischen Knoten der gleichen Farbe
gibt. Es gibt n rote und n weiße Knoten.
Wir betrachten einen v-w-Schnitt. Sei `w die Anzahl der von v und w verschiedenen
Knoten auf der linken Seite, die weiß sind und `r entsprechend für die Farbe rot.
Betrachten wir zunächst zwei rote Knoten v und w. (Analog dazu ist der Fall mit zwei
weißen Knoten.) O.B.d.A. gilt `w ≤ n/2 und es liegt v auf der linken Seite.
Einen Schnitt, in dem v links und w rechts liegt, betrachten wir nun. Es liegen
`w · (n − 1 − `r ) + (`r + 1) · (n − `w ) = (n − 1)`w − `r `w + n`r − `r `w + (n − `w ).
Kanten im Schnitt. Für festes `w ist dies gleich C + n`r − 2`r `w für eine Konstante C.
Dies ist, da `w ≤ n/2 ist, gleich C + `r · c für eine Konstante c ≥ 0. Wenn `w gewählt
ist, erhält man also die minimale Kantenzahl bei `r = 0. Setzen wir nun `r = 0, so ist
die Kantenzahl
(n − 1)`w + (n − `w ) = n + (n − 2)`w .
Dies wird wieder minimal für `w = 0 und ergibt den Wert n.
Damit wissen wir, dass der Schnitt mit v auf der linken Seite und allen anderen Knoten
auf der rechten Seite ein minimaler Schnitt mit Wert n ist.
Betrachten wir nun einen weißen Knoten v und einen roten Knoten w und einen Schnitt,
in dem v links und w rechts liegt.
Wir zählen an Kanten:
(`w + 1) · (n − `r ) + (`r ) · (n − `w − 1) = n(`w + 1) − 2`r (`w + 1) + n(`r ).
Für konstantes `w ist dies gleich C − 2`r (`w + 1) + n`r .
Fall 1): `w + 1 ≤ n/2. Dann wird das Minimum für `r = 0 angenommen, bei `r = 0
haben wir n(`w + 1) Kanten. Dies wird minimal, wenn `w = 0 ist. Wir erhalten den
Schnitt, in dem v auf der linken Seite und alle anderen Knoten auf der rechten Seite
liegen.
Fall 2): `w +1 > n/2. Dann wird das Minimum für `r = (n−1) angenommen. Die Anzahl
der Kanten ist n(`w + 1) − (2n − 2)(`w + 1) + n(n − 1) = (`w + 1) · (2 − n) + n(n − 1). Dies
wird minimal für `w = (n − 1). Es ergibt sich der Schnitt, in dem alle Knoten außer w
auf der linken Seite liegen.
Wieder haben wir erhalten, dass der Wert des minimalen Schnitts n ist.
Wie unter a) erhalten wir einen Gomory-Hu-Baum für Kn,n , indem wir den Stern auf n
Knoten nehmen. Dieses Mal sind die Kantengewichte alle n.
Aufgabe 26: Wir betrachten einfach einen möglichen Ablauf des Gomory-Hu-Algorithmus.
Ganz zu Beginn wählt dieser ein Knotenpaar aus und berechnet für dieses einen minimalen Schnitt, der das Knotenpaar trennt. Hier gehen wir davon aus, dass er das Paar
v, w wählt und den Schnitt {v}, V \ {v} berechnet. Man erhält nach der ersten Phase
einen Baum, in dem es zwei Knoten gibt, und zwar einen Knoten {v} und einen Knoten
V \ {v}, die durch eine Kante verbunden sind. Im weiteren Verlauf des Gomory-HuAlgorithmus wird diese Kante höchstens an einen anderen Knoten gehängt, aber sie
bleibt erhalten. Damit bleibt v im Verlauf des Algorithmus stets Blatt und ist damit am
Ende auch Blatt im Gomory-Hu-Baum.
Aufgabe 27: Die Aussage gilt. Wir präsentieren zwei Beweise. Beweis 1: Sei I eine inklusionsmaximale unabhängige Menge in G. Das Komplement von unabhängigen Mengen
ist stets ein Vertex Cover, also ist V \ I ein Vertex Cover. In der Vorlesung hatten wir
gezeigt, dass eine inklusionsmaximale unabhängige Menge stets eine dominierende Menge ist. Außerdem hatten wir gezeigt, dass jedes Vertex Cover (wenn jeder Knoten Grad
mindestens Eins hat) eine dominierende Menge ist. Also ist hier sowohl I als auch V \ I
eine dominierende Menge, eine der beiden hat Kardinalität höchstens n/2.
Beweis 2: Man berechne den DFS-Wald des Graphen. In jedem Baum des Walds betrachten wir zwei dominierende Knotenmengen: Die Menge M1 , die aus den Knoten
besteht, die einen geraden Abstand zur Wurzel haben (die Wurzel inklusive). Und die
Menge M2 , die aus den Knoten besteht, die einen ungeraden Abstand zur Wurzel haben.
Dominierend sind sie deswegen, weil jeder Knoten Abstand höchstens 1 zur jeweiligen
Menge hat. M1 ∪ M2 ergibt die Knotenmenge des Baums, daher ist nach dem Schubfachprinzip eine der beiden höchstens halb so groß wie die Menge aller Baumknoten.
Nimmt man nun für jeden DFS-Baum die kleinere der beiden Mengen, so erhält man
nun eine dominierende Knotenmenge der Größe höchstens n/2.
Aufgabe 28:
Man verwaltet während des Algorithmus eine Partition der Knotenmenge V in nichtleere Knotenmengen V1 , . . . , Vj . Außerdem ist in jeder Knotenmenge Vi ein Knoten ausgezeichnet, nennen wir ihn vi . Wir nennen ihn den Kopf“ aller Knoten in Vi . Zu Beginn
”
ist j = 1, V1 = V und v1 ein beliebiger Knoten aus V .
Sei nun eine Partition V1 , . . . , Vj gegeben. Man wendet eine Split-Operation an. Diese
bewirkt Folgendes:
Man wählt denjenigen Knoten w, der den größten Abstand dwz zu seinem Kopf z hat.
Nun eröffnet man eine neue Menge Vj+1 . In diese verschiebt man den Knoten w sowie alle
anderen Knoten, die zu w einen kleineren oder genauso großen Abstand haben als/wie
zu ihrem aktuellen Kopf.
Durch die Splitoperation wird offensichtlich erreicht, dass jeder Nichtkopf in derjenigen
Menge liegt, zu deren Kopf er den geringsten Abstand hat.
Nach k − 1 Split-Operationen liegt eine Partition der Knotenmenge V in k Mengen vor.
Wir müssen zeigen, dass der größte Abstand innerhalb der Mengen höchstens doppelt
so groß ist wie bei der optimalen Zerlegung.
Dazu betrachten die Zerlegung V1 , . . . , Vk und einen Knoten z, dessen Abstand zu seinem
Kopf maximal ist, nennen wir diesen Abstand h. Da Knoten nur verschoben werden,
wenn sie zum neu kreierten Kopf einen kleineren Abstand haben, gilt somit, dass die
ganze Zeit über der Knoten z einen Abstand mindestens h zu seinem jeweiligen Kopf
hatte. Da z nie als neuer Kopf gewählt wurde, hat jeder gewählte neue Kopf einen
Abstand mindestens h zu allen anderen Köpfen.
Nun zur Güte 2: Die von uns berechnete Lösung hat einen Wert von höchstens 2h. Denn
wenn in jeder Menge Vi der Abstand zum Kopf von Vi durch h beschränkt ist, dann
ist wegen der Dreiecksungleichung der Abstand zwischen zwei beliebigen Knoten in Vi
durch 2h beschränkt.
Andererseits haben wir eine k+1-Clique gefunden, nämlich die Menge C = {v1 , . . . , vk , z}
mit der Eigenschaft, dass für alle Knotenpaare der Clique der Abstand mindestens den
Wert h hat. Da auch in einer optimalen Lösung M1 , . . . , Mk eine der Mengen mindestens zwei Knoten aus der Clique enthalten muss (Schubfachprinzip!), hat die optimale
Lösung den Wert mindestens h. Wir haben somit die Güte 2 nachgewiesen.
Aufgabe 29:
a) Man berechnet einen DFS-Wald und entfernt alle Back-Kanten. Dann existiert offensichtlich kein Kreis mehr. Die Anzahl der entfernten Kanten beträgt |E|−(|V |−κ(G)) =
cyc(G). Die Minimalität überlegt man sich nun wie folgt: Da das Entfernen einer Kante
die zyklomatische Zahl um maximal 1 erniedrigen kann, muss man auch mindestens
cyc(G) viele Kanten entfernen, um einen kreisfreien Graphen (der die zyklomatische
Zahl 0 hat) zu bekommen.
b) Wir können o.B.d.A. davon ausgehen, dass G zusammenhängend ist, weil man ansonsten den Algorithmus in jeder Zusammenhangskomponente aufrufen kann. Wir berechnen einen maximalen Spannbaum des Graphen. Ein solcher Spannbaum kann mit dem
Algorithmus von Kruskal berechnet werden, indem man die Kanten nach absteigendem
statt aufsteigendem Gewicht einfügt. Als Kantenmenge E 0 wählt man nun alle Kanten,
die nicht in diesem Spannbaum vorkommen.
Wir zeigen nun, dass dies die optimale Lösung ist. Sei Eopt die optimale Lösung, die also
das kleinstmögliche Gewicht hat. Nach Entfernen von Eopt besteht der Restgraph aus
genau einem Baum, denn bestünde er aus mehr als einer Zusammenhangskomponente,
so könnte man mindestens eine Kante aus Eopt entfernen (also zum Restgraph eine Kante
hinzutun), ohne dass im Restgraph ein Kreis entsteht. Eopt wäre nicht gewichtsminimal
gewesen. Die Kantenmenge E \ Eopt bildet also einen Spannbaum, das Gewicht von Eopt
ist also gleich dem Gewicht von E minus dem Gewicht des Spannbaums. Also ist das
Gewicht von Eopt mindestens so groß wie das Gewicht von E minus dem Gewicht eines
maximalen Spannbaums. Damit hat die berechnete Lösung E 0 minimales Gewicht.
Aufgabe 30: Man wählt eine beliebige Reihenfolge v1 , . . . , vn der Knoten. Man zerlegt
die Kantenmenge E disjunkt in zwei Teilmengen E1 ∪ E2 : E1 sei die Menge der Kanten,
deren Startknoten eine kleinere Nummer hat als der Zielknoten. (Die Kanten verlaufen
von links nach rechts“.) E2 sei die Menge der Kanten, deren Startknoten eine größere
”
Nummer hat als der Zielknoten der Kante. (Die Kanten verlaufen von rechts nach
”
links“.) Der Graph, der nur die Kanten aus E1 enthält, ist azyklisch, da man in einem
Kreis nicht nur zu Knoten mit größeren Nummern springen kann. Analoges gilt für E2 .
Nach dem Schubfachprinzip hat eine der beiden Kantenmengen Gewicht mindestens
w(E)/2. Der Teilgraph auf dieser Kantenmenge wird ausgegeben. Mehr als Gewicht
w(E) kann kein Teilgraph von G haben. Wir erhalten eine Lösung mit relativer Güte
(höchstens) 2.
Aufgabe 31: Wir nennen das beschriebene Problem 3FVS-Problem“. Wenn man die
”
Reduktion Revue passieren lässt, die zeigt, dass man das Vertex-Cover-Problem approximationserhaltend auf das FVS-Problem reduzieren kann, dann sieht man, dass für die
beiden Graphen G und H, die in der Reduktion vorkommen, Folgendes gilt:
a) Ein Vertex Cover der Größe k für den Graphen G zerstört im Graphen H alle Kreise,
also insbesondere alle Kreise der Länge 3.
b) Eine Knotenmenge M der Kardinalität k, deren Entfernung alle Kreise der Länge 3
in H zerstört, kann in ein Vertex Cover auf G transformiert werden, der höchstens k
Knoten enthält.
Also kann man das Vertex-Cover-Problem auch approximationserhaltend auf das 3FVSProblem reduzieren. Dies zeigt, dass es gegenwärtig niemanden gibt, der das 3FVSProblem in Polynomialzeit mit einer relativen Güte c < 2 approximieren kann, da ansonsten ein entsprechender Algorithmus für das Vertex-Cover-Problem bekannt wäre.
Aber für das FVS-Problem kennt man immerhin einen Algorithmus mit Approximationsgüte 2. Beim 3FVS-Problem ist unklar, ob es einen solchen Algorithmus gibt; zumindest kann man den vorgestellten FVS-Algorithmus nicht direkt benutzen.
Also gilt: Momentan kann man das FVS-Problem besser approximieren als das 3FVSProblem.
Aber ob prinzipiell das FVS-Problem oder das 3FVS-Problem besser zu approximieren
ist, kann man so nicht sagen.
Aufgabe 32: Es gilt die Aussage, dass ein Graph genau dann bipartit ist, wenn er keine
Kreise ungerader Länge enthält. Dies sieht man wie folgt ein: Wenn ein Graph bipartit
ist, dann startet jeder Kreis auf einer Seite und endet auf der gleichen Seite, er wechselt
also gerade oft die Seiten. G enthält also keine Kreise ungerader Länge.
Umgekehrt: Wenn ein Graph nur Kreise gerader Länge hat, dann betrachten wir den
DFS-Baum von G. (O.B.d.A. sei G zusammenhängend.) Wenn wir die Ebenen des
Baums mit 0, 1, etc. numerieren, dann verlaufen Back-Kanten nur zwischen Ebenen
i und j, wenn |i − j| ungerade ist (da ansonsten Kreise ungerader Länge geschlossen
würden.). Also kann man als Bipartition V1 := {v | v liegt auf gerader Ebene} und
V2 := V \ V wählen, Kanten verlaufen dann nicht innerhalb von V1 oder innerhalb von
V2 .
Wenn man in einem Graphen durch Entfernen einer Kantenmenge E 0 alle Kreise ungerader Länge zerstört hat, dann bleibt ein bipartiter Graph übrig. Nennen wir die beiden
Seiten der Bipartition V1 und V2 . Dann enthält E 0 nur Kanten, die innerhalb von V1
oder V2 verlaufen, weil ansonsten E 0 nicht minimal wäre. Die Anzahl der Kanten in E 0
ist also gleich |E| minus der Anzahl der Kanten im Schnitt zwischen V1 und V2 .
Andererseits kann man jeden Schnitt V1 , V2 mit Kantenmenge E ∗ zwischen V1 und V2
in eine Kantenmenge E 0 := E \ E ∗ transformieren, so dass das Entfernen von E 0 einen
bipartiten Graphen ergibt.
Wegen dieser Reduktion ergibt sich, dass der Wert |E 0 | für die minimale Kantenmenge
E 0 gleich dem Wert |E| minus dem Wert eines maximalen Schnitts ist. Das Problem der
Berechnung eines maximalen Schnitts ist jedoch das Problem MAXCUT, das NP-hart
ist.
Also kann man das NP-harte Problem MAXCUT lösen, indem man das Problem aus
der Aufgabe löst (man erhält E 0 ) und dann |E \ E 0 | als optimalen Wert des MAXCUTProblems zurückliefert.
Damit ist das Problem aus der Aufgabe auch NP-hart.
Aufgabe 33: Zunächst muss man die δ-Werte der Knoten im Graphen berechnen. Da
G zusammenhängend ist, ergibt sich δG (v) = deg(v) − κ(G − v) und somit:
δG (A) = δG (B) = δG (C) = δG (E) = 1, δG (D) = 2, δG (Z) = 3.
Nun rechnen wir die w(v)/δG (v)-Werte aus:
Die Quotienten für A bis E und Z sind in dieser Reihenfolge: 5, 5, 8, 5, 8, 33.33 . . .. Es ergibt sich c = 5 und somit w 0 (A) = w 0 (B) = 0, w 0 (C) = 3, w 0 (D) = 0, w 0 (E) = 3, w 0 (Z) =
85. Damit wird der Algorithmus rekursiv auf der Knotenmenge V 0 = {C, E, Z} aufgerufen. Da der induzierte Teilgraph auf dieser Knotenmenge keinen Kreis enthält, wird
die leere Menge zurückgeliefert.
Damit ist F 0 = ∅ und F 00 = {A, B, D}. Man sieht nun, dass der Knoten B entfernt
werden kann und dann immer noch ein FVS vorliegt. Auch stellt man fest, dass man
dann keinen weiteren Knoten entfernen kann, ohne die FVS-Eigenschaft zu verletzen.
Also wird F ∗ = {A, D} zurückgeliefert, die Kosten sind 15. Man sieht übrigens relativ
leicht ein, dass dies für das Beispiel sogar eine optimale Lösung ist.
Aufgabe 34: Vorweg die Bemerkung, dass jeder Superstring von x und y auch ein
Oberstring von x und y ist und somit ein kürzester Oberstring höchstens kürzer als ein
kürzester Superstring sein kann. Hier ein Beispiel, dass er echt kürzer sein kann: Sei
x =XABA und y =XBAG. Dann ist XABAXBAG ein kürzester Superstring der beiden,
aber XABAG ein (kürzerer) Oberstring.
Das Oberstring-Problem kann mit dynamischer Programmierung gelöst werden. Sei
T (i, j) die Länge eines kürzesten Oberstrings von x1 , . . . , xi und y1 , . . . , yj . Wir zeigen,
wie man die Zahl T (i, j) berechnen kann, mit den üblichen Tricks kann man natürlich
auch einen kürzesten Oberstring und nicht nur seine Länge berechnen.
Man sieht leicht ein, dass T (i, 0) = i ist, weil x1 · · · xi der kürzeste Oberstring von
x1 · · · xi und ε ist. Analog T (0, j) = j.
In einem kürzesten gemeinsamen Oberstring S von x1 · · · xi und y1 · · · yj ist der letzte
Buchstabe von S dem Buchstaben xi oder dem Buchstaben yj zugeordnet (oder beiden).
Wäre es nicht so, gäbe es ansonsten einen kürzeren gemeinsamen Oberstring, da der
letzte Buchstabe überflüssig wäre. Man erhält als Bellmansche Optimalitätsgleichung,
wenn i ≥ 1 und j ≥ 1 ist:
1 + T (i − 1, j − 1), falls xi = yj
T (i, j) =
1 + min{T (i − 1, j), T (i, j − 1)}, falls xi 6= yj .
Eigentlich müsste man im Fall xi = yj noch die beiden Terme T (i, j − 1) und T (i − 1, j)
berücksichtigen. Aber: Es ist T (i − 1, j − 1) ≤ T (i, j − 1) und T (i − 1, j − 1) ≤ T (i − 1, j),
denn ein Oberstring von x1 · · · xi ist auch Oberstring von x1 · · · xi−1 , ein Oberstring von
y1 · · · yj ist auch Oberstring von y1 · · · yj−1 . Daher können die beiden Terme wegfallen.
Man erhält in Laufzeit O(n · m) einen kürzesten gemeinsamen Oberstring von x und y.
Aufgabe 35: Ich habe mich für die folgende Kreisüberdeckung entschieden:
C1 : ATAG → GATT → ATTA → ATAG
C2 : TATA → AGAGAGAG → GAGAGAGA → TATA
Damit ist α(C1 ) =ATAGATT, α(C2 ) =TATAGAGAGAGA.
Außerdem σ(C1 ) =ATAGATTATAG, σ(C2 ) =TATAGAGAGAGATATA.
Verwendet man den Approximationsalgorithmus mit Güte 4, dann würde man ausgeben:
ATAGATTATAGTATAGAGAGAGATATA.
Verwendet man den Approximationsalgorithmus mit Güte 3, dann muss man zunächst
den Überlappungsgraphen auf σ(C1 ) und σ(C2 ) konstruieren. Dies ist bei einem Graphen
mit zwei Knoten nicht besonders schwierig, auch das Finden einer optimalen Kreisüberdeckung ist nicht besonders schwierig. Der minimale Superstring von σ(C1 ) und σ(C2 )
mit den beiden in dieser Reihenfolge wäre: ATAGATTATAGAGAGAGATATA. Mit der
umgekehrten Reihenfolge: TATAGAGAGAGATATAGATTATAG.
Aufgabe 36:
Der Beweis scheitert an der Stelle, wo man den Überlapp von r und r 0 betrachtet und
schlussfolgert, dass die beiden Strings α und α0 kommutieren. Sei zum Beispiel r =
ABAABA, r 0 = ABAB. Die Überlappung ist ABA. Im Beweis wird nun α = ABA
gewählt sowie α0 = AB. Man kann nun leider nicht schlussfolgern, dass α ◦ α0 = α0 ◦ α
ist, denn es gilt nicht ABAAB = ABABA. Um zu zeigen, dass die veränderte Aussage
falsch ist, muss man ein Beispiel finden, in dem die entprechenden Strings als Strings in
einer billigsten Kreisüberdeckung vorkommen.
Hier ein solches Beispiel:
Es sei s1 := ABAABA, s2 := AABAAB, s3 := ABAB und s4 := BABA.
Es gibt eine Kreisüberdeckung mit Gewicht 5: Kreis C sei s1 → s2 → s1 und C 0 sei
s3 → s 4 → s 3 .
Wenn wir das Gewicht 5 schlagen wollen, dann dürfen wir, da jede Kreisüberdeckung
aus vier Kanten besteht und jede Gewicht mindestens 1 hat, keine Kante verwenden,
die Gewicht 2 oder mehr besitzt.
Da jedoch alle Kanten von s1 aus ein Gewicht größer als 1 haben, kann es keine solche
Kreisüberdeckung geben.
Nun ist α(C) = 2 + 1 = 3, α(C 0 ) = 1 + 1 = 2, das Maximum der beiden also 3.
Sei r := s1 und r 0 := s3 , also r = ABAABA, r 0 = ABAB. Dann ist |overlap(r, r 0 )| =
|ABA| = 3, was nicht kleiner ist als das Maximum von α(C) und α(C 0 ).
Blatt 10
Aufgabe 37: Sei v = v1 , . . . , vn und w = w1 , . . . , wm .
Sei H(i, j) die Länge des längsten gemeinsamen Suffixes von v1 , . . . , vi und w1 , . . . , wj .
Wenn man alle H(i, j) für 1 ≤ i ≤ n und 1 ≤ j ≤ m kennt, dann kennt man die Länge
eines längsten gemeinsamen Teilstrings: Das ist das Maximum aller H(i, j)-Werte.
Wir berechnen alle H(i, j)-Werte mit Dynamischer Programmierung:
H(0, j) = 0 und H(i, 0) = 0 dürften dabei offensichtlich sein. Für i ≥ 1 und j ≥ 1 gilt:
0, falls vi 6= wj
H(i, j) =
1 + H(i − 1, j − 1) sonst.
Diese Gleichung dürfte ebenfalls offensichtlich sein. Damit kann man alle H-Werte in
Zeit O(n · m) berechnen.
Angenommen, das Maximum wird an der Stelle H(i0 , j0 ) angenommen, dann kennt man
auch ein längstes gemeinsames Teilwort: Es endet an der Stelle vi0 und wj0 und hat die
Länge H(i0 , j0 ).
Aufgabe 38: Wenn k = 1 ist, dann haben alle Objekte den gleichen Nutzen, es geht
also darum, die Anzahl der mitgenommenen Objekte zu maximieren. Man kann also alle
Nutzenwerte auf 1 setzen. Wenn alle Nutzenwerte 1 sind, dann liegt der Fall vmax = 1 vor
und mit Hilfe des Dynamischen Programmierungsansatzes aus der Vorlesung kann man
eine optimale Bepackung in Laufzeit O(n2 ) berechnen. Ein anderer, effizienterer, Ansatz
wäre der folgende: Sortiere die Objekte nach aufsteigenden Gewichten, also g1 ≤ g2 ≤
· · · ≤ gn . Wenn man k Objekte mitnehmen kann, ohne das Gewichtslimit zu verletzen,
dann kann man auch die leichtesten k Objekte mitnehmen. Also kann man die optimale
Lösung berechnen, indem man das größte k ermittelt, so dass g1 + · · · + gk ≤ G ist.
Für k ≥ 2 geht man wie folgt vor: Seien w1 , . . . , wk die verschiedenen Nutzenwerte.
Sei C1 , . . . , Ck die Partition der Objekte, wobei die Klasse Ci alle Objekte enthält, die
Nutzenwert wi haben. Man sortiert die Objekte innerhalb jeder Klasse Ci nach ihren
Gewichten.
Man betrachtet alle Vektoren der Form (b1 , . . . , bk ) ∈ N0k , allerdings nur solche, für die
bi ≤ |Ci | für alle 1 ≤ i ≤ k gilt.
Interpretation: Man will bi Objekte vom Nutzenwert wi einpacken. Ob das geht, kann
man für einen solchen Vektor wie folgt ermitteln: Man rechnet aus, ob die Gewichtssumme der leichtesten bi Objekte aus Klasse Ci - über alle Klassen summiert - das
Gewichtslimit nicht überschreitet. Falls das Limit eingehalten wird, ermittelt man den
Nutzenwert. Über alle möglichen Vektoren wählt man dann denjenigen, für den dieser
Nutzenwert maximal ist. Die Laufzeit ist offensichtlich ein Polynom, multipliziert mit
der Anzahl der verschiedenen Vektoren. Wir zählen diese nun.
Die Komponentensumme der Vektoren ist durch n beschränkt;
ihre
Länge ist k. Also
n+k
gibt es nach der Formel aus der Vorlesung genau n+k
=
viele verschiedene
n
k
k
k
solche Vektoren. Dies könnte man durch (n + k) ≤ (2n) abschätzen, so dass man
(bei k konstant) schon sieht, dass es ein Polynom ist. Spaßeshalber wollen wir es anders
abschätzen: Es gibt k Vektoren, bei denen eine Komponente gleich n ist und alle anderen
Komponenten 0 sind. Wenn keine Komponente gleich n ist, sind alle Komponenten aus
der Menge {0, . . . , n−1}. Also gibt es höchstens nk viele solche Vektoren. Insgesamt
also
n+k
k
k
höchstens n + k viele Vektoren. (Wir haben also nebenbei gezeigt, dass k ≤ n + k
ist.)
Aufgabe
39: a) Hier kann man Induktion verwenden. Für M = 0 lautet die Aussage
k
k−1
= 0 , was offensichtlich gilt, da beide Seiten den Wert 1 haben.
0
Im Induktionsschritt rechnet man:
M
+1 M X
X
i+k−1
i+k−1
M +k
=
+
i
i
M +1
i=0
i=0
= nach Induktionsvoraussetzung
M +k
M +k
=
+
M
M +1
M +k+1
,
=
M +1
nach der bekannten Formel, mit Hilfe derer man das Pascalsche Dreieck konstruiert.
b) Wenn F (S) für S ≥ 0 die Anzahl Vektoren v ∈ {1, 2}∗ angibt, deren Komponentensumme S ist, dann gilt für S ≥ 2:
F (S) = F (S − 1) + F (S − 1),
denn v beginnt entweder mit einer 1 und hat auf den hinteren Positionen einen Vektor,
dessen Komponentensumme S − 1 ≥ 0 ist, oder v beginnt mit einer 2 und hat auf den
hinteren Positionen einen Vektor, dessen Komponentensumme S − 2 ≥ 0 ist.
Entsprechend kann man jeden Vektor mit Komponentensumme S − 1 bzw. S − 2 auch
zu einem Vektor v auffüllen“, dessen Komponentensumme S ist.
”
Außerdem ist F (0) = 1, da dann der leere Vektor vorliegen muss und F (1) = 1, denn es
kommt nur der Vektor aus einer 1 in Frage.
Wir sehen somit, dass F (S) die S-te Fibonacci-Zahl ist.
Aufgabe 40: Angenommen, es wurden durch den Algorithmus m Kisten verwendet.
Für alle 1 ≤ i ≤ m − 1 gilt, dass das Gewicht in Kiste i und Kiste i + 1 zusammen das
Gesamtgewicht 1 überschreitet, weil ansonsten keine neue Kiste begonnen worden wäre.
Das Gesamtgewicht aller Objekte kann man nun berechnen als das Gewicht der Objekte
in Kisten 1 und 2, in Kisten 3 und 4, etc. Wenn m gerade ist, hat man Gesamtgewicht
größer als m/2 > (m − 1)/2. Wenn m ungerade ist, hat man Gesamtgewicht größer als
(m − 1)/2. Nun ist man in der gleichen Situation wie bei der Analyse von First Fit. Es
ergibt sich die relative Güte von 2.
Als Beispiel, wo man fast um den Faktor 2 neben dem Optimum liegt, betrachten wir
folgende Liste von insgesamt 4N Objektgrößen:
(1/2, 1/(2N ), 1/2, 1/(2N ), . . . , 1/(2N )).
Das Gesamtgewicht aller Objekte ist 2N · (1/2) + 2N · (1/(2N )) = N + 1. Damit braucht
jede Lösung mindestens N + 1 Kisten. Es gibt auch eine Lösung, die mit dieser Anzahl
an Kisten auskommt: Man packt in N Kisten je zwei Objekte mit Gewicht (1/2). In die
N + 1-te Kiste packt man die 2N Objekte mit Gewicht jeweils 1/(2N ). Der Wert der
optimalen Lösung ist also N + 1.
Next Fit packt jeweils zwei benachbarte Objekte in der Liste zusammen in eine Kiste,
benutzt also 2N Kisten insgesamt, fast doppelt soviele wie in der optimalen Lösung.
Ein anderes Beispiel: Sei ε > 0 eine sehr kleine Zahl. Sei ai = (1/2) + iε und bi =
(1/2) − iε.
Die Folge der Objektgrößen sei nun a1 , b0 , a2 , b1 , a3 , b2 , · · ·. Da in der Liste benachbarte
Objekte in keine gemeinsame Kiste passen, da ai + bi−1 > 1 und bi + ai+1 > 1 ist,
benötigt Next Fit genausoviele Kisten wie es Objekte gibt.
Die optimale Lösung kommt aber mit ca. der Hälfte der Kisten aus, da man die Objekte
mit den Gewichten ai und bi zusammen in eine Kiste packen kann.
Blatt 11
Aufgabe 41: Sei das vorliegende Problem so, dass n Objekte mit genau k verschiedenen
Größenwerten vorliegen, genauer: Es liegen für Zahlen a1 , . . . , ak jeweils ai Objekte vom
Größenwert Nummer i vor. (Es ist also a1 + · · ·+ ak = n.) Wir definieren bpp(a1 , . . . , ak )
als die kleinste Anzahl an Kisten, mit denen man für das durch die Zahlen a1 , . . . , ak
beschriebene Problem auskommt. Als Initialwert benötigen wir nur bpp(0, . . . , 0) = 0.
Es gibt höchstens polynomiell viele verschiedene Füllungen einer Kiste, denn die Füllung
einer Kiste mit gegebenen Objekten kann durch einen Vektor (b1 , . . . , bk ) ≤ (a1 , . . . , ak )
(komponentenweises Kleiner-Gleich) beschrieben werden, in dem bi angibt, wieviele Objekte von Größenwert i in die Kiste gefüllt werden. Da jedes bi durch ai beschränkt ist,
gibt es höchstens (a1 +1)·(a2 +1) · · · (ak +1) ≤ ((n/k)+1)k viele Möglichkeiten. (Hierbei
haben wir ausgenutzt, dass das Produkt s1 · · · sk von Zahlen, deren Summe fixiert ist,
maximal ist, wenn sie alle gleich sind.) Wer diese Abschätzung nicht verstanden hat: Die
etwas schlechtere Abschätzung, dass es höchstens (n + 1)k viele solche Füllungen gibt,
ergibt sich aus der Abschätzung, dass jedes bi nur Werte aus {0, 1, . . . , n} annehmen
kann.
Also: Es gibt nur polynomiell viele verschiedene Füllungen für eine Kiste. Sei Q(a1 , . . . , ak )
die Menge aller solchen Vektoren (b1 , . . . , bk ). Wir erhalten die folgende bellmansche Optimalitätsgleichung:
bpp(a1 , . . . , ak ) = 1 +
min
(b1 ,...,bk )∈Q(a1 ,...,ak )
bpp(a1 − b1 , . . . , ak − bk ).
Wenn wir mindestens ein Objekt vorliegen haben, also (a1 , . . . , ak ) 6= (0, . . . , 0) ist, wird
mindestens eine Kiste benutzt. Für diese probieren wir alle möglichen Füllungen aus.
Die Kiste selbst ist durch den Term +1“ berücksichtigt. Die restlichen Objekte werden
”
wieder optimal in weitere Kisten verpackt.
Da die zu füllende Tabelle bpp polynomiell viele Einträge hat und jeder in polynomieller
Zeit berechnet werden kann, erhalten wir polynomielle Laufzeit.
Wer sich wundert, dass wir nirgendwo explizit die Größenwerte benutzt haben: Diese
gehen natürlich implizit bei der Berechnung der Menge Q(a1 , . . . , ak ) ein.
Aufgabe 42:
P
a) Für jeden Knoten benutzen wir eine Variable xi ∈ {0, 1}. Als Zielfunktion ist ni=1 xi
zu minimieren, die Nebenbedingungen sind: Für jede Kante e = {i, j} die Bedingung
xi + xj ≥ 1. Jeder Lösung kann man ein Vertex Cover C = {i | xi = 1} zuordnen. Eine
optimale Lösung korrespondiert zu einem minimalen Vertex Cover.
b) Sei G der Graph auf drei Knoten, der alle drei Kanten hat. Die optimale fraktionale
Lösung ist x1 = x2 = x3 = (1/2) mit Zielfunktionswert 3/2. Dass dieser Vektor die
Bedingungen erfüllt, ist offensichtlich. Dass er optimal ist, sieht man, wenn man die drei
Bedingungen x1 + x2 ≥ 1, x2 + x3 ≥ 1, x1 + x3 ≥ 1 addiert, da dann 2(x1 + x2 + x3 ) ≥ 3
bzw. x1 + x2 + x3 ≥ 3/2 folgt.
c) Wir beobachten, dass wir die Bedingung xi ∈ {0, 1} zu 0 ≤ xi ≤ 1 relaxieren. Die
Bedingung xi ≤ 1 kann man noch weglassen, da in der optimalen Lösung kein xi > 1
sein kann, denn man überlegt sich leicht, dass man ein xi > 1 durch xi = 1 ersetzen
kann ohne die Bedingungen zu verletzen.
Im
P dualen LP gibt es Variablen ze für jede Kante e. Die zu maximierende Zielfunktion ist
ze , die Nebenbedingungen sind: Für jeden Knoten v ∈ {1, . . . , n} die Bedingung,
e∈EP
dass
e|e={v,·} ze ≤ 1. Man sieht, dass das duale Programm eine Art Matching beschreibt: Wenn wir nämlich die ganzzahlige Variante des dualen Programms betrachten,
dann erhalten wir exakt das Problem maximales Matching“.
”
Aufgabe 43:
a) Angenommen, wir beschränken uns zunächst auf Lösungen mit Werten xj ∈ {0, 1}.
Diese Variablen kann man dann als Indikatorvariablen ansehen, die angeben, ob die j-te
Kante gewählt werden soll oder nicht.
Die i-te (für i 6= 1, 2) Zeile der Bedingung A · x = (1, −1, 0 . . . , 0) besagt, dass für den
Knoten i genauso viele eingehende wie ausgehende Kanten gewählt werden.
Für i = 1 besagt die Bedingung, dass die Anzahl der in Knoten 1 eingehenden Kanten
Eins kleiner als die Anzahl der von 1 ausgehenden Kanten ist.
Analog für i = 2, allerdings mit vertauschten Rollen von ausgehenden und eingehenden
Kanten.
Angenommen, wir haben eine optimale Lösung des Programms. Diese kann man als
Teilgraphen G∗ von G ansehen. (Indem man alle Kanten e wählt, die xe = 1 haben.)
G∗ enthält keine Kreise, denn ansonsten könnte man einen Kreis hernehmen und für
alle Kanten e auf dem Kreis die Variable xe um Eins verkleinern. Dadurch werden die
Bedingungen nicht verletzt, aber der Wert der Zielfunktion wird kleiner, was wegen der
Optimalität nicht sein kann.
Da es keine Kreise gibt, findet man nun, startend in Knoten 1, eine Folge von Knoten
(und Kanten) 1, v1 , . . . , vr , 2. Also: Einen Weg von Knoten 1 nach Knoten 2. Ein solcher
Weg erfüllt alle Bedingungen. Gäbe es in G∗ noch darüber hinaus weitere Kanten, so
könnte man deren x-Werte alle auf 0 setzen, wodurch man eine bessere Lösung erhielte.
Wegen der Optimalität gibt es also keine weiteren Kanten. G∗ ist also ein Weg von
Knoten 1 nach Knoten 2.
Wenn wir eine optimale Lösung des LPs haben, deren Variablen alle aus der Menge
{0, 1} sind, dann kennen wir also einen billigsten gerichteten Weg von 1 nach 2.
b) Betrachte den Graphen auf vier Knoten mit den Kanten (1, 3), (1, 4), (3, 2), (4, 2).
Kantengewichte seien alle 1. Ein Beispiel für eine fraktionale optimale Lösung ist die, in
der alle Kantenvariablen auf 1/2 gesetzt werden.
c) Wir betrachten eine optimale Lösung und unter allen solchen eine, in der maximal
viele Variablen Null sind. Wie in a) betrachten wir einen Graphen G∗ , der nun aber
aus allen Kanten besteht, deren Variable ungleich Null ist. Sei c der kleinste von Null
verschiedene Variablenwert. Wie in a) kann man zeigen, dass G∗ keine Kreise enthält,
weil man ansonsten entlang des Kreises alle Variablen um c verkleinern könnte.
Angenommen, in G∗ gibt es zwei verschiedene Wege vom Knoten 1 zum Knoten 2, zum
Beispiel die Wege e1 , . . . , er und e01 , . . . , e0s . (Man beachte, dass beide Wege sogar Kanten
gemeinsam haben können.) Der erste Weg e1 , . . . , er sei dabei höchstens billiger als der
zweite.
Sei δ der kleinste Variablenwert einer Kante aus der Menge {e01 , . . . , e0s } \ {e1 , . . . , er }.
Diese Menge ist offensichtlich nicht leer, δ also wohldefiniert.
Wir erniedrigen alle Variablen von Kanten des zweiten Wegs um δ und erhöhen anschließend alle Variablen von Kanten des ersten Wegs um δ. Die Variablenwerte der Kanten in
{e1 , . . . , es } \ {e01 , . . . , e0r } erhöhen sich um δ, die der Kanten in {e1 , . . . , es } ∩ {e01 , . . . , e0r }
bleiben unverändert und die der Kanten in {e01 , . . . , e0s } \ {e1 , . . . , er } werden um δ kleiner. Wegen der Wahl von δ bleiben alle Werte nicht-negativ, und für die Kante, die den
Wert von δ definiert hat, sackt der Wert auf exakt 0 ab. Nach Konstruktion erhalten
wir wieder eine Lösung des LPs. Der Zielfunktionswert ist höchstens kleiner geworden,
da wir das Gewicht δ von einem teuren Weg auf einen billigeren Weg gelegt haben“.
”
Wir haben also immer noch eine optimale Lösung vorliegen. Außerdem ist die Variable
der Kante, die δ definiert hat, auf den Wert 0 gesunken. Das im Widerspruch dazu, dass
wir eine optimale Lösung betrachtet haben, in der maximal viele Variablen Null sind.
Also besteht G∗ nur aus einem Weg und somit haben wir eine {0, 1}-Lösung vorliegen.
Aufgabe 44:
Man kann das Problem durch einen bipartiten Graphen darstellen, wobei die m Anbieterorte und die n Nachfrageorte jeweils eine Knotenmenge bilden.
Für jede mögliche Kante (i, j) zwischen den Anbieterorten und den Nachfrageorten
führen wir eine Variable xi,j ein. Natürlich fordern wir xi,j ≥ 0.
Minimieren möchten wir damit
Pm Pn
i=1
j=1 ci,j
· xi,j .
Das Erfüllen aller Nachfragen bedeutet, dass für jedes j ∈ {1, . . . , n} die Ungleichung
x1j + x2j + · · · + xmj ≥ bj
gelten muss. Da kein Anbieterort mehr verteilen kann als dort hergestellt wird, haben
wir für jedes i ∈ {1, . . . , m} die Ungleichung xi1 + xi2 + · · · + xin ≤ ai , anders gelesen:
−xi1 − xi2 − · · · − xin ≥ −ai .
Die duale Formulierung sieht wie folgt aus: Für jede Ungleichung haben wir eine Variable, wir wählen die Variablen z1 , . . . , zn und u1 , . . . , um , also n + m Variablen.
Die Optimierungsaufgabe lautet nun:
max z1 · b1 + z2 · b2 + · · · + zn · bn − u1 · a1 − u2 · a2 − · · · − um · am .
Wir haben außerdem n · m Ungleichungen, und zwar für alle Paare i, j die Ungleichung
zj − ui ≤ cij .
Anschauliche Interpretation? Kann ich momentan mit keiner dienen. . .
Blatt 12
Aufgabe 45:
(Vorbemerkung: Eigentlich sollte es eher der Automorphismus“ statt die Automor”
”
phie“ heißen, ich finde aber, dass das zweite Wort besser klingt und außerdem gibt es
ja auch Isomorphien und nicht Isomorphismen.) Und noch eine Anmerkung: Ein sym”
metrischer Graph“ heißt in der Literatur typischerweise knotentransitiv“.
”
a) Zum Beispiel der Graph, der keine Kante enthält. Oder der Graph, der n/2 Kanten
enthält, die keinen Knoten gemeinsam haben (ein Matching). Oder der vollständige
bipartite Graph Kn,n (je n Knoten auf jeder Seite.) Oder, wenn G ein symmetrischer
Graph ist, die k-fache disjunkte Vereinigung von G. (Man nimmt k Exemplare von G.)
Oder: Der n-dimensionale Hyperwürfel: V = {0, 1}n und Kanten {v, w} ∈ E, wenn sich
v und w an genau einer Stelle unterscheiden. Oder: Wenn G ein symmetrischer Graph
ist, dann auch das Komplement von G.
In der Übungsgruppe kam der Verdacht auf, dass jeder zusammenhängende Graph, in
dem alle Knoten den gleichen Grad haben, symmetrisch sein könnte. Dies gilt nicht, wie
wir an folgendem Beispiel sehen: Wir zeichnen drei Kreise: einen der Länge 6 (C6 ), zwei
der Länge drei (also zwei Dreiecke A3 und B3 .) Nun verbinden wir matchingartig jeden
Knoten des Kreises C6 mit einem der sechs Knoten aus den beiden Dreiecken. Jetzt hat
jeder Knoten Grad 3, es liegt also ein 3-regulärer Graph vor. Zusammenhängend ist er
auch. Man sieht ein, dass der Graph nicht symmetrisch ist, wenn man beobachtet, dass
die Knoten aus A3 und B3 auf Kreisen der Länge drei liegen, die Knoten im C6 aber
nicht:
Sei v ein Knoten aus C6 . Er hat drei Nachbarn, nämlich zwei Knoten v1 und v2 aus C6 ,
sowie einen Knoten w aus einem Dreieck, o.B.d.A. aus A3 . Zwischen v1 und v2 gibt es
jedoch keine Kante und zwischen v1 und w bzw. v2 und w gibt es auch keine Kante. Also
liegt v auf keinem Kreis der Länge 3. Die Knoten sind also sehr wohl unterscheidbar.
b) Sei v = (v1 , . . . , vn ) eine Lösung des Vertex-Cover-LPs und π eine Automorphie von
G. Wir zeigen zunächst, dass dann auch π(v) := (vπ(1) , . . . , vπ(n) ) eine Lösung ist.
Sei daher {i, j} eine Kante aus G; die zugehörige lineare Bedingung ist xi + xj ≥ 1. Wir
wissen, dass vi + vj ≥ 1 ist. Zu zeigen ist, dass auch vπ(i) + vπ(j) ≥ 1 ist. Da π jedoch
eine Automorphie von G ist und somit π(E) = E gilt, gibt es in G auch die Kante
{π(i), π(j)} und somit gibt es im LP auch die Bedingung xπ(i) + xπ(j) ≥ 1, die durch v
erfüllt wird. Damit gilt vπ(i) + vπ(j) ≥ 1.
Die Aussage in der Aufgabe gilt. Um dies nachzuweisen, wählen wir unter allen optimalen
Lösungen eine, deren größte Komponente möglichst klein ist. (Da der Lösungsraum von
linearen Programmen immer kompakt ist, ist diese Wahl wohldefiniert.) Wir nennen
diese optimale Lösung v.
Seien min(v) bzw. max(v) die Werte der kleinsten bzw. größten Koordinate in v. Wenn
min(v) = max(v) ist, dann haben wir einen Vektor der Form (c, . . . , c) gefunden. Sei
also nun min(v) < max(v). O.B.d.A. befindet sich (nach Umnummerierung) min(v) an
der ersten Stelle in v.
Seien π1 , . . . , πn Automorphien mit πi (i) = 1. (Mit anderen Worten: πi ist so gewählt,
dass πi (v) seinen kleinsten Eintrag an der Stelle i hat.) Dann sind die n Vektoren
π1 (v), . . . , πn (v) auch Lösungen des Vertex-Cover-LPs.
Da konvexe Linearkombinationen von optimalen Lösungen eines linearen Programms
auch wieder optimale Lösungen sind, ist der Vektor vneu := (1/n) · (π1 (v) + · · · + πn (v))
auch eine optimale Lösung des Programms.
Betrachten wir die i-te Stelle in vneu . Jedes πj (v) hat als Permutation von v an der
i-ten Stelle nur Werte kleiner gleich max(v) stehen. Andererseits hat πi (v) an der i-ten
Stelle min(v) stehen. Da min(v) < max(v) ist, hat vneu also an der i-ten Stelle einen
Wert echt kleiner als max(v) stehen. Da dies für alle i gilt, ist max(vneu ) < max(v)
und somit hätten wir eine optimale Lösung gefunden, deren maximaler Eintrag noch
kleiner ist als der maximale Eintrag in v im Widerspruch zur Wahl von v. Also gilt
max(v) = min(v). Es gibt also eine optimale Lösung der Form (c, . . . , c). Wäre c > 1/2,
dann wäre (1/2, . . . , 1/2) eine bessere Lösung, also ist c ≤ 1/2. In c) sehen wir, dass
für nicht-leere symmetrische Graphen der Vektor (1/2, . . . , 1/2) immer eine optimale
Lösung ist.
Übrigens drängt sich auch hier eine Frage auf, die ich als Übungsaufgabe im Raum stehen lassen möchte, nämlich: Jede Automorphie lässt sich ja als Permutation auffassen.
Permutationen kann man als Produkte von speziellen Permutationen, so genannten Zyklen schreiben. (Z.B. die Permutation (1, 2, 3)(4, 5, 6) beschreibt, dass die 1 auf die 2
abgebildet wird, die 2 auf die 3 und diese auf die 1 abgebildet wird; ähnlich für 4,5, 6.)
Gibt es für symmetrische Graphen stets eine Automorphie, die ein Zyklus der Länge
n ist? Wäre das so, könnte man oben leichter argumentieren, indem man die Lösungsvektoren w1 := v; wi+1 = π(wi ) definiert und dann (1/n) · (w1 + · · · + wn ) betrachtet;
dieser Vektor ist nämlich direkt von der Form (c, . . . , c). Tipp: Die Aussage gilt nicht:
Kleinstes mir bekanntes Gegenbeispiel ist der Petersen-Graph (siehe Wikipedia).
c) Da es mindestens eine Kante gibt, gibt es eine Bedingung der Form xi + xj ≥ 1. Da es
eine optimale Lösung der Form (c, . . . , c) für 0 ≤ c ≤ 1/2 gibt, muss c = 1/2 sein. Also
ist (1/2, . . . , 1/2) eine optimale Lösung. Das kleinste Vertex Cover in einem nicht-leeren
symmetrischen Graphen enthält also immer mindestens n/2 Knoten.
Aufgabe 46:
Die Aussage gilt nicht. Wir betrachten zunächst den Graphen, der ein Dreieck ist. Dieser
führt zum LP x1 + x2 ≥ 1, x2 + x3 ≥ 1, x1 + x3 ≥ 1. Dieses LP hat, wie wir uns
schon früher überlegt haben, die optimale Lösung (1/2, 1/2, 1/2). Vermutung: Dies ist
ein Extrempunkt. Wie zeigt man, dass es sich dabei um einen Extrempunkt handelt?
Es reicht nicht aus, dass es eine optimale Lösung ist, da es auch optimale Lösungen
geben kann, die nicht Extrempunkte sind (wenn zum Beispiel die Zielfunktion eine
Konstante ist. Die Umkehrung gilt allerdings: Es gibt stets eine optimale Lösung, die
ein Extrempunkt ist. Das hilft uns allerdings hier nicht.)
Angenommen, man kann (1/2, 1/2, 1/2) = λ · v1 + (1 − λ) · v2 für zwei verschiedene
Lösungen v1 und v2 schreiben. O.B.d.A. unterscheiden sich v1 und v2 an der ersten
Stelle und o.B.d.A. ist v11 < 0.5 und v21 > 0.5. Dann folgt (Dreieck!), dass die beiden
anderen Komponenten in v1 größer als 0.5 sein müssen und somit, dass die beiden
anderen Komponenten in v2 kleiner als 0.5 sein müssen. (Letzteres weil die konvexe
Linearkombination der beiden sonst eine Zahl größer als 0.5 an den entsprechenden
Stellen hätte, es muss aber 1/2 herauskommen). Dann kann aber v2 keine Lösung sein,
weil zweite und dritte Stelle sich zu etwas summieren, das kleiner als 1 ist.
Also: (1/2, 1/2, 1/2) ist Extrempunkt.
Nun gehen wir über zu dem folgenden 3-uniformen Hypergraphen: Es gibt einen weiteren
Knoten (repräsentiert durch z) und er ist durch die Kanten {z, 1, 2}, {z, 1, 3}, {z, 2, 3}
und somit die Nebenbedingungen
z + x1 + x2 ≥ 1,
z + x2 + x3 ≥ 1,
z + x 1 + x3 ≥ 1
gegeben. Der Punkt (0, 1/2, 1/2, 1/2) ist nun auch Extrempunkt. Erstens ist er Lösung
des LPs (trivial zu sehen). Zweitens: Wenn man ihn schreibt als konvexe Linearkombination von zwei verschiedenen Lösungen p1 und p2 , dann müssen diese beiden an der
ersten Stelle eine Null haben, da nichtnegative Koordinaten ausgeschlossen sind. Sie
sind also Lösungen des Dreiecks-LPs. Außerdem ist (1/2, 1/2, 1/2) eine konvexe Linearkombination der hinteren drei Stellen von p1 und p2 und somit wäre (1/2, 1/2, 1/2) kein
Extrempunkt des vorhin besprochenen LPs für das Dreieck. Widerspruch.
Also ist der Punkt (0, 1/2, 1/2, 1/2) Extrempunkt, aber offensichtlich sind nicht alle
seine Koordinaten ganzzahlige Vielfache von 1/3.
Aufgabe 47:
Aufgabenteile a) und c) gestrichen.
b) Wir haben im primalen Programm m Bedingungen für die Klauseln sowie m Bedingungen zj ≤ 1 und n Bedingungen xi ≤ 1. (Die restlichen sind implizite Nichtnegativitätsbedingungen.) Die Klauselbedingungen schreiben wir zunächst um. Wir führen
dies am Beispiel der Klausel x1 ∨ x2 vor. Die Bedingung ist −x1 + x2 + zj ≤ 1; im
allgemeinen Fall ist sie
X
X
xi + zj ≤ negj ,
xi +
−
i∈I +
i∈I −
wobei I + die Menge der Indizes der positiv in der Klausel vorkommenden Variablen ist;
I − analog für die negativ vorkommenden. neg j ist die Anzahl negativer Literale in der
j-ten Klausel.
Also haben wir im dualen Programm m + m + n Variablen, die wir
y 1 , . . . , y m , g 1 , . . . , g m , h1 , . . . , h n
nennen. Die Zielfunktion ist
min neg1 · y1 + · · · + negm · ym + g1 + · · · + gm + h1 + · · · + hn .
Die Nebenbedingungen sind:
Für j = 1 bis m:P
y j + gj ≥ 1
P
Für i = 1 bis n: j:xi neg. in Cj yj − j:xi pos. in Cj yj + hi ≥ 0
Implizit natürlich wieder alle Nichtnegativitätsbedingungen.
Aufgabe 48:
Für jede solche Instanz gibt es eine Variablenbelegung, die alle Klauseln erfüllt. Hier
eine Lösung, die von der Übungsgruppe vorgeschlagen wurde und die direkt auch einen
Algorithmus beinhaltet:
Induktionsaussage: Gegeben n Klauseln über n Variablen, die die in der Aufgabe beschriebene Form haben. Es gilt: Man kann durch das Setzen von i Variablen die ersten i
Klauseln alle gleichzeitig erfüllen: Für i = 1 ist die Aussage offensichtlich wahr, da man
die erste Klausel xj (bzw. xj ) durch xj := 1 (bzw. xj := 0) erfüllen kann.
Angenommen, man hat bereits die ersten i Klauseln durch das Setzen von i Variablen
erfüllt.
Fall 1): Die i + 1-te Klausel ist bereits dadurch erfüllt. Dann brauchen wir keine zusätzliche Variable zu setzen.
Fall 2): Sonst. Da wir nur i Variablen gesetzt haben und die i + 1-te Klausel Länge i + 1
hat, gibt es eine Variable, die in dieser Klausel vorkommt und die noch nicht gesetzt
wurde. Wir setzen diese Variable so, dass die Klausel erfüllt wird.
Dieses induktive Argument übersetzt sich natürlich direkt in einen iterativen Algorithmus.
Hier nun ein anderes (probabilistisches) Argument. (Es hat den Vorteil, auch in anderen
Situationen zu funktionieren.)
Man würfelt eine beliebige Variablenbelegung aus, indem jede Variable mit Wahrscheinlichkeit 1/2 auf 1 und ansonsten auf 0 gesetzt wird. Eine Klausel der Länge i ist nur mit
Wahrscheinlichkeit (1/2)i nicht erfüllt. Wegen der Linearität des Erwartungswerts ist
die erwartete Anzahl an nicht erfüllten Klauseln (1/2) + (1/4) + (1/8) + · · · + (1/2n ) =
1 − 1/2n < 1. Da die Anzahl an nicht erfüllten Klauseln stets eine natürliche Zahl ist,
muss es eine Belegung geben, die 0 Klauseln nicht erfüllt, also alle Klauseln erfüllt.
Auf der anderen Seite kann es sein, dass es nur genau eine erfüllende Belegung gibt. Ein
Beispiel für eine solche Klauselmenge ist die folgende:
x1
x1 ∨ x 2
x1 ∨ x 2 ∨ x 3
... ...
x1 ∨ x 2 ∨ · · · ∨ x n
Hier ist die Belegung (1, . . . , 1) die einzige erfüllende Belegung und die Wahrscheinlichkeit, diese auszuwürfeln, ist 2−n . Also kann man die erfüllende Belegung nicht auf diese
Art und Weise finden.
Eine Möglichkeit für einen Approximationsalgorithmus ist es trotzdem, alle Variablen
auszuwürfeln. Die Wahrscheinlichkeit, dass durch die entstehende Belegung zwei oder
mehr Klauseln nicht erfüllt sind, ist nach der Markoffschen Ungleichung kleiner als (1/2).
Also erhält man mit Wahrscheinlichkeit mindestens (1/2) eine Belegung, die mindestens n − 1 Klauseln erfüllt. Und somit muss man im Erwartungswert höchstens zwei
Belegungen auswürfeln, um eine Belegung zu erhalten, die mindestens n − 1 Klauseln
erfüllt.
Damit hätte man einen randomisierten Algorithmus mit polynomieller erwarteter Lauf1
zeit, der eine Güte von n/(n − 1) = 1 + n−1
hat. Als Antwort in einer Abgabe hätte
das schon genügt. Kann man den randomisierten Algorithmus derandomisieren, um eine
Belegung, die alle Klauseln erfüllt, auch in Polynomialzeit zu finden?
Zu diesem Zweck verallgemeinern wir das Auswürfeln: Jede Variable xj wird unabhängig
von den anderen Variablen mit Wahrscheinlichkeit pj auf 1 gesetzt. fi (p1 , . . . , pn ) sei die
Wahrscheinlichkeit, dass Klausel i nicht erfüllt ist. Wenn zum Beispiel Ci = x1 ∨ x2
ist, dann ist fi (p1 , p2 ) = (1 − p1 ) · p2 . Jedes fi ist eine lineare Funktion, damit ist
auch die Summe F (p1 , . . . , pn ) aller fi (p1 , . . . , pn ) eine lineare Funktion. F beschreibt
die erwartete Anzahl an nicht erfüllten Klauseln.
Für lineare Funktionen ist
F (1, p2 , . . . , pn ) ≤ F (p1 , p2 , . . . , pn ) oder F (0, p2 , . . . , pn ) ≤ F (p1 , p2 , . . . , pn ).
Ändert man p1 entsprechend ab, dass der F -Wert höchstens kleiner wird und iteriert
man das Ganze, so erhält man am Schluss Werte a1 , . . . , an ∈ {0, 1} mit F (a1 , . . . , an ) ≤
F (p1 , . . . , pn ). Man hat also eine Variablenbelegung erhalten, die weniger als eine Klausel
nicht erfüllt, also alle Klauseln erfüllt.
Blatt 13
Aufgabe 49:
In beiden Fällen gibt es kein solches c. Der Grund ist einfach. Betrachte eine Menge
von m Klauseln, in der jede Klausel ein Oder von 11 positiven Literalen ist. Damit
ist der Vektor (1/11, . . . , 1/11) eine optimale Lösung des linearen Programms, da sein
Zielfunktionswert m ist, der nicht zu überbieten ist. Alle DR(δ) mit den gegebenen
Werten liefern immer nur den Nullvektor zurück, der offensichtlich keine einzige Klausel
erfüllt. Da alle Klauseln nur positive Literale enthalten, erfüllt die Belegung (1, . . . , 1)
alle Klauseln und damit ist m der optimale Zielfunktionswert, 0 aber der Wert der
Zielfunktion auf unserer berechneten Lösung.
Aufgabe 50:
a) Man verwendet Indikatorvariablen xi , die angeben, ob die Menge T das Element
i enthält oder nicht. Die Zielfunktion ist min x1 + · · · + xn , für jede Menge S =
{1, . . . , k} (Beispiel!) hat man eine Nebenbedingung x1 + · · · + xk ≥ 1 sowie die
Nebenbedingungen xi ≤ 1. Die Nebenbedingungen enthalten maximal f Variablen,
in jeder erfüllten Nebenbedingung gibt es also mindestens eine Variable mit Wert
mindestens 1/f .
Deterministisches Runden mit Schwellwert 1/f liefert also (siehe Set Cover) eine
Lösung, die höchstens um Faktor f neben dem Optimum liegt.
b) Hitting Set ist eine Verallgemeinerung des Vertex-Cover-Problems: Dort haben
alle Mengen Kardinalität 2. Für Vertex Cover gab es den Matching-Algorithmus,
der in Greedy-Manier vorging und Güte 2 erzielte. Hier gehen wir analog vor: Wir
wählen der Reihe nach zueinander paarweise disjunkte Mengen Si1 , . . . , Sir , bis
keine weitere Menge mehr gewählt werden kann. Schließlich wählt man als Hitting
Set die Vereinigung dieser Mengen. Dieser Hitting Set enthält maximal r · f viele
Elemente. Jeder Hitting Set muss aber mindestens r Elemente enthalten, denn
schließlich muss aus jedem Sij ein Element gewählt werden und diese Mengen sind
alle disjunkt. Wir erhalten eine Güte von f .
Aufgabe 51:
Da es höchstens 2k (also konstant viele) Klauselteilmengen der Klauselmenge gibt, kann
man alle Kombinationen durchprobieren und die entsprechende Klauselteilmenge daraufhin überprüfen, ob sie (komplett) erfüllbar ist. Man erhält so die größte erfüllbare
Klauselteilmenge.
Um die Erfüllbarkeit zu überprüfen, braucht man nur die Klauseln auszumultiplizieren. Dies liefert ein ODER von höchstens nk vielen Monomen. Wenn ein Monom widersprüchliche Literale enthält, wird es gestrichen. Wenn nach Streichung irgendein Monom
übrig bleibt, dann ist die Klauselmenge erfüllbar, man braucht ja nur die Variablen in
dem Monom entsprechend zu setzen, um es zu erfüllen. Wir erhalten eine Laufzeit von
im Wesentlichen 2k · nk , was polynomiell ist, wenn k eine Konstante ist.
Aufgabe 52:
Die Gesamtzahl aller Klauseln sei m. Die erste Klausel davon sei die Klausel der Länge
1 und dies sei o.B.d.A. die Klausel x1 . Da alle Klauseln außer der ersten die Länge mindestens drei haben, können wir durch randomisiertes Runden (bzw. potenzialbasiertes
deterministisches Runden) mit (1/2, . . . , 1/2) eine Variablenbelegung berechnen, die (im
Erwartungswert) (1/2)+7/8·(m−1) ≥ 7/8·(m−1) viele Klauseln der Länge mindestens
drei erfüllt. Da maximal m Klauseln erfüllbar sind, haben wir einen Approximationsalgorithmus mit erwarteter Güte
m/((7/8) · (m − 1)) = (8/7) · (1 +
1
).
m−1
Dies ist ein Wert, der umso näher an 8/7 liegt, je größer m ist. Wie können wir garantieren, dass die Klauselanzahl m groß genug ist?
Wir gehen wie folgt vor: Sei k eine Konstante. Falls m < k, so verwenden wir den
Algorithmus aus Aufgabe 51 und lösen das Problem in Polynomialzeit exakt.
Ansonsten wissen wir, dass m ≥ k ist. Wir starten den gerade neu entworfenen Algo1
).
rithmus und erhalten eine Belegung mit Güte 87 · (1 + k−1
Da man k beliebig groß wählen kann, erhält man eine (erwartete) Güte, die beliebig
dicht an 8/7 liegt.
Blatt 14
Aufgabe 53:
Wir zeigen zunächst, dass man das SATCC-Problem in Polynomialzeit lösen kann. Sei
t die Anzahl Einsen, die die erfüllende Variablenbelegung haben soll.
Da wir nur konstant viele Klauseln gegeben haben, können wir diese wieder ausmultiplizieren. Wir erhalten so eine Darstellung der booleschen Funktion f als ODER von
höchstens nk Monomen. (Ein Monom ist ein UND von Literalen.)
Es gibt eine erfüllende Belegung mit t Einsen genau dann, wenn es eine Belegung mit
t Einsen gibt, die (mindestens) eins der Monome erfüllt. Wie entscheidet man für ein
Monom, ob es durch eine Belegung mit genau t Einsen erfüllt werden kann? Damit
ein Monom aus `− negativen Literalen und `+ positiven Literalen erfüllt ist, muss die
Belegung an den entsprechenden `− Stellen eine 0 stehen haben und an den `+ Stellen
eine 1. Restliche Positionen können beliebig gewählt werden. Also gibt es für jede Zahl
t mit `+ ≤ t ≤ n − `− eine Belegung mit t Einsen, die das Monom erfüllt, für andere t
gibt es keine solche Belegung.
Nun muss man nur für jedes der höchstens nk Monome überprüfen, ob das vorgegebene t
in das Intervall zum Monom fällt. Damit lässt sich SATCC in Polynomialzeit lösen. Um
MAXSATCC in Polynomialzeit zu lösen, muss man nur noch alle möglichen Teilmengen
der Klauselmenge durchlaufen und für diese SATCC entscheiden. Es gibt nur 2k , also
konstant viele solche Teilmengen.
Aufgabe 54:
Sei v ein Vektor mit k Einsen, der T der Klauseln erfüllt. O.B.d.A. seien die Einsen in
v an den ersten k Positionen und die Klauseln seien so durchnumeriert, dass C1 , . . . , CT
die erfüllten Klauseln sind. Seien v1 , . . . , vk die Vektoren vi , die sich ergeben, wenn man
v an Stelle i von Eins auf Null flippt.
Angenommen, wir haben eine Klausel C, die durch v erfüllt wird, aber durch vi nicht
mehr. Dann enthält C die Variable xi und ist somit durch alle Vektoren {v1 , . . . , vn }\{vi }
erfüllt, da diese ja an Stelle i eine Eins stehen haben. Nun benutzen wir wieder das
Schubfachprinzip. Sichtweise: Matrix mit Zeilen, die zu den Klauseln Cj korrespondieren
und Spalten, die zu den Belegungen vi korrespondieren. Eine Markierung in der Matrix
überall dort, wo Belegung vj die Klausel Ci nicht erfüllt. Wir haben gerade gezeigt,
dass pro Zeile maximal eine Markierung vorkommt. Nach dem Schubfachprinzip gibt es
eine Spalte, die höchstens T /k viele Markierungen enthält, also eine Belegung vi , die
höchstens T /k viele Klauseln nicht erfüllt. Also erfüllt dieses vi mindestens T − T /k =
T · (1 − 1/k) Klauseln.
Für die Verallgemeinerung ersetzen wir die mindestens (1 − 1/k) · T . . .“ durch die
”
”
mindestens (1 − d/k) · T . . .“.
Hier gibt es nun zwei Argumente: Argument 1: Man betrachtet alle k − d-elementigen
Teilmengen von {1, . . . , k}. Gemäß der Gleichverteilung wählt man eine von diesen aus
und belässt nur die zugehörigen Variablen auf 1. So erhält man ein zufälliges v 0 mit k − d
Einsen. Für eine Klausel C aus den T Klauseln ist die Wahrscheinlichkeit, dass sie durch
v 0 nicht mehr erfüllt ist, höchstens d/k: Sie enthält nämlich maximal ein xi ∈ {x1 , . . . , xk }
und die Wahrscheinlichkeit, dass dieses xi auf 0 geflippt wird, ist gleich d/k. Also ist
jedes C mit Wahrscheinlichkeit mindestens 1 − d/k erfüllt und der Erwartungswert der
Anzahl erfüllter Klauseln ist mindestens T · (1 − d/k). Damit gibt es eine Belegung, die
mindestens so viele Klauseln erfüllt.
Argument 2: Man iteriert das Argument für den Fall d = 1. Dann erhält man, dass ein
v 0 mit k − d Einsen existiert, das mindestens
(1 − (1/k)) · (1 − (1/(k − 1))) · · · (1 − (1/(k − d + 1))) · T
k−d
k−1 k−2
·
···
·T
=
k
k−1
k−d+1
) · T = (1 − (d/k)) · T.
Klauseln erfüllt; diese Zahl ist gleich ( k−d
k
Aufgabe 55:
Der Ansatz funktioniert so nicht. Einerseits müssten wir die Bedingung zj ≤ 1 entfernen,
da nicht gleichzeitig zj ≥ x1 + x2 + x3 sein kann, wenn zum Beispiel x1 = x2 = x3 = 1
ist.
Dadurch ist aber das, was die zj -Variable misst, eventuell weit weg von der tatsächlichen
Wahrscheinlichkeit, dass Klausel j erfüllt ist und die Zielfunktion somit weit weg von
dem Erwartungswert der erfüllten Anzahl an Klauseln.
Aufgabe 56:
a) Die Aussagen gelten beide nicht. Sei M = [0, 1]n . f = x1 ist quasikonvex, g = x2 ist
quasikonvex. Das Produkt x1 · x2 ist es nicht, wie man unter b) sieht.
Für die Addition betrachten wir n = 1. Sei f (0) = 0, f (1) = 11 und f (a) = 6 für alle
anderen a ∈]0, 1[. Dann ist wegen der Monotonie f quasikonvex.
Definiere g(0) = 11, g(1) = 0, g(a) = 6 sonst. Dann ist wegen der fallenden Monotonie g
quasikonvex.
f + g erfüllt (f + g)(0) = 11, (f + g)(1) = 11, (f + g)(a) = 12 sonst. Damit ist f + g
nicht mehr quasikonvex.
b) Die Funktion f = x1 · x2 ist ein multilineares Polynom. M = [0, 1]2 ist eine konvexe
Menge. Wir wählen v = (0, 1) und w = (1, 0), dann sind beide in M . Andererseits ist
f (v) = f (w) = 0. Der Punkt (1/2, 1/2) liegt auf der Strecke zwischen v und w und es
ist f (1/2, 1/2) = 1/4 > 0. Also ist f nicht quasikonvex.
Die Funktion f (x1 ) = x21 ist quasikonvex, da sie monoton ist. Sie ist kein multilineares
Polynom.
c) So einen Punkt gibt es. Es ist n ≥ 2, da die Aussage sonst trivial ist. Wenn p nicht
aus {0, 1}n ist, dann gibt es zwei nicht-ganzzahlige Komponenten in p. Seien o.B.d.A.
die ersten beiden Komponenten p1 und p2 nicht-ganzzahlig.
Fall 1): s := p1 + p2 ≤ 1. Dann betrachte die beiden Vektoren v := (s, 0, p3 , . . . , pn ) und
w := (0, s, p3 , . . . , pn ). Diese sind aus M . p ist konvexe Linearkombination der beiden,
wie wir nun zeigen: Setze λ = p1 /s, dann ist
λ · v + (1 − λ) · w = (λ · s, (1 − λ) · s, p3 , . . . , pn )
= (p1 , (s/s − λ) · s, p3 , . . . , pn )
= (p1 , (s/s − p1 /s) · s, p3 , . . . , pn )
= (p1 , s − p1 , p3 , . . . , pn )
= (p1 , p2 , p3 , . . . , pn ).
Da f quasikonvex ist, ist f (v) ≥ f (p) oder f (w) ≥ f (p). Man hat mindestens eine
nicht-ganzzahlige Stelle entfernt, die Komponentensumme ist erhalten geblieben.
Fall 2): s := p1 + p2 > 1. Nun setzen wir v := (s − 1, 1, p3 , . . . , pn ) und w := (1, s −
1, p3 , . . . , pn ). Diese sind aus M . Analog zu Fall 1) zeigt man, dass p konvexe Linearkombination von v und w ist. Da f quasikonvex ist, ist f (v) ≥ f (p) oder f (w) ≥ f (p).
Man hat mindestens eine nicht-ganzzahlige Stelle entfernt, die Komponentensumme ist
erhalten geblieben.
Durch Iterieren kann man nun alle Komponenten ganzzahlig bekommen. Selbstverständlich übersetzt sich obiges Argument direkt in einen Algorithmus.
Herunterladen