9. Übung Algorithmen I

Ähnliche Dokumente
10. Übung Algorithmen I

8. Übung zu Algorithmen I 15. Juni 2016

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Graphentheorie. Eulersche Graphen. Eulersche Graphen. Eulersche Graphen. Rainer Schrader. 14. November Gliederung.

Bemerkung: Der vollständige Graph K n hat n(n 1)

Diskrete Strukturen Kapitel 4: Graphentheorie (Grundlagen)

Vollständiger Graph. Definition 1.5. Sei G =(V,E) ein Graph. Gilt {v, w} E für alle v, w V,v w, dann heißt G vollständig (complete).

Diskrete Strukturen Kapitel 4: Graphentheorie (Bäume)

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)

Nachbarschaft, Grad, regulär, Inzidenz

Für die Anzahl der Kanten in einem vollständigen Graphen (und damit für die maximale Anzahl von Kanten in einem einfachen Graphen) gilt:

4. Kreis- und Wegeprobleme

5. Bäume und Minimalgerüste

Lösungen zu Kapitel 5

Freie Bäume und Wälder

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Mayr)

Diskrete Strukturen. Hausaufgabe 1 (5 Punkte) Hausaufgabe 2 (5 Punkte) Wintersemester 2007/08 Lösungsblatt Januar 2008

Algorithmen II Vorlesung am

1. Übung Algorithmen I

Eulerweg, Eulerkreis. Das Königsberger Brückenproblem. Definition 3.1. Ein Weg, der jede Kante von G genau einmal

