Musterlösung

Werbung
K a r l s ru h e r I n s t i t u t f ü r T e c h n o l o g i e
Institut für Theoretische Informatik
Prof. Dr. Dennis Hofheinz
Lukas Barth, Lisa Kohl
11. Übungsblatt zu Algorithmen I im SoSe 2016
https://crypto.iti.kit.edu/index.php?id=algo-sose16
{lisa.kohl,lukas.barth}@kit.edu
Musterlösungen
Aufgabe 1
(Lineare Programmierung, 4 Punkte)
Dem ebenso genialen wie empfindlichen Superbösewicht Doktor Meta ist zu Ohren gekommen, dass
ihn nicht alle Studenten mögen. Nun möchte er herausfinden, um wen es sich dabei handelt. Er hat
dazu nicht nur Røbøt, sondern mittlerweile ein ganzes Heer von insgesamt I ebenso folgsamen wie
fehlkonstruierten Robotern Ri zur Verfügung. Nach einer Anzahl von Tests hat er für J verschiedene
Arten von Arbeit Aj herausgefunden, wieviel es bringt, Roboter Ri die Arbeit Aj eine Stunde lang
ausführen zu lassen (dieser Wert sei mit aij bezeichnet). Die Roboter laufen im Batteriebetrieb und
müssen nach vier Stunden wieder aufgeladen werden. Doktor Meta möchte nun herausfinden, wie er die
zu erledigenden Arbeiten optimal an seine Roboter verteilen kann, sodass der Wertgewinn maximal
ist. Zwischendurch soll dabei kein Akku aufgeladen werden und am Ende soll xij (für 1 ≤ i ≤ I und
1 ≤ j ≤ J) dem Anteil von Ri ’s Zeit an der Aufgabe Aj entsprechen. Die Aufgabe Aj ist erledigt, sobald
zj Stunden an ihr gearbeitet wurde (egal von welchem Roboter), danach bringt das Weiterarbeiten an
dieser Aufgabe keinen zusätzlichen Wertgewinn.
Beispielsweise sei für R1 = Røbøt der Wert für die Aufgabe A1 „finde einen Weg“ mit a11 = 0, 1 gering
und die Aufgabe A2 „führe einen Algorithmus aus“ mit a12 = 10 vergleichsweise groß. Røbøt eine halbe
Stunde daran arbeiten zu lassen Wege zu finden und eine halbe Stunde daran Algorithmen auszuführen
(also x11 = x12 = 0, 5) würde dementsprechend nur einen Wertgewinn von 0, 1 · 0, 5 + 10 · 0, 5 = 5, 05
bringen, Røbøt stattdessen eine Stunde Algorithmen ausführen zu lassen dagegen einen Gewinn von 10,
hierbei z1 ≥ 0, 5 und z2 ≥ 1 angenommen.
Stellen Sie ein geeignetes Lineares Programm auf, dass dieses Problem formalisiert und Doktor Meta hilft,
auch den letzten Studenten von seiner Liebenswürdigkeit zu überzeugen. Überlegen Sie dabei zunächst
genau, welche Nebenbedingungen (Constraints) für xij gelten müssen. Wieviele gibt es insgesamt?
Erklären Sie jeweils die Bedeutung der aufgestellten (Un-)Gleichungen.
Musterlösung:
Wir müssen für jede der im Text genannten Bedingungen eine (Un-)Gleichung aufstellen:
Gesamtzeit pro Roboter Zunächst müssen wir sicherstellen, dass jeder Roboter maximal vier Stunden
und minimal null Stunden arbeitet. Wir gehen dabei davon aus, dass die Werte von xij in Stunden
zu interpretieren sind:
X
∀i ∈ {1, . . . I} :
xij ≤ 4
j∈{1,...J}
∀i ∈ {1, . . . I}
∀j ∈ {1, . . . J} : xij ≥ 0
Gesamtzeit pro Aufgabe Weiterhin müssen wir sicherstellen, dass keine Aufgabe länger als sinnvoll
bearbeitet wird:
X
∀j ∈ {1, . . . J} :
xij ≤ zj
i∈{1,...I}
Damit benötigen wir also drei Arten von Nebenbedingungen. Bei I Robotern und J Aufgaben ergeben
sich insgesamt IJ + I + J Nebenbedingungen.
Zu einem linearen Programm fehlt abschließend noch die Zielfunktion:
1
Zielfunktion Ziel ist es, die Summe des durch die investierte Arbeit gewonnenen Wertes zu maximieren,
also:
X
X
max
xij aij
i∈{1,...I} j∈{1,...J}
Aufgabe 2
(V e rt e x C ov e r, 2 + 5 + 1 Punkte und bis zu 3 Bonuspunkte)
Wir betrachten das in der Übung vorgestellte Problem V e rt e x C ov e r:
Gegeben ist ein ungerichteter Graph G = (V, E).
Gesucht ist eine minimale Menge S ⊆ V , sodass ∀{u, v} ∈ E : {u, v} ∩ S 6= ∅.
a) Betrachten Sie den in der Übung vorgestellten Algorithmus Approx-Vertex-Cover. Geben Sie einen
Graphen an, bei dem dieser Algorithmus immer eine nicht-optimale Lösung ausgibt.
b) Entwerfen Sie einen effizienten Greedy-Algorithmus, der des V e rt e x C ov e r-Problem auf
Bäumen in Linearzeit optimal löst. Begründen Sie, warum Ihr Algorithmus funktioniert.
Hinweis: Für Algorithmen, die eine schlechtere Zeitkomplexität aufweisen, werden unter Umständen
Teilpunkte vergeben.
c) Der leicht verwirrte Professor Peter R. Oblem schlägt folgenden Algorithmus zur Lösung des
V e rt e x C ov e r-Problems vor: Wähle immer den Knoten mit höchstem Grad (d.h. der größten
Anzahl von inzidenten Kanten) aus, füge ihn zum Vertex Cover hinzu, und lösche ihn samt aller
seiner Kanten. Wiederhole, bis der Graph leer ist.
c1) Zeigen Sie (z.B. mittels eines Beispiels), dass der vorgeschlagene Algorithmus nicht optimal
ist.
Hinweis: Diese Teilaufgabe gibt einen Punkt.
c2) Zeigen Sie, dass es sich bei dem Algorithmus auch nicht um eine 1, 5-Approximation handelt,
d.h. dass es Fälle gibt, in denen das berechnete Vertex Cover um mehr als einen Faktor 1, 5
größer ist als das optimale Vertex Cover.
Hinweis: Diese Teilaufgabe gibt 2 Bonuspunkte.
c3) Zeigen Sie, dass es sich bei dem Algorithmus nicht einmal um eine 2-Approximation handelt,
d.h. dass es Fälle gibt, in denen das berechnete Vertex Cover um mehr als einen Faktor 2
größer ist als das optimale Vertex Cover.
Hinweis: Diese Teilaufgabe löst offensichtlich auch Teilaufgabe c2, und gibt zusätzlich zu c2)
einen weiteren Bonuspunkt.
Musterlösung:
a) Der Graph, der nur aus zwei verbundenen Knoten besteht, ist ein Beispiel: Da nur eine Kante existiert, wird diese ausgewählt und beide Knoten werden ins Vertex Cover aufgenommen.
Offensichtlich würde aber einer von beiden Knoten reichen.
b) Der Algorithmus geht vor wie folgt:
Function Tree-Vertex-Cover(T = (V, E) : T ree)
C = {}
while T is not empty do
L = T.leaves()
P = {}
foreach v in L do
P = P ∪ {v.parent}
T.delete(v)
2
(a) Gegenbeispiel für c1
(b) Gegenbeispiel für c2
(c) Gegenbeispiel für c3
Abbildung 1: Graphen für Aufgabe 2
C =C ∪P
foreach v in P do
T.delete(v)
return C
Der Algorithmus funktioniert also so, dass schrittweise immer alle Elternknoten aller Blätter
eingesammelt, dem Vertex Cover hinzugefügt und dann Elternknoten sowie Blätter aus dem Baum
entfernt werden. Die Korrektheit ist wie folgt zu sehen:
– Überdeckung aller Kanten: Es werden nur Kanten aus dem Graphen gelöscht, die inzident zu
einem der ausgewählten Elternknoten waren. Da diese Knoten Teil des Vertex Covers sind,
sind gelöschte Kanten immer überdeckt. Der Algorithmus läuft so lange, bis der Graph leer
ist. Damit sind am Ende alle Kanten überdeckt.
– Minimalität: Sei v ein Blatt und u der Elternknoten von v zu irgendeinem Zeitpunkt. Es ist
klar, dass entweder u oder v Teil des minimalen Vertex Covers sein müssen. Angenommen,
v sei Teil des minimales Vertex Covers. Da v keine Kante außer der zwischen u und v
abdeckt, kann man problemlos v durch u ersetzen. Damit ist die Wahl der Elternknoten
immer ausreichend und minimal.
c1) Betrachte den in Abbildung 1a abgebildeten Graphen. Der zentrale Knoten wird als erstes
ausgewählt, und danach müssen noch drei weitere Knoten ins Vertex Cover aufgenommen werden.
Drei Knoten insgesamt würden aber reichen.
c2) Betrachte den in Abbildung 1b abgebildeten Graphen. Die Knoten lassen sich hier in drei Gruppen
aufteilen: Links, Mitte und Rechts. Dabei sind alle linken Knoten mit allen mittleren Knoten
3
verbunden, und jeweils ein mittlerer Knoten mit jeweils einem rechten Knoten. Die linken Knoten
haben alle Grad 5, die mittleren Knoten Grad 4, die rechten Knoten Grad 1. Der Algorithmus wird
nun zunächst die drei linken Knoten auswählen und entfernen, und muss danach noch fünf weitere
Knoten ins Vertex Cover aufnehmen. Insgesamt hat das Vertex Cover also Größe 8. Ein minimales
Vertex Cover bestünde nur aus den mittleren Knoten, hätte also Größe 5. Es gilt 8/5 > 1, 5, damit
ist die Behauptung gezeigt.
c3) Betrachte den in Abbildung 1c abgebildeten Graphen. Die Knoten können hier in obere und
untere Knoten aufgeteilt werden. Zur besseren Übersicht haben wir die oberen Knoten sowie ihre
Kanten unterschiedlich eingefärbt. Darüber hinaus haben die Farben keine Bedeutung. Die fünf
oberen Knoten haben Grade (5, 5, 5, 5, 5), die unteren Knoten haben Grade (von links nach rechts)
(5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1). Die Idee ist nun zu zeigen, dass der Algorithmus alle unteren Knoten
auswählt, wobei es dazu kommen kann, dass der Knoten mit dem größten Grad nicht eindeutig
ist, und der Algorithmus „unglücklich“ zwischen diesen auswählt:
Zunächst wählt der Algorithmus den unteren Knoten mit Grad 5 und entfernt diesen. Die Grade
der oberen Knoten sinken damit auf (4, 4, 4, 4, 4) und der neue Maximalgrad ist 4. Jetzt wählt
der Algorithmus den zweiten unteren Knoten (Grad 4) und entfernt ihn. Die Grade der oberen
Knoten sinken damit auf (4, 3, 3, 3, 3). Der Algorithmus wählt nun den dritten unteren Knoten
(Grad 4), womit die Grade der oberen Knoten auf (3, 3, 2, 2, 2) sinken. Der neue Maximalgrad ist
3. Als nächstes wird der vierte der unteren Knoten (mit Grad 3) gewählt, die Grade der oberen
Knoten sinken auf (2, 2, 2, 2, 1), neuer Maximalgrad ist 2. Es wird der fünfte untere Knoten (Grad
2) gewählt, die oberen Grade sinken auf (2, 2, 1, 1, 1). Der sechste untere Knoten wird gewählt,
die oberen Grade sinken auf (1, 1, 1, 1, 1). Nun müssen noch fünf weitere Knoten gewählt werden
(entweder von oben oder unten), somit werden insgesamt 11 Knoten ausgewählt. Es ist aber klar,
dass die fünf oberen Knoten alleine ein Vertex Cover bilden. Damit ist das berechnete Vertex
Cover um mehr als einen Faktor zwei größer als ein minimales Vertex Cover.
Aufgabe 3
(Steinerbäume - Güte von Approximationsalgorithmen, 7 Punkte)
Wir betrachten den in der Übung vorgestellten Approximationsalgorithmus zur Konstruktion von
Steinerbäumen (10. Übung, Folie 67).
a) Geben Sie einen geeigneten ungerichteten zusammenhängender Graph G = (V, E) und eine Menge
S ⊆ V mit |S| = 4 an für den das Folgende gilt: Es gibt einen Steinerbaum, der mit Hilfe des
Algorithmus aus der Vorlesung konstruiert wurde und dessen Gesamtgewicht genau dem 1, 5fachen des Gesamtgewichts eines optimalen Steinerbaums entspricht. Geben Sie den konstruierten
und einen optimalen Steinerbaum an.
b) Sei T = (V, E) ein ungerichteter Baum mit m = |E| Kanten. Zeigen Sie: Es gibt einen geschlossenen
Pfad P = hv0 , v1 , . . . , v2m i mit v2m = v0 in T , für den gilt
i.) jede Kante von T wird von P genau zweimal durchlaufen,
ii.) jedes Blatt von T kommt genau einmal in P vor (wobei der Anfangs- bzw. Endpunkt v0 = v2m
als ein Vorkommen in P zählt) und
iii.) wenn vi und vj zwei Blätter in P sind, zwischen denen kein anderes Blatt in P vorkommt,
dann ist der Teilpfad vi , vi+1 , . . . , vj ein einfacher Pfad (d.h. jede Kante wird höchstens
einmal durchlaufen).
c) Sei G = (V, E) ein ungerichter, zusammenhängender Graph und copt das Gewicht eines optimalen
Steinerbaums für S ⊆ V . Zeigen Sie, dass der in der
Übungvorgestellte Algorithmus einen
1
Steinerbaum mit Gewicht calg liefert, sodass calg ≤ 2 · 1 −
· copt gilt.
|S|
4
Musterlösung:
a) Sei S = {A, B, C, D}. Links ist einen Steinerbaum für S mit Gewicht 24 (= 1, 5·16) hervorgehoben,
der mögliches Ergebnis des Algorithmus aus der Vorlesung ist. Rechts ist ein optimaler Steinerbaum
mit Gewicht 16 eingezeichnet.
B
8
A
8
4
4
8
B
E
C
4
4
8
A
4
8
8
D
8
4
E
C
4
4
8
D
b) Wir beweisen die Behauptung induktiv.
Induktionsanfang: Offensichtlich gibt es so einen Pfad für einen Baum, der nur aus einem
Knoten v besteht (P = hv, vi erfüllt alle gewünschten Eigenschaften).
Induktionsvoraussetzung: Sei n ∈ N. Für alle Bäume T , die aus höchstens n − 1 Knoten
bestehen, existiere ein Pfad der gewünschten Form.
Induktionsschritt: Sei nun ein Baum T mit n Knoten gegeben. Wir entfernen aus T ein Blatt
v ? (das heißt einen Knoten mit Knotengrad 1 - da T ein Baum mit n > 1 Blättern ist existiert
so ein Knoten). Sei T 0 der erhaltene Baum und v 0 der Knoten, für den im ursprünglichen Baum
T eine Kante {v ? , v 0 } existiert hat. Nach Induktionsvoraussetzung existiert ein Pfad P 0 in T 0 ,
der die gewünschten Eigenschaften erfüllt. Wir fügen nun nach dem ersten Auftreten von v 0
in P 0 zusätzlich v ? , v 0 ein und nennen den erhaltenen Pfad P . Es bleibt zu zeigen, dass P die
gewünschten Eigenschaften erfüllt.
– Zunächst stimmt die Länge von P , da für eine zusätzliche Kante zwei zusätzliche Knoten
hinzugefügt wurden.
– Außerdem wird die Kante {v ? , v 0 } genau zweimal durchlaufen (wie alle anderen Kanten auch
nach Induktionsvoraussetzung), also ist i.) erfüllt.
– Für Bedingung ii.) genügt es die hinzugefügten Knoten v ? , v 0 zu betrachten. v ? ist ein Blatt
und kommt in P genau einmal vor und v 0 kommt zwar mindestens zweifach in P vor, ist
aber nach Hinzufügen von v ? sicher kein Blatt mehr.
– Es bleibt Bedingung iii.) zu betrachten. Falls v 0 ein Blatt in P 0 war, folgt die Bedingung
direkt durch die Induktionsvoraussetzung (der einfache Pfad wird durch die Kante v 0 , v ?
fortgesetzt). Falls v 0 kein Blatt in P 0 war, sei v1 das nächste Blatt vor v ? in P und v2 das
nächste Blatt in P nach v ? . Nach Induktionsvoraussetzung ist der Teilpfad zwischen v1 und
v2 in P 0 einfach. Sei P1 der Teilpfad von v1 nach v ? und P2 der Pfad von v ? nach v2 in P .
Beide Pfade sind bis auf die End- bzw. Anfangspfade Teile von dem Teilpfad und damit
einfach und es wird nur jeweils eine Kante hinzugefügt (die in T 0 nicht existiert). Damit ist
auch Bedingung iii.) erfüllt und die Behauptung gezeigt.
c) Wir gehen ähnlich wie in der Übung vor und betrachten einen minimalen Steinerbaum Topt mit
Kosten copt . Sei Popt ein Pfad auf Topt , der die Eigenschaften aus b) erfüllt. Da jede Kante genau
zweimal durchlaufen wird, hat dieser Pfad Kosten 2copt . Sei |S| ≥ 3 (sonst stimmen der optimale
und der konstruierte Steinerbaum immer überein, im Fall |S| = 1 ist es jeweils der Baum, der
nur aus einer Wurzel besteht, im Fall |S| = 2 ist es der kürzeste Weg zwischen den beiden zu S
5
gehörigen Knoten). Dann hat Topt mindestens zwei Blätter. Blätter sind immer Elemente aus
S, da sonst weglassen der Blätter einen Steinerbaum mit echt kleinerem Gewicht liefern würde.
Wir nehmen nun diejenigen aufeinanderfolgenden Blätter, deren Teilpfad maximal ist. Dieser
Teilpfad hat mindestens Länge 2copt /|S|. (Wir können P nach Bedingung iii.) als aus zwischen
den Blättern zusammengesetzten einfachen Teilpfaden betrachten. Nach den vorigen Überlegungen
kann P maximal |S| Blätter haben, damit gibt es maximal |S| solcher Teilpfade. Die Länge des
gesamten Pfades P ist damit höchstens |S| mal die Länge des maximalen Teilpfades und damit
folgt das Gewünschte.) Dieser Teilpfad
ist
nach Bediungung iii.) einfach, damit liefert weglassen
1
einen Baum von Gewicht ≤ 2 · 1 −
· copt . Offensichtlich sind aber die Elemente aus S noch
|S|
miteinander verbunden und nun liefert Weglassen von Elementen außerhalb von S und Weglassen
von Wiederholungen von Elementen in S wie in der Übung einen Spannbaum in H (wobei H der
im Algorithmus konstruierte Hilfsgraph ist). Folglich hat der minimale Spannbaum in H höchstens
dieses Gewicht und die gewünschte Gleichung für calg gilt.
6
Herunterladen