10. Übungsblatt zu Algorithmen I im SoSe 2016

Werbung
Prof. Dr. Dennis Hofheinz
Lukas Barth, Lisa Kohl
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
10. Ü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
(Minimale Spannbäume, 7 Punkte)
a) Markieren Sie in dem folgenden Graphen einen Schnitt, mit dem das Gewicht des eingezeichneten
Spannbaums reduziert werden kann oder zeigen Sie, dass ein solcher Schnitt nicht existiert.
(Hinweis: Geben Sie in letzterem Fall nicht alle möglichen Schnitte an, sondern überlegen Sie eine
geeignete Vorgehensweise.)
7
A
C
5
6
B
6
3
3
1
4
7
D
7
E
8
7
8
G
8
6
F
H
b) Markieren Sie im folgenden Graphen einen Kreis, der die Kreiseigenschaft minimaler Spannbäume
verletzt oder zeigen Sie, dass so ein Kreis nicht existiert. (Hinweis: Geben Sie in letzterem Fall
nicht alle möglichen Kreise an, sondern überlegen Sie eine geeignete Vorgehensweise.)
A
C
8
6
B
5
2
3
4
1
7
D
4
E
8
4
7
G
5
3
F
1
H
c) Sei G ein ungerichteter zusammenhängender Graph mit positiven Kantengewichten. Beweisen
oder widerlegen Sie durch ein Gegenbeispiel, dass der minimale Spannbaum von G eindeutig ist,
wenn alle Kantengewichte in G paarweise verschieden sind.
d) Sei G wieder ein ungerichteter zusammenhängender Graph mit positiven Kantengewichten. Beweisen oder widerlegen Sie die Umkehrung von c). In anderen Worten, beweisen oder widerlegen
Sie durch ein Gegenbeispiel, dass alle Kantengewichte in G paarweise verschieden sind, wenn der
minimale Spannbaum eindeutig ist.
Musterlösung:
a) Die schwerste Kante im eingezeichneten Spannbaum hat Gewicht 7, für eine mögliche Gewichtsreduzierung müssen dager nur Kanten mit kleinerem Gewicht betrachtet werden, nämlich die Kanten
(B, C), (B, D) und (E, F ). Wir müssen nun zeigen, dass für jeden Schnitt, der eine dieser Kanten
enthält, eine weitere Kante Schnittkante ist, die gleiches oder kleineres Gewicht hat und bereits
Teil des minimalen Spannbaums ist. Daraus folgt, dass die Schnitteigenschaft für alle möglichen
Schnitte erfüllt ist und damit der Spannbaum minimal. Wir bezeichnen im Folgenden mit V die
Knotenmenge {A, B, C, D, E, F, G, H}.
Sei S ⊆ V ein Schnitt, zu dem (B, C) eine Schnittkante ist und ohne Beschränkung der Allgemeinheit B ∈ S (und damit C ∈ V \S). Falls E ∈ S, dann ist (C, E) eine Schnittkante von Gewicht 3
und Teil des minimalen Spannbaums. Gilt andernfalls E ∈
/ S, dann ist (B, E) eine Schnittkante
von Gewicht 1 des minimalen Spannbaums.
Sei nun ein Schnitt S gegeben, zu dem (B, D) eine Schnittkante ist und ohne Beschränkung der
Allgemeinheit B ∈ S (und damit D ∈ V \S). Dann können wir analog zu unseren obigen Überlegungen zeigen, dass entweder die Kante (A, B) oder die Kante (A, D) eine weitere Schnittkante
sein muss, die höchstens Gewicht 6 hat.
Sei schließlich S ein Schnitt, zu dem (E, F ) eine Schnittkante ist und ohne Beschränkung der
Allgemeinheit E ∈ S (und damit F ∈ V \S). Dann tritt immer einer der folgenden Fälle ein:
i.) A ∈ S : (A, F ) ist Schnittkante von Gewicht 4
ii.) A ∈
/ S ∪ B ∈ S : (A, B) ist Schnittkante von Gewicht 6
iii.) B ∈
/ S : (B, E) ist Schnittkante von Gewicht 1
b) Auf dem eingezeichneten Kreis ist 5 die schwerste Kante und trotzdem Teil des Spannbaums.
Damit ist die Kreiseigenschaft verletzt und der Spannbaum nicht minimal.
A
C
8
6
B
5
2
3
4
1
7
D
4
E
8
4
7
G
5
3
F
H
c) In der Vorlesung wurde bewiesen, dass die leichteste Kante eines Schnittes für einen minimalen
Spannbaum verwendet werden kann. Wenn die Kantengewichte paarweise verschieden sind, ist
die leichteste Kante eines Schnittes jeweils eindeutig und damit insbesondere auch der minimale
Spannbaum.
2
Ausführlicher: Sei G = (V, E) ein ungerichteter zusammenhängender Graph mit Gewichtsfunktion
c : E ⊆ R und paarweise verschiedenen Kantengewichten. Wir beweisen die Behauptung durch
einen Widerspruchsbeweis.
Annahme: Es gibt minimale Spannbäume T1 , T2 ⊆ E mit T1 6= T2 .
Da die Spannbäume verschieden sind und die Kanten paarweise verschiedenes Gewicht haben
existiert genau eine minimale Kante e = {u, v} ∈ E, die in genau einem der beiden Spannbäume
vorkommt. Wir nehmen ohne Beschränkung der Allgemeinheit an, dass e ∈ T1 \T2 gilt. Wir
betrachten nun E 0 := T2 ∪ {e}. Da T2 ein aufspannender Baum ist, enthält E 0 einen Kreis K.
Nach Wahl von e sind alle Kanten mit kleinerem Gewicht entweder in keinem oder in beiden
der Spannbäume T1 und T2 enthalten. Wenn e die schwerste Kante auf dem Kreis K wäre, dann
würde damit T1 einen Kreis enthalten. Sei e0 also eine Kante auf K mit c(e0 ) > c(e). Dann kann T2
durch Ersetzen von e0 durch e zu einem Spannbaum mit echt kleinerem Gewicht gemacht werden,
was der Minimalität widerspricht.
Damit ist die Eindeutigkeit bewiesen.
d) Im folgenden Graphen sind die Kanten nicht paarweise verschieden, der minimale Spannbaum
aber eindeutig:
B
1
1
A
C
5
1
D
Aufgabe 2
(Jarník-Prims und Kruskals Algorithmus, 4 Punkte)
Berechnen Sie je einen Minimum Spanning Tree (MST) des angegebenen Graphen mit dem Algorithmus
von Jarník-Prim und dem Algorithmus von Kruskal. Geben Sie jeweils die Kanten des MST in der
Reihenfolge an, in der sie der Algorithmus auswählt. Verwenden Sie Knoten A als Startknoten von
Jarník-Prim und wählen Sie in beiden Algorithmen bei gleichen Kantengewichten diejenige Kanten mit
alphabetisch kleinstem Endknoten aus.
5
A
C
2
8
B
1
6
7
3
1
6
D
2
E
5
7
2
5
6
G
3
F
4
3
H
Musterlösung:
Die Reihenfolgen, in denen die Kanten ausgewählt werden, sind:
Jarník-Prim {A, F }, {F, H}, {C, H}, {B, C}, {B, D}, {D, G}, {B, E}
Kruskal {A, F }, {B, D}, {B, C}, {C, H}, {D, G}, {B, E}, {F, H}
5
A
C
2
8
B
1
6
7
3
1
6
D
2
E
5
7
2
5
6
G
3
F
H
4
Aufgabe 3
(Zweitminimalste Spannbäume, 8 Punkte)
Sei G = (V, E) mit |E| ≥ |V | ein ungerichteter zusammenhängender Graph mit positiven Kantengewichten c(e) ∈ R>0 . Wir betrachten nun zweitminimalste Spannbäume. Sei T ein minimaler Spannbaum.
Dann ist ein zweitminimalster Spannbaum definiert als ein aufspannender Baum T ? =
6 T für den
P
minimal
wird.
(Falls
es
mehrere
minimale
Spannbäume
gibt,
ist
also
ein
zweitminimalster
c(e)
?
e∈T
Spannbaum auch ein minimaler Spannbaum.)
a) Beweisen oder widerlegen Sie durch ein Gegenbeispiel, dass der zweitminimalste Spannbaum von
G eindeutig ist, wenn alle Kantengewichte in G paarweise verschieden sind.
b) Sei T ein minimaler Spannbaum von G. Beweisen Sie, dass es Kanten {u, v} ∈ T und {x, y} ∈
/T
gibt, sodass (T − {u, v}) + {x, y} ein zweitminimalster Spannbaum von G ist.
c) Sei T ein beliebiger Spannbaum von G und und für zwei Knoten u, v ∈ V sei max[u, v] ∈ E die
Kante mit maximalem
Gewicht auf dem eindeutigen Pfad zwischen u und v in T . Beschreiben
Sie einen O |V |2 -Algorithmus, der gegeben T für alle u, v den Wert max[u, v] berechnet und
beweisen Sie die Laufzeit.
d) Geben Sie einen effizienten Algorithmus, der den zweitminimalsten Spannbaum von G berechnet.
Begründen Sie die Korrektheit Ihres Algorithmus.
Musterlösung:
In der Aufgabenstellung und Musterlösung wurde die Schreibweise in die für ungerichtete Graphen üblichen Mengenschreibweise umgeändert. Außerdem schreiben wir zur besseren Übersichtlichkeit T + {u, v}
statt T ∪ {{u, v}} und T − {u, v} statt T \{{u, v}}.
a) Siehe Abbildung 1 für ein Gegenbeispiel: Die beiden abgebildeten zweitminimalsten Spannbäume
sind unterschiedlich, haben aber dasselbe Gewicht.
4
b) Diese Aufgabe lösen wir mit einer Fallunterscheidung: Zunächst unter der Annahme, dass der
minimale Spannbaum eindeutig ist, und dann unter der Annahme, dass es mehrere minimale
Spannbäume gibt.
Annahme: MST ist eindeutig Sei T 0 ein zweitminimalster Spannbaum, und sei {u, v} eine
Kante in T , die nicht in T 0 enthalten ist. Dann enthält T 0 + {u, v} insgesamt |V | Kanten,
und somit einen Kreis. Da T keinen Kreis enthält, muss eine Kante auf diesem Kreis nicht
in T enthalten sein. Diese Kante sei {x, y}. Es muss nun gelten, dass c({x, y}) > c({u, v}),
denn ansonsten könnten wir {u, v} in T durch {x, y} ersetzen und einen nicht schwereren
Spannbaum als T erhalten, was der Annahme, dass T der eindeutige leichteste Spannbaum
in G ist, widerspricht. Sei nun T 000 = (T 0 − {x, y}) + {u, v}. Da c({x, y}) > c({u, v}) gilt, ist
T 000 leichter als T 0 , und somit muss (nach der Definition des zweitminimalsten Spannbaums
T 0 ) T 000 ein minimaler Spannbaum sein. T 0 und T 000 unterscheiden sich nur in einer Kante.
Gleichzeitig ist der minimale Spannbaum eindeutig, damit gilt T 000 = T , und die Behauptung
ist gezeigt.
Annahme: MST ist nicht eindeutig In diesem Fall gilt ja, dass zu einem MST T jeder andere
MST ein zweitminimalster Spannbaum ist. Wir müssen also zeigen, dass unter der Annahme
von nicht-eindeutigen Spannbäumen zu jedem MST T ein MST T 0 existiert, der sich nur
in einer Kante von T unterscheidet. Sei T 00 ein beliebiger, von T verschiedener MST. Dann
enthält T 00 mindestens eine Kante {u, v}, die T nicht enthält. Wir betrachten nun T + {u, v}:
Es ist klar, dass die zusätzliche Kante einen Kreis schließt. Sei dieser Kreis he1 , e2 , . . . ek i
mit ek = {u, v}. Wir können nun zeigen, dass alle ei das gleiche Gewicht haben müssen:
Zunächst ist klar, dass maxei (c(ei )) ≤ c({u, v}) gelten muss: Gäbe es auf dem Kreis eine
Kante, die schwerer als {u, v} ist, so ließe sich diese gegen {u, v} austauschen, und damit
hätten wir einen Spannbaum, der leichter als T ist, gefunden. Gleichzeitig muss aber auch
c({u, v}) ≤ maxei (c(ei )) gelten, da ansonsten {u, v} die eindeutig schwerste Kante auf einem
Kreis in G wäre, und mittels Kreiseigenschaft niemals zu einem MST gehörten könnte. Wenn
also alle Kanten auf dem Kreis mindestens so schwer wie {u, v} sein müssen, gleichzeitig
{u, v} maximal so schwer wie die schwerste Kante auf dem Kreis sein kann, so müssen alle
Kanten ei gleichschwer sein. Damit können wir uns nun eine beliebige Kante {x, y} =
6 {u, v}
des Kreises aussuchen und entfernen. Wir erhalten einen Spannbaum, der genauso schwer ist
wie T (also ein minimaler Spannbaum ist) und sich von T nur durch Hinzufügen von {u, v}
und Entfernen von {x, y} unterscheidet.
c) Für jeden Knoten v ∈ G starten wir eine DFS (oder eine BFS) auf T , die also nur die Kanten
von T benutzt. Bei jedem besuchten Knoten u setzen wir dabei max[u, v] auf das maximale
Kantengewicht, dass wir auf dem Pfad von v nach u bisher gesehen haben. Eine DFS hat laut
Vorlesung Laufzeit O(|V | + |E|). Wir betrachten nur den Spannbaum, für diesen gilt |E| = |V | − 1,
und damit ist die Laufzeit für eine DFS in O(|V |). Wir benötigen insgesamt |V | solcher Suchen,
und damit Gesamtlaufzeit O |V |2 .
d) Der Algorithmus geht wie folgt vor: Zunächst finden wir einen minimalen Spannbaum T . Dann
finden wir eine Kante {x, y} 6∈ T , die c({x, y}) − c(max[x, y]) minimiert, wobei max[x, y] berechnet
wird wie in Aufgabenteil c. Der gesuchte zweitminimalste Spannbaum ist dann (T − max[x, y]) +
{x, y}.
Der Algorithmus ist korrekt, weil c({x, y}) − c(max[x, y]) gerade das Gewicht ist, dass der Baum
mindestens zusätzlich erhält, wenn man {x, y} in den Baum aufnimmt und dafür eine andere
Kante aus dem Baum entfernt. Laut Aufgabenteil b) lässt sich aber genau auf diese Art immer
ein zweitminimalster Spannbaum konstruieren.
5
2
2
4
4
1
1
3
3
20
20
(b) Minimaler Spannbaum,
Gewicht 10
(a) Graph G = (V, E)
2
4
1
2
3
20
22
22
4
1
22
3
20
(c) Zweitminimalster Spannbaum, Gewicht 28
22
(d) Zweitminimalster Spannbaum, Gewicht 28
Abbildung 1: Gegenbeispiel für Aufgabe 3a
6
Herunterladen