= n (n 1) 2 dies beruht auf der Auswahl einer zweielementigen Teilmenge aus V = n. Als Folge ergibt sich, dass ein einfacher Graph maximal ( n E = 2

10. Übungsblatt zu Algorithmen I im SS 2010

Grundbegriffe der Informatik

Graphentheorie Graphentheorie. Grundlagen Bäume Eigenschaften von Graphen Graphen-Algorithmen Matchings und Netzwerke

3 Klassifikation wichtiger Optimierungsprobleme

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Algorithmen und Datenstrukturen SS09. Foliensatz 16. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Vorlesung Diskrete Strukturen Eulersche und Hamiltonsche Graphen

Algorithmische Graphentheorie

KAPITEL 3 MATCHINGS IN BIPARTITEN GRAPHEN

Das Briefträgerproblem

Grundbegriffe der Informatik

Graphen. Leonhard Euler ( )

Einheit 11 - Graphen

1. Einige Begriffe aus der Graphentheorie

Zentralübung zur Vorlesung Diskrete Strukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2-1. Seminar -

Studientag zur Algorithmischen Mathematik

WS 2009/10. Diskrete Strukturen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Bäume und Wälder. Seminar: Graphentheorie Sommersemester 2015 Dozent: Dr. Thomas Timmermann

Algorithmische Methoden für schwere Optimierungsprobleme

Euler und Hamiltonkreise

Westfählische Wilhelms-Universität. Eulersche Graphen. Autor: Jan-Hendrik Hoffeld

Bäume und Wälder. Definition 1

2. November Gradfolgen Zusammenhang Kürzeste Wege. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37

WS 2008/09. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen

Übungsklausur Algorithmen I

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 6: Graphentheorie

15. Elementare Graphalgorithmen

Graphentheorie. Formale Grundlagen (WIN) 2008S, F. Binder. Vorlesung im 2008S

Graphen. Graphen und ihre Darstellungen

1. Einführung. Grundbegriffe und Bezeichnungen. Beispiele. gerichtete Graphen. 1. Einführung Kapitelübersicht

Minimal spannende Bäume

Diskrete Mathematik. Hamiltonsche Graphen Teil I. Karina Arndt

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Grundlagen: Algorithmen und Datenstrukturen

Maximale s t-flüsse in Planaren Graphen

Graphentheorie. Zusammenhang. Zusammenhang. Zusammenhang. Rainer Schrader. 13. November 2007

Tutoraufgabe 1 (Suchen in Graphen):

André Krischke Helge Röpcke. Graphen und Netzwerktheorie Grundlagen Methoden Anwendungen

Diskrete Mathematik 1

WS 2009/10. Diskrete Strukturen

3. Musterlösung. Problem 1: Boruvka MST

Übungsblatt 2 - Lösung

Vorlesung 2 KÜRZESTE WEGE

8 Diskrete Optimierung

Programmiertechnik II

2. Repräsentationen von Graphen in Computern

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Kombinatorische Optimierung

1.Aufgabe: Minimal aufspannender Baum

Graphentheorie 1. Diskrete Strukturen. Sommersemester Uta Priss ZeLL, Ostfalia. Hausaufgaben Graph-Äquivalenz SetlX

WS 2009/10. Diskrete Strukturen

11. Übung Algorithmen I

Vorlesung Diskrete Strukturen Eulersche und Hamiltonsche Graphen

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

12. Übung Algorithmen I

Wie findet man den optimalen Weg zum Ziel? Klassische Probleme der Kombinatorischen Optimierung

Breitensuche BFS (Breadth First Search)

Isomorphie von Bäumen

Graphenalgorithmen I

Fünf-Farben-Satz. Seminar aus reiner Mathematik, WS 13/14. Schweighofer Lukas, November Seite 1

Zweizusammenhang und starker Zusammenhang

Theoretische Grundlagen der Informatik

Anmerkungen zur Übergangsprüfung

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

9. Übung Algorithmen I

Transkript:

Timo Bingmann, Christian Schulz INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS 1 KIT Timo Universität Bingmann, des LandesChristian Baden-Württemberg Schulz und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik

Übersicht Statistik der Mittsemesterklausur Grundlagen der Graphentheorie Bäume Eulersche und Hamiltonsche Kreise Bellman-Ford-Algorithmus Negative Kreise finden 2 Timo Bingmann, Christian Schulz

Statistik der Mittsemesterklausur 3 Timo Bingmann, Christian Schulz

Punkteverteilung 20 Teilnehmer 15 10 5 0 0 5 10 15 20 25 30 Punkte 4 Timo Bingmann, Christian Schulz

Punkte pro Aufgabe Prozent der Punktzahl 0.8 0.6 0.4 0.2 0 DList Invariante Karatsuba-Ofman Heap Formeln Hashtabelle erzeugen Duplikat finden unbeschränktes Array Zweierpotenz Kreis im DAG markieren Hash-Kollisionen Sorts Vor/Nachteile Master-Theorem Matrixmultiplikation Listen/Arrays Vor/Nachteile HT verkettet vs offen Listen in HTs Sentinels Heap deletemin 5 Timo Bingmann, Christian Schulz

Grundlagen der Graphentheorie 6 Timo Bingmann, Christian Schulz

Graphen und Relationen Relation Ist eine Menge M gegeben, dann heißt R M M eine Relation und man schreibt auch x R y, falls (x, y) R. Spezielle Relationen: symmetrisch, transitiv, antisymmetrisch, Äquivalenz-Relationen, etc. Beispiele: x = y, x y oder x y (teilt). gerichteter Graph Ein gerichteter Graph G = (V, E) besteht aus Knoten V und Kanten E, wobei V nicht leer ist und E V V ist. ungerichteter Graph Ein ungerichteter Graph G = (V, E) besteht aus Knoten V und Kanten E, wobei V nicht leer ist und E {{x, y} x, y V, x y} ist. 7 Timo Bingmann, Christian Schulz

Teilbarkeitsgraph Ein gerichteter Graph G = (V, E) mit V = {1,..., 9} und E = {(x, y) x, y V, x y und x y}, wobei x y genau dann, wenn x teilt y, also n N : xn = y gilt. 9 1 2 8 3 7 4 6 5 8 Timo Bingmann, Christian Schulz

Der Hyperwürfel Q 3 Ein ungerichteter Graph G = (V, E) mit V = {{0, 1} 3 } und E = {{x, y} x, y V und x y {100, 010, 001}}. 011 111 010 110 001 101 000 100 Zwei Knoten x, y V sind also adjazent, wenn x und y sich in genau einer Ziffer unterscheiden. 9 Timo Bingmann, Christian Schulz

Adjazenz und Knotengrad Sei G = (V, E) ein ungerichteter Graph. Bereits bekannt: Zwei Knoten x, y V mit x y heißen genau dann adjazent, wenn {x, y} E. Ein Knoten x V und eine Kante e E heißen genau dann inzident, wenn x e. Für ein Knoten x V ist die Adjazenzmenge oder Nachbarn-Menge also Adj(x) = {y V x y und {x, y} E}. Der Grad eines Knoten x V ist deg(x) := Adj(x). (auch deg G (x) oder d G (x) oder γ G (x) oder...) 10 Timo Bingmann, Christian Schulz

Knoten mit speziellem Knotengrad Ein Knoten v V mit deg(v) = 0 heißt isoliert. Ein Knoten v V mit deg(v) = 1 heißt Randknoten. Ein Graph G = (V, E) heißt knotenregulär vom Grad r, wenn deg(v) = r für alle v V gilt. Beispiel: der Hyperwürfel Q 3 ist 3-knotenregulär. Ein ( V 1)-knotenregulärer Graph heißt vollständig. K 6 K 4 K 5 11 Timo Bingmann, Christian Schulz

Handshake-Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(v) = 2 E. v V 12 Timo Bingmann, Christian Schulz

Handshake-Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(v) = 2 E. v V Beweis: Betrachte die Menge M := {(v, e) v V, e E mit v e}. 12 Timo Bingmann, Christian Schulz

Handshake-Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(v) = 2 E. v V Beweis: Betrachte die Menge M := {(v, e) v V, e E mit v e}. Für jede Kante e E sind genau zwei Paare in M, also M = 2 E. 12 Timo Bingmann, Christian Schulz

Handshake-Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(v) = 2 E. v V Beweis: Betrachte die Menge M := {(v, e) v V, e E mit v e}. Für jede Kante e E sind genau zwei Paare in M, also M = 2 E. Für jeden Knoten v V sind genau alle ausgehenden Kanten in M, also M = v V deg(v). 12 Timo Bingmann, Christian Schulz

Handshake-Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(v) = 2 E. v V Beweis: Betrachte die Menge M := {(v, e) v V, e E mit v e}. Für jede Kante e E sind genau zwei Paare in M, also M = 2 E. Für jeden Knoten v V sind genau alle ausgehenden Kanten in M, also M = v V deg(v). Korollar: In jedem Graph gibt es eine gerade Anzahl von Knoten mit ungeradem Knotengrad. 12 Timo Bingmann, Christian Schulz

Wege, Kreise und Zusammenhang Ist G = (V, E) ein ungerichteter Graph, dann heißt eine Folge (v 0, e 1, v 1, e 2,..., v n 1, e n, v n ) mit v i V und e i E eine Kantenfolge, ein Kantenweg oder nur Weg (path), wenn e i = {v i 1, v i } für i = 1,..., n. Alternativ, kann man in Graphen ohne Mehrfachkanten eine Kantenfolge auch durch die Knotenspur (v 0,..., v n ) beschreiben. heißt eine Kantenfolge ein Kantenpfad oder nur Pfad (simple path), wenn alle besuchten Knoten verschieden sind. heißen zwei Knoten x, y V verbindbar (connected), wenn es einen Weg mit x = v 0 und y = v n gibt. heißt der Graph G zusammenhängend (connected), wenn jedes Paar (x, y) V V verbindbar ist. 13 Timo Bingmann, Christian Schulz

Wege, Kreise und Zusammenhang Ist G = (V, E) ein ungerichteter Graph, dann heißt ein Kantenfolge (v 0, e 1, v 1, e 2,..., v n 1, e n, v n ) ein Kantenkreis oder Kantenzyklus (cycle), wenn v 0 = v n. heißt der Graph G kreisfrei, kreislos oder zykelfrei (cycle free), wenn G keinen Kantenkreis enthält. 14 Timo Bingmann, Christian Schulz

Bäume 15 Timo Bingmann, Christian Schulz

Warum Bäume? H H H H H H H H H H H H C C C C C C C C H H H H H H H H H Oktan H H H H C H H C C C C C H C H C H H H H H H H ein Isooktan H H H H H C H H H C C C C C H H H C H H H H C H H H ein anderes Isooktan 16 Timo Bingmann, Christian Schulz

Charakterisierung von Bäumen Definition: Ein ungerichteter Graph heißt Baum, wenn es von jedem Knoten zu jedem anderen Knoten genau einen Kantenweg gibt. Satz: Für einen ungerichteten Graphen G = (V, E) sind äquivalent: 1 G ist ein Baum. 2 G ist zusammenhängend und E = V 1. 3 G ist zusammenhängend und kreislos. 4 G ist kreislos und E = V 1. 5 G ist maximal kreislos: G ist kreislos und jede zusätzliche Kante zwischen nicht-adjazenten Knoten ergibt einen Kreis. 6 G ist minimal zusammenhängend: G ist zusammenhängend und bei Entfernen einer beliebige Kante zerfällt G. 17 Timo Bingmann, Christian Schulz

Satz von Cayley Ist G = (V, E) ein zusammenhängender ungerichteter Graph, dann heißt ein Untergraph (V, E ) mit E E ein G aufspannender Baum, wenn dieser ein Baum ist. Satz von Cayley Im vollständigen Graph K n gibt es genau n n 2 verschiedene K n aufspannende Bäume. Beispiel: K 4 hat folgende 16 aufspannende Bäume: 18 Timo Bingmann, Christian Schulz

Eulersche und Hamiltonsche Kreise Ein Kantenkreis heißt Eulersch, wenn er alle Kanten des Graphen genau einmal enthält. Ein Kantenkreis heißt Hamiltonsch, wenn er alle Knoten des Graphen genau einmal enthält (Beginn und Ende einmal gezählt). Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen Eulerschen/Hamiltonschen Kreis enthält. 19 Timo Bingmann, Christian Schulz

Eulersche und Hamiltonsche Kreise Ein Kantenkreis heißt Eulersch, wenn er alle Kanten des Graphen genau einmal enthält. Ein Kantenkreis heißt Hamiltonsch, wenn er alle Knoten des Graphen genau einmal enthält (Beginn und Ende einmal gezählt). Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen Eulerschen/Hamiltonschen Kreis enthält. 19 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Klar, denn G muss zusammenhängend sein und beim Passieren eines Knoten wird dieser durch eine Kante betreten und durch eine andere verlassen. Da jede Kante genau einmal verwendet wird, muss der Knotengrad aller Knoten gerade sein. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenpfad P = (v 0, e 1, v 1, e 2,..., v r 1, e r, v r ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 1: v 0 = v r. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenpfad P = (v 0, e 1, v 1, e 2,..., v r 1, e r, v r ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 1: v 0 = v r. Wäre v 0 v r, dann ist v 0 zu einer ungeraden Anzahl Kanten in P inzident. Da v 0 aber geraden Knotengrad hat, gibt es eine inzidente Kante e / P. Der Pfad P kann mit e verlängert werden, ist also nicht maximal! Widerspruch = v 0 = v r, also ist P ein Kreis. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenkreis C = (v 0, e 1, v 1, e 2,..., v r 1, e r, v 0 ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 2: E(C) := {e i i = 1,..., r} = E. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenkreis C = (v 0, e 1, v 1, e 2,..., v r 1, e r, v 0 ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 2: E(C) := {e i i = 1,..., r} = E. Angenommen E(C) E, so betrachten wir G := (V, E \ E(C)). Da G zusammenhängt, muss G und C einen gemeinsamen Knoten w mit deg G (w) > 0 haben. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenkreis C = (v 0, e 1, v 1, e 2,..., v r 1, e r, v 0 ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 2: E(C) := {e i i = 1,..., r} = E. Angenommen E(C) E, so betrachten wir G := (V, E \ E(C)). Da G zusammenhängt, muss G und C einen gemeinsamen Knoten w mit deg G (w) > 0 haben. Alle Knoten in G haben geraden Knotengrad, also kann man in G einen Kreis C finden, der durch w geht. 20 Timo Bingmann, Christian Schulz

Satz von Euler (Graphen) Satz: Ein Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = Angenommen der Graph hat diese Eigenschaften, so betrachtet man eine Kantenkreis C = (v 0, e 1, v 1, e 2,..., v r 1, e r, v 0 ) maximaler Länge, in dem also keine Kante zweimal vorkommt. Behauptung 2: E(C) := {e i i = 1,..., r} = E. Angenommen E(C) E, so betrachten wir G := (V, E \ E(C)). Da G zusammenhängt, muss G und C einen gemeinsamen Knoten w mit deg G (w) > 0 haben. Alle Knoten in G haben geraden Knotengrad, also kann man in G einen Kreis C finden, der durch w geht. C kann an Knoten w mit C verlängert werden. Widerspruch zur Maximalität = E(C) = E. 20 Timo Bingmann, Christian Schulz

Algorithmus: Eulersche Kreise Idee: Erweitere einen Kantenpfad solange, bis er Eulersch wird. Überprüfe, ob jeder Knoten geraden Grad hat. Wähle v 0 V beliebig, setze P := (v 0 ). Sei P = (v 0, e 1, v 1,..., e i, v i ) der bisher konstruierte Pfad und G = (V, E \ E(P)) der Restgraph. 21 Timo Bingmann, Christian Schulz

Algorithmus: Eulersche Kreise Idee: Erweitere einen Kantenpfad solange, bis er Eulersch wird. Überprüfe, ob jeder Knoten geraden Grad hat. Wähle v 0 V beliebig, setze P := (v 0 ). Sei P = (v 0, e 1, v 1,..., e i, v i ) der bisher konstruierte Pfad und G = (V, E \ E(P)) der Restgraph. Ist E = E(P) so ist P ein gesuchter Eulerscher Kreis. Fertig. Sonst wähle eine zum Knoten v i inzident Kante e i+1 E \ E(P), wobei Kanten bevorzugt werden, die keine Brücken sind. Eine Kante ist keine Brücke, wenn G und (V, E \ {e 1,..., e i, e i+1 }) gleich viele Komponenten haben. Verlängere P mit der Kante e i+1 und wiederhole diesen Schnitt. 21 Timo Bingmann, Christian Schulz

Schmankerl: Graph-Isomorphie Welche Graphen sind gleich (isomorph)? 22 Timo Bingmann, Christian Schulz

Schmankerl: Graph-Isomorphie Welche Graphen sind gleich (isomorph)? Tipp: Es gibt fünf Klassen. 22 Timo Bingmann, Christian Schulz

Bellman-Ford-Algorithmus Wiederholung Ausgehend von einem Knoten s berechne kürzesten Wege-Baum 1: procedure BellmanFord(s : NodeId) : NodeArray NodeArray 2: d =,..., : NodeArray of R {, } 3: parent =,..., : NodeArray of NodeId 4: d[s] := 0; parent[s] := s 5: for i := 1 to n 1 do 6: forall e E do relax(e) 7: 8: forall e = (u, v) E do 9: if d[u] + c(e) < d[v] then infect(v) 10: return (d, parent) Erinnerung Kante (u, v) relaxieren: 1 wenn d[u] + c(u, v) < d[v] dann d[v] := d[u] + c(u, v), parent[v] := u 23 Timo Bingmann, Christian Schulz

Bellman-Ford-Algorithmus Wiederholung 1: procedure infect(v : NodeId) 2: if d[v] > then 3: d[v] = 4: forall e = (v, w) E do infect(w) 5: return (d, parent) Ziel: Korrektheit beweisen 1 zeige dies für Knoten v mit < µ[v] < 2 zeige dies für Knoten v mit = µ[v] 3 zeige dies für Knoten v mit = µ[v] (trivial) 24 Timo Bingmann, Christian Schulz

Bellman-Ford-Algorithmus Fall 1 relaxiere alle Kanten (in bel. Reihenfolge) n 1-mal alle kürzesten Pfade in G haben höchstens n 1 Kanten jeder kürzeste Pfad ist Teilfolge dieser Relaxierungen 25 Timo Bingmann, Christian Schulz

Bellman-Ford-Algorithmus Fall 1 jeder kürzeste Pfad ist eine Teilfolge dieser Relaxierungen t 1 t 2 {}}{{}}{{}}{ R =... relax(e 1 )... relax(e 2 )... relax(e k )..., R = (n 1) E. p = e 1, e 2,..., e k = s, v 1, v 2,..., v k ein kürzester Weg t k 25 Timo Bingmann, Christian Schulz

Bellman-Ford-Algorithmus Fall 2 Korrektheit für Knoten v mit = µ[v] sei e = (u, v) mit d[u] + c(e) < d[v] nach Relaxierungen (Zeile 7) d[v] = (kürzeste Wege ändern sich nicht mehr, siehe Fall 1) mittels infect: alle von v erreichbaren Knoten w d[w] = falls d[v] im post-processing nicht auf gesetzt gilt: d[x] + c(e) d[y] für jede Kante (x, y) von jedem Pfad von s nach v damit d[s] + c(p) d[v] für jeden Pfad p von s nach v damit d[v] µ(v) und damit d[v] = µ(v) 26 Timo Bingmann, Christian Schulz

Negative Kreise finden 1: procedure BellmanFord(s : NodeId) : NodeArray NodeArray 2: d =,..., : NodeArray of R {, } 3: parent =,..., : NodeArray of NodeId 4: d[s] := 0; parent[s] := s 5: for i := 1 to n 1 do 6: forall e E do relax(e) 7: Find negative cycle 8:... 9: return negativer Kreis ist gerichteter Kreis mit Gewicht < 0 Fragestellung: negativer Kreis in G (und gebe einen aus) 27 Timo Bingmann, Christian Schulz

Negative Kreise finden 1: procedure BellmanFord(s : NodeId) : NodeArray NodeArray 2: d =,..., : NodeArray of R {, } 3: parent =,..., : NodeArray of NodeId 4: d[s] := 0; parent[s] := s 5: for i := 1 to n 1 do 6: forall e E do relax(e) 7: Find negative cycle 8:... 9: return 2 0 27 Timo Bingmann, Christian Schulz s 2

Negative Kreise finden 1: procedure BellmanFord(s : NodeId) : NodeArray NodeArray 2: d =,..., : NodeArray of R {, } 3: parent =,..., : NodeArray of NodeId 4: d[s] := 0; parent[s] := s 5: for i := 1 to n 1 do 6: forall e E do relax(e) 7: Find negative cycle 8:... 9: return Reachability? s R 27 Timo Bingmann, Christian Schulz

Negative Kreise finden Allgemein Hilfsknoten H + Kanten (H, v) für v V mit Gewicht 0 H Nach Ausführung von Bellman-Ford (in Zeile 7): negativen Kreise C: (u, v) C : d[u] + c(e) < d[v] 28 Timo Bingmann, Christian Schulz

Negativen Kreis ausgeben Nach Ausführung von Bellman-Ford (in Zeile 7): negativen Kreise C: (u, v) C : d[u] + c(e) < d[v] Ausgabe eines negativen Kreises: Übungsblatt 29 Timo Bingmann, Christian Schulz

30 Timo Bingmann, Christian Schulz