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