Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit...

6
Karlsruher Institut f¨ ur Technologie Prof. Dr. Peter Sanders Institut f¨ ur Theoretische Informatik G.V. Batz, C. Schulz, J. Speck 11. ¨ Ubungsblatt zu Algorithmen I im SS 2010 http://algo2.iti.kit.edu/AlgorithmenI.php {sanders,batz,christian.schulz,speck}@kit.edu Musterl¨ osungen Aufgabe 1 (Negative Kreise in gerichteten Graphen, 2+2+2 Punkte ) Wir betrachten hier die Ausf¨ uhrung des Algorithmus von Bellman-Ford auf einem gewichteten und gerichteten Graphen G. Der Graph habe n Knoten und der Startknoten f¨ ur Bellman-Ford sei mit s bezeichent. Alle Knoten im Graphen seien von s erreichbar. Mit d[v] k wird hier der Wert von d[v] nach der k-ten Runde bezeichnet. a) Zeigen Sie: Ein negativer Kreis existiert genau dann, wenn in der n-ten Runde von Bellman-Ford d[v] f¨ ur einen Knoten verkleinert wird. Hinweis: Siehe ¨ Ubung. b) Es seien nun n Runden von Bellman-Ford auf G angewendet und alle Datenstrukturen ent- sprechend aufgebaut (insbesondere der Array der zu jedem Knoten seinen Vorg¨ anger speichert). Zudem ist ein Knoten u, mit d[u] n <d[u] n-1 gegeben. Es gibt also nach a) einen Kreis mit negativem Gewicht. Geben Sie einen Algorithmus mit Laufzeit in O(n) an, der einen negativen Kreis in G findet und begr¨ unden Sie die Laufzeit. Hinweis: Was passiert wenn man von u aus immer wieder zum Vorg¨ anger geht? c) Zeigen Sie, dass das was Ihr Algorithmus findet tats¨ achlich ein negativer Kreis ist. Hinweis: Sie d¨ urfen davon ausgehen, dass es keinen Kreis mit Gewicht 0 gibt. Musterl¨ osung: a) v : d[v] n <d[v] n-1 es existiert ein negativer Kreis: In der ¨ Ubung wurde gezeigt: Wenn kein negativer Kreis existiert, findet Bellman-Ford zu jedem Knoten v einen k¨ urzesten Weg von s nach v. Da dieser Weg keine Kreise enth¨ alt, gibt es maximal n - 2 Knoten und n - 1 Kanten auf dem k¨ urzesten Weg zwischen s und v. Insbesondere hat Bellman-Ford den k¨ urzesten Weg nach maximal n - 1 Runden gefunden. Damit ist in der n- ten Runde keine weitere Verkleinerung von d[v] mehr m¨ oglich. Deshalb muss im Falle einer Verkleinerung in der n-ten Runde ein negativer Kreis existieren. Es existiert ein negativer Kreis v : d[v] n <d[v] n-1 : Es sei C ein Kreis der L¨ ange k in G mit einem Gesamtgewicht der Kanten von -c< 0. Nach t n - 1 Runden gelte f¨ ur alle Knoten v Cd[v] < . Da ein negativer Kreis nie statisch wird, existiert in jeder Runde ab der t + 1-ten mindestens ein Knoten v C mit d[v] <d[v] -1 . b) Algorithmus: 1. Starte mit Knoten u. 2. Markiere den aktuellen Knoten und gehe zum Elterknoten. 3. Falls der Elterknoten nicht markiert ist, gehe zu 2.. 4. Wenn der Elterknoten markiert ist, hat man einen Kreis gefunden. 5. Man merkt sich den gerade erreichten Knoten. 1

Transcript of Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit...

Page 1: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

Karlsruher Institut fur Technologie Prof. Dr. Peter SandersInstitut fur Theoretische Informatik G.V. Batz, C. Schulz, J. Speck

11. Ubungsblatt zu Algorithmen I im SS 2010http://algo2.iti.kit.edu/AlgorithmenI.phpsanders,batz,christian.schulz,[email protected]

Musterlosungen

Aufgabe 1 (Negative Kreise in gerichteten Graphen, 2 + 2 + 2 Punkte)

Wir betrachten hier die Ausfuhrung des Algorithmus von Bellman-Ford auf einem gewichteten undgerichteten Graphen G. Der Graph habe n Knoten und der Startknoten fur Bellman-Ford sei mit sbezeichent. Alle Knoten im Graphen seien von s erreichbar. Mit d[v]k wird hier der Wert von d[v] nachder k-ten Runde bezeichnet.

