Greedy Algorithmen für aufspannende Arboreszenzen 1 Minimal

Werbung
Greedy Algorithmen
für aufspannende Arboreszenzen
Birgit Hubert
23. Juni 2009
1 Minimal aufspannende Bäume
1.1 Wiederholung
Sei G=(V, E) ein zusammenhängender Graph, wobei V die Menge der Knoten
und E die Menge der Kanten darstellt. Sei ce > 0 das Gewicht der Kante e.
Gesucht ist eine Teilmenge T ⊆ E , so dass der Graph (V, T) zusammenhängend
ist und die Gesamtkosten ce minimal sind.
Wir kennen das Problem aus der Grundvorlesung und wissen, dass die Lösung ein Baum ist, denn (V, T) ist nach Voraussetzung zusammenhängend und
angenommen es gäbe einen Kreis C mit e ∈ C , dann ist (V, T \{e} ) auch zusammenhängend, da man einfach den längeren Weg im Kreis nehmen kann. Also
ist (V, T \ {e} ) auch eine mögliche Lösung und hat geringere Gesamtkosten.
Wir nennen den Baum Spannbaum. Damit ist das beschriebene Problem äquivalent dazu den minimalen Spannbaum zu nden.
1.2 Elementare Greedy-Algorithmen
Wir kennen das Problem aus den Grundvorlesungen. Ein Spannbaum ist ein
Teilgraph T ⊆ G so, dass T ein Baum ist, der alle Knoten des Graphen G
enthält. Da T ein Baum ist, muss T nach Denition kreisfrei sein.
Wir kennen drei einfache Algorithmen zur Bestimmung minimaler Spannbäume
in Graphen. Im Folgenden werden wir sie kurz wiederholen und die Optimalität
von einem beweisen.
1.2.1 Algorithmus von Kruskal
Der Algorithmus wählt unter den noch nicht ausgewählten Kanten von G die
kürzeste aus, vorausgesetzt, sie bildet mit den bereits ausgewählten Kanten
keinen Kreis. Der Algorithmus fängt also ohne Kanten an und fügt sukzessiv
Kanten ein, bis man keine Kanten mehr hinzufügen kann, weil sie einen Kreis
bilden würden.
1
1.2.2 Algorithmus von Prim
Dieser Algorithmus hat Ähnlichkeit mit dem Dijkstra Algorithmus für kürzeste
Wege. Wir beginnen mit dem Startknoten s und bauen von s aus einen minimalen Spannbaum auf. Wir verwalten eine Menge von Knoten S ⊆ V , die den
bereits teilweise konstruierten Spannbaum enthält. Im ersten Schritt ist S={s}
und in jedem weiteren Schritt fügt man einen Knoten ein, der von der Menge
S aus auf kürzestem Weg erreichbar ist. Wir fügen also einen Knoten v ein, für
den gilt mine=(u,v):u∈S {ce }.
Wir wollen die Optimalität von Prim's Algorithmus zeigen. Als Hilfmittel hierfür brauchen wir einen Satz über Schnitte in Graphen.
Cut-Property
Angenommen alle Kantengewichte seien unterschiedlich und positiv. Sei S eine
Teilmenge von Knoten mit S $ V und s 6= ∅. Sei e=(v, w) eine Schnittkante,
d.h. v ∈ S und w ∈ V \ S . Dann ist e in jedem minimalen Spannbaum enthalten.
Beweis:
Sei T ein Spannbaum ohne e. Wir zeigen, dass T nicht minimale Kosten hat.
Dazu verwenden wir ein Austausch-Argument: Wir nehmen eine Kante e0 ∈ T
mit ce0 > ce . Wir tauschen e' mit e und erhalten somit einen günstigeren
Spannbaum als T.
Da e=(v, w) und T ein Spannbaum ist, gibt es in T einen Weg P von v nach
w, der e nicht enthält, da e ∈
/ T ist. Auf diesem Weg P muss es eine Kante
e'=(v', w') geben, mit v 0 ∈ S und w0 ∈ V \ S . Da der Weg P zusammen mit e
einen Kreis bildet, kann e' mit e ersetzt werden. Wir erhalten einen Menge von
Kanten T 0 = T \ {e0 } ∪ {e}. Es bleibt zu zeigen, dass (V, T') ein Spannbaum
ist.
(V, T') ist zusammenhängend, da (V, T) zusammenhängend ist und jeder Weg,
der vorher in (V, T) die Kante e' benutzt hat, kann jetzt über die Kante e in
(V, T') umgeleitet werden.
(V, T') ist kreisfrei, da der einzige mögliche Kreis aus P ∪ {e} bestand. Da wir
aber e' entfernt haben, ist dieser Kreis nicht in T'.
Damit ist (V, T') ein Spannbaum. Dieser Spannbaum ist minimal, da ce < ce0 .
Also sind die Gesamtkosten von T' kleiner als die Gesamtkosten von T.
q.e.d.
Beh.: Prim berechnet einen minimalen Spannbaum.
Beweis:
In jedem Iterationsschritt des Algorithmus haben wir eine Menge S ⊂ V , auf
der eine Teilmenge eines minimalen Spannbaums konstruiert ist. In jedem
weiteren Schritt wird ein Knoten v ∈ V \ S hinzugefügt, der die Bedingung
mine=(u,v):u∈S {ce } erfüllt. Nach Denition ist also e die günstigste Kante mit
einem Ende in S und dem anderen Ende in V \ S . Es folgt aus der
Cut-Property, dass jeder minimale Spannbaum diese Kante enthalten muss.
2
q.e.d.
Wir haben angenommen, dass alle Kantengewichte unterschiedlich sind. Wir
können leicht zeigeen, dass die Aussagen trotzdem auch in Graphen gelten, in
denen es möglicherweise gleiche Kantengewichte gibt.
Sei G ein zusammenhängender Graph, in dem es Kanten mit gleichen Gewichten
gibt. Wir nehmen eine sehr kleine Zahl ² > 0 und ² << 1 und perturbieren
die Kantengewichte in G mit ². Anschlieÿend sind alle Kantengewichte unterschiedlich, aber die gröÿer-kleiner-Relationen bleiben erhalten.
1.2.3 Reverse-Delete Algorithmus
Eine Art "Rückwärtsversion" von Kruskal's Algorithmus. Wir beginnen mit
dem vollständigen Graphen (V, E) und löschen Kanten maximalen Gewichts.
Wir suchen also im Graphen (V, E) die Kante mit maximalem Gewicht und
überprüfen, ob das Löschen der Kante zu einem unzusammenhängenden Graphen
führen würde. Ist dies nicht der Fall, so löschen wir die Kante.
2 Minimal aufspannende Arboreszenzen
2.1 Problembeschreibung
Sei G=(V, E) ein gerichteter Graph mit Kantengewichten ce ≥ 0 und sei e ∈ V
seine Wurzel. Eine Arboreszenz bezüglich r ist ein gerichteter Spannbaum mit
Wurzel r. Also ein Teilgraph T=(V, F), wobei T ein Spannbaum von dem zugrunde liegenden ungerichteten Graphen ist und im gerichteten Graphen T für
alle Knoten v ∈ V ein Weg von r nach v existiert.
Wir wollen eine kostenminimale Arboreszenz berechnen.
Wie man sieht gibt es eine groÿe Ähnlichkeit zum minimalen Spannbaum Problem in ungerichteten Graphen. Deswegen stellt sich zuerst die Frage, ob die
dort verwendeten Algorithmen vielleicht auf dieses Problem übertragbar sind.
Die Algorithmen von Prim und Kruskal basieren beide darauf, dass laut CutProperty eine minimale Kante auch in einem minimalen Spannbaum enthalten
sein muss. Diese gilt aber nicht für Arboreszenzen. Wenn z.B. die minimale
Kante in die Wurzel hineinführt, ist sie natürlich nicht in der minimalen Arboreszenz enthalten.
Ein weiteres Beispiel:
kk@5 b S=SSS
kkkk¢¢¢ === SSSSSS
k
k
k
==
SSSS
¢
kk
SSSS
¢¢ 4
2 ==
4
kkkk 10
k
¢
k
Á
SS)
k
¢
k
k
/
r TTTT
a _>
d
j5 g
j
j
2
>>
TTT
¡
jj
j
¡
TTT
j
>
2
1
j
¡
j
>>
TT
¡¡ jjjjj8
10 TTTTT >>
TT) Ä¡j¡jjjj
c
3
Die Kante (c, a) ist oensichtlich Kante minimalen Gewichts.
Angenommen, wir gehen vor wie bei Kruskal und fügen als erstes diese Kante
in die minimale Arboreszenz ein, so kann man anschlieÿend die Kante (r, a)
nicht mehr einfügen, da nach Denition nur eine Kante in einen Knoten
hereinführen darf und wir müssten die Kante (r, b) oder (r, c) mit
Kantengewicht 10 verwenden.
Bei genauer Betrachtung des Graphen sieht man, dass der minimale
Spannbaum bzgl. r die maximale Kante des Kreises enthält. Man kann sogar
Beispiele konstruieren, in denen eine minimale Arboreszenz die teuerste Kante
des gesamten Graphen enthält.
2.2 Konstruktion eines Algorithmus
Trotz den oben genannten Problemen kann man einen Greedy-Algorithmus zur
Problemlösung konstruieren. Zuerst ein Hilfssatz:
Hilfssatz 1: Ein Teilgraph T=(V, F) von G=(V, E) ist eine Arboreszenz bzgl.
Wurzel r genau dann, wenn T keinen Kreis hat und für alle Knoten v 6= r genau
eine Kante nach v führt.
Beweis:
Wenn T eine Arboreszenz ist, gibt es für jeden Knoten v 6= r genau einen
(r, v)-Weg. Gäbe es zu einem Knoten v mehr als einen (r, v)-Weg, wäre das
Gesamtgewicht des Baums nicht minimal, weil man auf einen der beiden Wege
verzichten könnte und einfach den Kürzeren wählt. Also führt auch zu jedem
Knoten genau eine Kante.
Umgekehrt, angenommen T hat keinen Kreis und jeder Knoten v 6= r hat genau
eine eingehende Kante. Wir müssen zeigen, dass es zu jedem Knoten v 6= r einen
(r, v)-Weg gibt. Wir konstruieren diesen Weg folgendermaÿen: Wir starten bei
v und gehen die Kante rückwärts. Da T keine Kreise hat, können wir niemals
zum Ausgangspunkt zurückkommen, also muss der Vorgang terminieren. Da r
der einzige Knoten ohne eintreende Kante ist, stoppt der Vorgang genau bei
r. Da v beliebig war, haben wir einen (r, v)-Weg ∀v∈V .
q.e.d.
Jetzt überlegt man sich, was bei einem einfachen Greedy-Algorithmus, der
einfach sukszessiv die billigsten Kanten einfügt, schief geht.
Naive Strategie: ∀v∈V \{r}: Wähle die billigste Kante, die nach v führt.
Sei F* die Menge dieser n-1 Kanten, wobei |V|=n.
Betrachte den Teilgraph (V, F*): Wir wissen aus dem Hilfssatz, dass eine optimale Arboreszenz für alle Knoten v ∈ V \ {r} genau eine Kante hat, die nach v
führt. Da (V, F*) nach Konstruktion die billigsten Kanten enthält, gilt:
Wenn (V, F*) eine Arboreszenz ist, dann ist es auch eine minimale Arboreszenz.
Das Problem ist also, falls (V, F*) keine Arboreszenz ist. In diesem Fall muss
(V, F*) einen Kreis C enthalten, der nicht die Wurzel durchläuft. Das folgt
unmittelbar aus dem Hilfssatz.
4
Beobachtung: Die eigentlichen Kosten einer Kante, die nach v führt, sind
nicht ausschlaggebend. Wichtiger sind die Kosten einer eingehenden Kante relativ zu den Kosten aller anderen eingehenden Kanten zu betrachten.
Sei yv = mince {c(u, v) : u ∈ V } die minimal nach v führende Kante. Wir
denieren für jede Kante e=(u, v) modizierte Kosten c0e = ce − yv . Da ce ≥ yv ,
sind alle modizierten Kosten nicht-negativ.
Da sich die Relationen zwischen den Kantengewichen durch das modizieren
nicht verändern, gilt, dass T eine optimale Arboreszenz in G bzgl. der Kosten
{ce } ist, genau dann, wenn T eine optimale Arboreszenz bzgl. der modizierten
Kosten {c0e } ist.
Im Folgenden betrachten wir das gleiche Problem mit modizierten Kosten.
Alle Kanten der Menge F* haben jetzt modiziertes Gewicht 0. Falls (V, F*)
einen Kreis hat, haben auch alle Kreis-Kanten Gewicht 0. Das bedeutet man
kann so viele Kanten von C verwenden, wie man will, da es die Gesamtkosten
nicht erhöht.
Die Idee ist, dass wir C zu einem einzigen groÿen Knoten schrumpfen. Dadurch
erhalten wir einen kleineren Graph G'=(V', E'). V' enthält alle Knoten v ∈ V \C
und einen groÿen Knoten c*, der C repräsentiert. G' kann dadurch parallele
Kanten enthalten. Falls aber c* Schlingen hat, werden diese gelöscht.
2.3 Greedy-Algorithmus für Arboreszenzen
Der oben hergeleitete Algorithmus zusammengefasst:
(1) Für alle Knoten v 6= r.
(2) Sei yv das minimale Gewicht aller nach v führenden Kanten.
(3) Modiziere die Kosten aller eingehenden Kanten e nach v zu c0e = ce − yv .
(4) Füge eine 0-Kante mit Endknoten in v in F* ein. Man erhält eine Menge
von Kanten F*. (5) Falls F* eine Arboreszenz ist, stopp.
Return F*.
(6) Sonst existiert ein gerichteter Kreis C ⊆ F ∗.
(7) Schrumpfe C zu einem einzigen groÿen Knoten. Es resultiert ein Graph
G'=(V', E').
(8) Finde rekursiv eine optimale Arboreszenz (V', F') in G', mit Kosten {c0e }.
(9) Erweitere (V', F') zu einer Arboreszenz (V, F) in G, indem alle, auÿer eine
Kante von C wieder hinzufügt werden.
5
2.3.1 Ein Beispiel
Wir wenden den Algorithmus auf den obigen Beispiel-Graphen an.
Ausgangsgraph G=(V, E):
5 b SS
kkk¢k¢@ ===SSSSSS
k
k
k
==
SSSS
¢
kkk
==
SSSS
kk10
¢¢4
k
k
¢
2
4
k
=
SSSS
k
¢
k
Á
k
¢
k
)
/a
r kTTTT
d
>
_
jj5 g
j
>>
TT2T
j
¡
TTT
jjj
>>1
2 ¡¡
TT
¡ jjjjjj
>
¡
10 TTTTT >>
8
j
TT) Ä¡j¡jjjj
c
Anwenden von Schritt (1) bis (3) führt zu folgendem modizierten Graph:
kk@5 b S=SSS
kkkk¢¢¢ === SSSSSS
k
k
k
==
SSSS
kkk
¢¢
SSSS
0 ==
0
kkkk 6
¢¢ 0
k
Á
SS)
k
¢
k
k
/
a _>
r TTTT
d
j5 g
j
j
>>
TT1T
¡
jjj
¡
TTT
j
>
0
0
j
¡
j
>
TTT
TTT >>> ¡¡¡ jjjjjj4
8
TTT Ä¡jjj
)cj
Anwenden von Schritt (4) führt zu Graph, der nur die Kanten F* enthält:
@ b S=SSS
¢¢ === SSSSSS
¢
==
SSSS
¢
SSSS
¢¢ 0
0 ==
0
Á
SS)
¢¢
g
a _>
d
>>
¡
>>0
0 ¡¡
¡
>>
> Ä¡¡¡
c
r
Oensichtlich ist F* keine Arboreszenz und es existiert ein gerichteter Kreis.
Wende (7) an:
6
r
1
0
&
/ c∗
8
8
&g
8
4
(8) Rufe Algorithmus rekursiv auf und erhalte modizierten Graphen durch
(1) bis (3).
0
5
r
0
7
&
/ c∗
8
&g
8
4
6
In Schritt (4) erhält man wieder F*:
r
0
/ c∗
0
/g
Wie man sieht, ist F* ist eine Arboreszenz. Also gehe zu Schritt (9) und
erweitere zu einer gesamten Arboreszenz (V, F) in G, indem alle, auÿer eine
Kante von C wieder hinzufügt werden.
Modizierte Arboreszenz:
r
0
b SS
¢@ ===SSSSSS
¢
==
SSSS
¢
==
SSSS
¢¢0
¢
0
0
=
SSSS
¢
Á
¢
)g
/a
d
¡
0 ¡¡
¡¡
Ä¡¡
c
Gewichtete Arboreszenz:
r
2
@ b S=SSS
¢¢ === SSSSSS
¢
==
SSSS
¢
SSSS
¢¢ 4
2 ==
4
Á
SS)
¢¢
/a
g
d
¡
2 ¡¡
¡¡
Ä¡¡
c
2.3.2 Korrektheit
Hilfssatz: Sei C ein Kreis in G, so dass alle Kantengewichte von C gleich 0
sind und r ∈
/ C . Dann existiert eine optimale Arboreszenz mit Wurzel in r, der
genau eine Kante hat, die zu dem Kreis C führt.
Beweis: Betrachte eine optimale Arboreszenz T in G. Da es zu jedem Knoten
v in G einen (r,v)-Weg geben muss, gib es auch mindestens eine Kante, die nach
C führt. Falls es genau eine solche Kante gibt sind wir schon fertig.
Angenommen, es gibt mehrere Kanten, die nach C führen. Sei e=(a,b) eine
Kante die auf dem kürzesten Weg von r nach C liegt. Also b ∈ C und a ∈
/ C.
Wir löschen alle Kanten in T, die nach C führen, auÿer die Kante e. Wir fügen
alle Kanten aus C ein, auÿer die, die in b endet. T' bezeichne den resultierenden
Teilgraph von G.
T' ist eine Arboreszenz:
T' hat keine gröÿeren Kosten als T, da alle Kanten, die in T' sind, aber nicht
in T 0-Kosten haben.
Auÿerdem hat T' genau eine eingehende Kante pro Knoten und keine Kante
führt zur Wurzel. Also bleibt zu zeigen, dass es zu jedem Knoten v einen
7
(r,v)-Weg gibt. Damit wäre der zugrunde liegende ungerichtete Graph zusammenhängend.
Sei v 6= r beliebig. Falls v ∈ C , können wir den bereits konstruierten Weg bis
zur Kante e nehmen und ab e einfach den Kreis entlang gehen, bis wir bei v
ankommen.
Falls v ∈
/ C und falls der Weg C nicht verwendet werden kann, so liegt der Weg
in T' und existiert nach Denition von T'. Falls v ∈
/ C und falls der Weg P über
C geht, dann sei w der letzte Knoten in P ∩ C und sei P' der Rest-Weg von w
nach v. Alle Kanten von P' liegen also in T'. Da w im Kreis liegt, haben wir
bereits gezeigt, dass der Knoten erreichbar ist. Verknüpft man einfach den Weg
P mit dem Weg P', so hat man den gesuchten Weg.
q.e.d.
Behauptung: Der Algorithmus berechnet eine optimale Arboreszenz bzgl. r
in G.
Beweis:
Induktion über die Anzahl der Knoten von G.
I.A.: n=1 klar.
I.S.: Zeige n − 1 → n
Wenden wir den Algorithmus an und F ist eine Arboreszenz, dann ist F auch
eine optimale Arboreszenz. (Schritt (5) vom Algorithmus). Dann sind wir schon
fertig.
Sei also F keine Arboreszenz. Dann hat der Graph mit modizierten Kosten
einen 0-Kreis. Wir schrumpfen diesen Kreis und erhalten G'.
G' hat eine optimale Arboreszenz nach Induktionsannahme. Aus dem Hilfssatz
folgt, dass G eine Arboreszenz hat, in welcher genau eine Kante zu dem Kreis
C führt. ⇒ Es eine optimale Arboreszenz in G.
q.e.d.
8
Herunterladen