a) Zeigen Sie: Ein negativer Kreis existiert genau dann, wenn in der n-ten Runde von Bellman-Fordd[v] fur einen Knoten verkleinert wird.Hinweis: Siehe Ubung.

b) Es seien nun n Runden von Bellman-Ford auf G angewendet und alle Datenstrukturen ent-sprechend aufgebaut (insbesondere der Array der zu jedem Knoten seinen Vorganger speichert).Zudem ist ein Knoten u, mit d[u]n < d[u]n−1 gegeben. Es gibt also nach a) einen Kreis mitnegativem Gewicht. Geben Sie einen Algorithmus mit Laufzeit in O(n) an, der einen negativenKreis in G findet und begrunden Sie die Laufzeit.Hinweis: Was passiert wenn man von u aus immer wieder zum Vorganger geht?

c) Zeigen Sie, dass das was Ihr Algorithmus findet tatsachlich ein negativer Kreis ist.Hinweis: Sie durfen davon ausgehen, dass es keinen Kreis mit Gewicht 0 gibt.

Musterlosung:

a) ∃v : d[v]n < d[v]n−1 ⇒ es existiert ein negativer Kreis:In der Ubung wurde gezeigt: Wenn kein negativer Kreis existiert, findet Bellman-Ford zu jedemKnoten v einen kurzesten Weg von s nach v. Da dieser Weg keine Kreise enthalt, gibt es maximaln − 2 Knoten und n − 1 Kanten auf dem kurzesten Weg zwischen s und v. Insbesondere hatBellman-Ford den kurzesten Weg nach maximal n − 1 Runden gefunden. Damit ist in der n-ten Runde keine weitere Verkleinerung von d[v] mehr moglich. Deshalb muss im Falle einerVerkleinerung in der n-ten Runde ein negativer Kreis existieren.

Es existiert ein negativer Kreis ⇒ ∃v : d[v]n < d[v]n−1 :Es sei C ein Kreis der Lange k in G mit einem Gesamtgewicht der Kanten von −c < 0. Nacht ≤ n−1 Runden gelte fur alle Knoten v ∈ C d[v] <∞. Da ein negativer Kreis nie statisch wird,existiert in jeder Runde ` ab der t+ 1-ten mindestens ein Knoten v ∈ C mit d[v]` < d[v]`−1.

b) Algorithmus:

1. Starte mit Knoten u.

2. Markiere den aktuellen Knoten und gehe zum Elterknoten.

3. Falls der Elterknoten nicht markiert ist, gehe zu 2..

4. Wenn der Elterknoten markiert ist, hat man einen Kreis gefunden.

5. Man merkt sich den gerade erreichten Knoten.

1

Page 2: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

6. Gib den aktuellen Knoten aus und gehe zum Elterknoten.

7. Wenn der Elterknoten nicht der gemerkte Knoten ist, gehe zu 6..

Der Algorithmus terminiert nach maximal O(n) Schritten:Nach n Runden von Bellman-Ford haben alle Knoten v außer s einen Elterknoten u 6= v. Wennman beim ”Ruckwartslaufen“ in s ankommt und s sich selbst als Elterknoten hatte, dann wareman einen kurzesten Pfad von s nach u zuruckgelaufen. Dieser hatte jedoch in der n-ten Rundevon Bellman-Ford nicht kurzer werden konnen, daher kann dieser Fall nicht auftreten. Deshalbmuss man irgendwann immer auf einen schon markierten Knoten stoßen. Da es aber maximaln Knoten gibt, die markiert werden konnen, passiert dies spatestens nach n Schritten. DieAusgabe des Kreises benotigt auch maximal n Schritte. Damit werden insgesamt nur O(n)Schritte benotigt.

c) Es sei v1, . . . , vk mit Kanten e1 = (v1, v2), . . . , ek = (vk, v1) der in b) gefundene Kreis C. Wobeivi jeweils der Elter von vi+1 ist, der Elter von v1 ist vk. Wegen der n-ten Runde (oder dervorherigen) von Bellman-Ford gilt d[vi+1]n = c(ei) + d[vi]n−1. Summiert man die obige Formeluber alle i so erhalt man:

k∑i=1

d[vi]n =k∑

i=1

(c(ei) + d[vi]n−1)

Fur jedes i gilt zudem d[vi]n−1 ≥ d[vi]n, und daher:

k∑i=1

d[vi]n ≥k∑

i=1

(c(ei) + d[vi]n)

0 ≥k∑

i=1

c(ei)

Damit ist C entweder Kreis vom Gewicht 0 (wurde durch den Hinweis ausgeschlossen) oder einKreis von negativem Gewicht.

Aufgabe 2 (Jarnık-Prim und Kruskals Algorithmus, 3 + 3 Punkte)

Berechnen Sie einen MST des angegebenen Graphen mit dem Algorithmus von Jarnık-Prim und demAlgorithmus von Kruskal. Geben Sie jeweils die Kanten des MST in der Reihenfolge an, in der sieder Algorithmus auswahlt. Um Eindeutigkeit herzustellen, verwenden Sie Knoten a als Startknotenvon Jarnık-Prim und sortieren Sie die Kanten bei beiden Algorithmen bei Unentschieden nach denNummern der Endknoten.

a

b c d

ef g

h i j

1

2

4 8

5

7

9

5

3

5

4 13 11

610

3

1

3

7

Musterlosung: Jarnık-Prim: a, b, a, h, h, i, i, f, f, e, i, j, b, c, f, g, g, dKruskal: a, b, h, i, a, h, e, f, i, f, i, j, b, c, f, g, g, d

2

Page 3: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

Aufgabe 3 (Minimale Spannbaume, 3 + 3 Punkte)

a) Sei G = (V,E) ein zusammenhangender ungerichteter gewichteter Graph und T ein MST in G.Fur V ′ ⊆ V sei G′ der von V ′ induzierte Teilgraph von G und T ′ der von V ′ induzierte Teilgraphvon T . Zeigen Sie: Wenn T ′ zusammenhangend ist, dann ist T ′ ein MST in G′.

b) Sei G = (V,E) ein zusammenhangender ungerichteter gewichteter Graph mit Gewichtsfunktionc : E → R>0. Sei T ein MST in G bzgl. der Gewichtsfunktion c.

Sei e0 eine Kante in T und q0 ∈ R mit c(e0) ≥ q0 ≥ 0. Wir definieren nun eine weitere Gewichts-funktion c0 : E → R>0 mit c0(e) := c(e) fur e 6= e0 und mit c0(e0) := c(e0)− q0.

Zeigen Sie: T ist auch bzgl. der Gewichtsfunktion c0 ein MST in G.

Musterlosung:

a) T ′ ist Baum, da es nach Vorraussetzung zusammenhangend ist und keine Kreise enthalt. Ann-genommen T ′ enthielte einen Kreis: Da T ′ Teilgraph von T ist, wurde dann aber auch T einenKreis enthalten, was ein Widerspruch zur Baumeigenschaft von T ist.

Außerdem ist T ′ spannender Baum, da es als von V ′ induzierter Teilgraph in G alle Knotenvon V ′ beruhrt.

Weiter ist T ′ minimaler Spannbaum. Andernfalls gabe es einen anderen Spannbaum T ′′ in G′

mit Gewicht c(T ′′) < c(T ′) und wir konnten einen Graph T bilden, indem wir alle Kanten vonT ′ aus T entfernen und stattdessen alle Kanten von T ′′ einfugen. Da alle Baume in G′ gleichviele Kanten haben (siehe Ubung), haben T ′ und T ′′ auch gleichviele Kanten. Weiter ist T ′ einTeilgraph von T . Folglich werden beim bilden von T gleich viele Kanten weggenommen wie hin-zugefugt. Also haben T und T gleich viele Kanten. Außerdem sind T und T ′′ zusammenhangendund somit auch T . Also ist T iebenfalls spannender Baum in G. Es ist aber

c(T ) = c(T ) + c(T ′′)− c(T ′)︸ ︷︷ ︸<0

< c(T )

im Widerspruch zur Minimalitat von T .

b) Ware T bezuglich der Gewichtsfunktion c0 kein MST in G, dann gabe es einen MST T ′ in Gmit c0(T ′) < c0(T ). Dabei gehort e0 entweder zu T ′ dazu oder nicht.

Fall 1: e0 gehort zu T ′ dazu. Da sich c und c0 nur in der Bewertung von e0 unterscheiden und e0sowohl in T als auch T ′ enthalten ist gilt sowohl c0(T ) = c(T )− q0 als auch c0(T ′) = c(T ′)− q0.Wir haben also

c0(T ′) < c0(T ) ⇔ c(T ′)− q0 < c(T )− q0 ⇔ c(T ′) < c(T )

im Widerspruch zur Minimalitat von T bzgl. c.

Fall 2: e0 gehort nicht zu T ′ dazu. In diesem Fall gilt

c(T ′) = c0(T ′) < c0(T ) = c(T )− q0 < c(T ) ,

was erneut ein Widerspruch zur Minimalitat von T bzgl. c ist.

3

Page 4: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

Aufgabe 4 (Anwendungsproblem, 1 + 5 Punkte)

Man hat ihnen ein Bild der folgenden Artgegeben: Zunachst wurden die Hintergrundpixelvollig zufallig gewahlt, d.h. jedes Pixel hateine zufallige Farbe zugewiesen bekommen.Anschließend wurden kleine Objekte jeweilskomplett mit der gleichen Farbe auf das Bildgezeichnet.Weiter bekommen Sie folgende Graphmodel-lierung an die Hand gegeben: G = (V,E) mitV die Pixel des Bildes und e = p1, p2 ∈ Egenau dann wenn p1 und p2 sind benachbartund haben die gleiche Farbe.

a) Argumentieren Sie, dass das Graphmodell hochstens O(n) Kanten hat.

b) Geben Sie einen Algorithmus an, der nur mit Hilfe des Graphmodells die Regionen/Objekteidentifiziert die mehr als R Pixel haben und ausgibt. Der Algorithmus soll die Laufzeit vonO(nαT (m,m)) nicht uberschreiten.

Musterlosung:

a) Ein Pixel hat entweder 4 oder 8 Nachbarn (je nach Definition). Damit konnen im Graphenhochstens 4n Kanten existieren.

b) Aufgrund der Definition des Graphen reduziert sich das Problem auf das Finden von Zusam-menhangskomponenten in G. Zusammenhangskomponenten kann man in Zeit O(mαT (m,m))unter Verwendung einer Union-Find Datenstruktur finden (Union-by-rank + Pfadkompression).Der Algorithmus sieht folgendermaßen aus:1: procedure connectedComponents(G = (V,E))2: for v ∈ V do initSet(v)3: for e = u, v ∈ E do4: if find(u) 6= find(v) then5: union(u, v)6: return

Allerdings mussen wir uns noch uber die Große der Regionen Gedanken machen. Dazu bekommtjede Menge ein Attribut size und wir modifizieren die union operation, so dass der Reprasen-tant (der Knoten der als Parent sich selbst hat) der neuen vereinigten Menge die Summe derbeiden vereinigten Mengen als Wert erhalt. Initialisiert werden die Size Attribute mit 1. Wei-ter fuhren wir eine neue Operation size(i : 1..n) ein, welche uns die Große der Menge liefert,in der sich der Knoten i befindet. Diese Operation kann man folgendermaßen implementie-ren:1: function size(i : 1..n)2: return size[find(i)];

Zum Ausgeben der Objekte formulieren wir Breitensuchen, die in den jeweiligen Zusammen-hangskomponenten nur einmal starten konnen:1: procedure findeObjekte(G, R)2: connectedComponents(G)3: unmark all nodes4: forall v ∈ V do

4

Page 5: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

5: if size(v) ≥ R and v not marked then6: output ”found new object larger than R”7: perform a bfs starting at v and mark all visited nodes; print them8: return

Wir haben hochstens O(m) Find und Union Operationen, die ausgefuhrt werden mussen, umZusammenhangskomponenten zu finden. Da m ∈ O(n) ergibt sich die geforderte Laufzeit furdas Finden der Zusammenhangskomponenten. Die modifizierte Breitensuche zum Ausgeben derKomponenten, hat ebenfalls die geforderte Laufzeit. Man beachte das in der size Funktion einefind Operation steckt.

Zusatzaufgabe 1 (Bottleneck Shortest Path, 2 + 2 + 1 + 1 Punkte)

Sei G = (V,E) ein zusammenhangender ungerichteter gewichteter Graph und s, t ∈ V . Ein kreisfreierPfad P zwischen s und t heiße ein Bottleneck Shortest Path fur s und t, wenn das großte in Pauftretende Kantengewicht minimal ist fur alle Pfade zwischen s und t.

a) Zeigen Sie: Ist T ein MST in G, dann ist der in T eindeutige Pfad P zwischen zwei Knotens, t ∈ V ein Bottleneck Shortest Path in G fur s und t.

b) Geben Sie einen Algorithmus an, der fur gegebenes G = (V,E), gegebene s, t ∈ V und einengegebenen MST T in G einen Bottleneck Shortest Path P zwischen s und t ausgibt. Die Laufzeitsoll dabei hochstens in O(|P |) liegen (mit |P | die Anzahl Kanten von P ). Nehmen Sie an T warevom Jarnık-Prim Algorithmus geliefert worden und liege in Form des Arrays parent vor.

Hinweis: Es genugt nicht nacheinander die Vorganger von s und t abzulaufen, da die Laufzeitsonst schlimmstenfalls in Ω(|V |) liegt.

c) Argumentieren Sie kurz warum Ihr Algorithmus korrekt ist.

d) Argumentieren Sie kurz warum Ihr Algorithmus das geforderte Laufzeitverhalten aufweist.

Musterlosung:

a) Angenommen, P ist kein Bottleneck Shortest Path in G, dann gibt es einen anderen Pfad P ′

zwischen s und t in G, mit

maxe Kante auf P ′

c(e) < maxe Kante auf P

c(e) .

Sei e0 = u, v eine Kanten auf P mit

c(e0) = maxe Kante auf P

c(e) .

Offenbar gilt c(e) < c(e0) fur alle Kanten e auf P ′, somit liegt e0 nicht auf P ′. Bzgl. e0 zerfalltT in die Teilbaume Tu und Tv, wobei s und t jeweils in einem von beiden liegen (sonst gabe esin T mehr als einen einfachen Pfad zwischen ihnen). Da P ′ aber s und t verbindet und e0 nichtauf P ′ liegt, muss es ein Kante e′0 = u′, v′ 6= e0 geben mit u′ in Tu und v′ in Tv. Nun konnenwir einen neuen spannenden Baum T ′ in G bilden, indem wir e0 in T durch e′0 ersetzen. Wegenc(e′0) < c(e0) gilt aber

c(T ′) = c(T ) + c(e′0)− c(e0)︸ ︷︷ ︸<0

< c(T ) .

Wir haben also einen spannenden Baum T ′ in G mit geringeren Gesamtgewicht als T . Dieswiderspricht aber der Tatsache, dass T MST ist in G.

5

Page 6: Musterl osungenuni.walljumper.de/Info/algoss2010/loesung_11.pdf · 0 eine Kante in Tund q 0 2R mit c(e 0) q 0 0. Wir de nieren nun eine weitere Gewichts-funktion c 0: E!R >0 mit c

b) Ausgehend von den Knoten s und t springe man jeweils zum Vorgangerknoten des aktuellenKnoten, was mit Hilfe von parent moglich ist. Dabei werde jeder besuchte Knoten als ”gesehen“markiert. Irgendwann treffen sich diese beiden Prozesse, was man daran erkennt, dass ein bereitsmarkierter Knoten besucht wird.

Beide Prozesse merken sich bei ihrer Arbeit jeweils das ”umgekehrte“ parent, der eine in einemdurch eine Liste implementierten Stack, der andere in einer durch eine Liste implementiertenQueue. Sobald sich beide Prozesse getroffen haben, kann man zuerst die Queue und dann denStack leer raumen und so die Kanten des Pfades ausgeben (der Stack oder die Queue enthaltmoglicherweise ein paar Knoten zuviel, welche man beim entnehmen verwerfen muss).

Wichtig ist, dass man die beiden Prozesse nicht nacheinander ablaufen lasst sondern alternie-rend. D.h., man lasst die beiden Prozesse jeweils abwechselnd zum nachsten Vorgangerknotenspringen (sonst kann Laufzeit O(Pfadlange) nicht garantiert werden).

c) Da es in T zwischen zwei Knoten genau einen Pfad gibt, und der Jarnıck-Prim den Baumausgehend von einem Startknoten r wachsen lasst, kommt man durch das Ablaufen des parentirgnedwann zu diesem r. Beide Knoten Prozesse mussen sich daher irgendwann treffen.Dabeisind zwei Falle moglich:

Fall 1: s und t liegen nicht auf dem selben gerichteten Pfad nach r. Dann treffen sich beidegerichtete Pfade in einem Knoten v∗, spatestens aber in r. D.h. einer der beiden Prozesse trifftzuerst auf v∗ und markiert v∗, der zweite erkennt dies sobald er ebenfalls auf v∗ trifft und derAlgorithmus terminiert.

Fall 2: s und t liegen auf dem selben gerichteten Pfad nach r. Liege o.B.d.A. t zwischen s undr. Dann erreicht die von s gestartete Prozess irgendwann t und wir sind fertig. In diesem Fallsei v∗ := t.

Da in T alle einfachen Pfade eindeutig sind, ist der einfache Pfad zwischen s und t uber v∗ dierichtige Losung.

d) Da die beiden Prozesse alternierend ablaufen, stoppen sie jeweils spatestens nach Pfadlange + 1Schritten. Das Aufbauen und Abraumen der Stacks besteht in hochstens O(Pfadlange) Stackope-rationen. Sowohl alle Zugriffe auf parent als auch alle Stack- und Queueoperationen (Listenim-plementierung!) benotigen nur konstante Zeit. Insgesamt haben wir also O(Pfadlange) Laufzeit.

6