LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Slides:



Advertisements
Ähnliche Präsentationen
Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Advertisements

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Einführung in die Informatik: Programmierung und Software-Entwicklung
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Erkennen Sie die Kirchenkreise Heiteres Ratespiel Kirchen aus der Region.
Telefonnummer.
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Mh9S170Nr6 a. x1= –9; x2 = 1 b. x1= –4; x2 = 1 c. x1= 1; x2 = 2 d. leer e. x1= –15; x2 = 4,2 f. x1= –3,53; x2 = 1,28 g. leer h. x1= 0,2; x2 = 2 i. x1=
Internet facts 2008-II Graphiken zu dem Berichtsband AGOF e.V. September 2008.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Differentielles Paar UIN rds gm UIN
Maxwell-Boltzmann Ausgewählte Themen des analogen Schaltungsentwurfs
Prof. Dr. Bernhard Wasmayr
Studienverlauf im Ausländerstudium
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
AWA 2007 Natur und Umwelt Natürlich Leben
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
20:00.
Zusatzfolien zu B-Bäumen
Kopfrechnen Logisch 4 Seite 52 Start. 1 Wie viel fehlt bis zu 1 h? 43 min.
In der Schule.
Eine Einführung in die CD-ROM
Dokumentation der Umfrage
für Weihnachten oder als Tischdekoration für das ganze Jahr
1 Ein kurzer Sprung in die tiefe Vergangenheit der Erde.
Wir üben die Malsätzchen
Syntaxanalyse Bottom-Up und LR(0)
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Der Ablauf eines Clear Rex Klärzyklus
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Geometrische Aufgaben
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Symmetrische Blockchiffren DES – der Data Encryption Standard
Retuschen.ppt Die folgende Schau zeigt die Möglichkeiten, mit PhotoDraw Digitalbilder zu retuschieren. Vergleichen Sie jeweils zwei Bildpaare durch fleissiges.
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
1 Arbeitsgemeinschaft Biologische Psychiatrie Verordnungsgewohnheiten von Psychopharmaka Statuserhebung 2005 W.Günther G.Laux T.Messer N.Müller M.Schmauss.
1 Mathematical Programming Nichtlineare Programmierung.
Imperfekt Wie sagt man das mit Imperfekt
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Forschungsprojekt Statistik 2013 „Jugend zählt“ – Folie 1 Statistik 2013 „Jugend zählt“: Daten zur Arbeit mit Kindern und Jugendlichen.
Folie Einzelauswertung der Gemeindedaten
J-Team: Gymnasium Ulricianum Aurich und MTV Aurich Ein Projekt im Rahmen von UlricianumBewegt.de Euro haben wir schon…  8000 mal habt ihr bereits.
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
Technische Kommunikation
Einführung in die Volkswirtschaftslehre, Mikroökonomie und Wettbewerbspolitik Lothar Wildmann ISBN: © 2014 Oldenbourg Wissenschaftsverlag.
Sehen, Hören, Schmecken: wenn uns unsere Sinne täuschen
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
 Präsentation transkript:

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik 2 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen

LS 2 / Informatik 3 Graphalgorithmen Dijkstras Algorithmus Fällt unter die Kategorie gierige Algorithmen Laufzeit -> Präsenzübung

LS 2 / Informatik 4 Graphalgorithmen Single Source Shortest Path (SSSP) Eingabe: Gewichteter Graph G=(V,E) und Startknoten s Ausgabe: Für jeden Knoten u V seine Distanz zu s sowie einen kürzesten Weg Heute Negative Kantengewichte s

LS 2 / Informatik 5 Graphalgorithmen Single Source Shortest Path (SSSP) Eingabe: Gewichteter Graph G=(V,E) und Startknoten s Ausgabe: Für jeden Knoten u V seine Distanz zu s sowie einen kürzesten Weg Heute Negative Kantengewichte s

LS 2 / Informatik 6 Graphalgorithmen Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) s Was berechnet Dijkstras Algorithmus?

LS 2 / Informatik 7 Graphalgorithmen Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) s Was berechnet Dijkstras Algorithmus? 0

LS 2 / Informatik 8 Graphalgorithmen Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Was berechnet Dijkstras Algorithmus? s 0

LS 2 / Informatik 9 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s 0

LS 2 / Informatik 10 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s 0

LS 2 / Informatik 11 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s 0

LS 2 / Informatik 12 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s 0 2 5

LS 2 / Informatik 13 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s 0 2 5

LS 2 / Informatik 14 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 15 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 16 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 17 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 18 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 19 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 20 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 21 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Was berechnet Dijkstras Algorithmus? s

LS 2 / Informatik 22 Dijkstras Algorithmus(G,w,s) 1. Initialisiere SSSP 2. Q V[G] 3. while Q do 4. u ExtractMin(Q) 5. if color[u]=weiß then 6. color[u] schwarz 7. for each v Adj[u] do if d[u] + w(u,v)< d[v] then 9. d[v] d[u] + w(u,v) 10. DecreaseKey(v,d[v]) Graphalgorithmen Problem: Die Veränderung durch die negative Kante wird nicht mehr durch den Graphen propagiert s

LS 2 / Informatik 23 Graphalgorithmen Negative Zyklen Problem Kann Weg mit beliebig kleinen Kosten finden Hier z.B. von s nach t s t

LS 2 / Informatik 24 Graphalgorithmen Unser Ansatz Betrachte zunächst nur Eingaben ohne negative Zyklen Dynamische Programmierung Frage: Wie formuliert man das Problem rekursiv?

LS 2 / Informatik 25 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt.

LS 2 / Informatik 26 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor.

LS 2 / Informatik 27 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor. Betrachte den kürzesten s-t-Weg P mit der geringsten Kantenanzahl.

LS 2 / Informatik 28 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor. Betrachte den kürzesten s-t-Weg P mit der geringsten Kantenanzahl. In P kommt mindestens ein Knoten zweimal vor. Sei dies Knoten v.

LS 2 / Informatik 29 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor. Betrachte den kürzesten s-t-Weg P mit der geringsten Kantenanzahl. In P kommt mindestens ein Knoten zweimal vor. Sei dies Knoten v. Wir können den Teil von v nach v entfernen, da jeder Kreis nichtnegative Länge hat und erhalten einen kürzesten s-t-Weg mit weniger Kanten.

LS 2 / Informatik 30 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor. Betrachte den kürzesten s-t-Weg P mit der geringsten Kantenanzahl. In P kommt mindestens ein Knoten zweimal vor. Sei dies Knoten v. Wir können den Teil von v nach v entfernen, da jeder Kreis nichtnegative Länge hat und erhalten einen kürzesten s-t-Weg mit weniger Kanten. Widerspruch zur Wahl von P!

LS 2 / Informatik 31 Graphalgorithmen Lemma 56 Wenn G keine negativen Zyklen hat und t von s aus erreichbar ist, dann gibt es einen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Beweis Annahme: Es gibt keinen kürzesten s-t-Weg in G, in dem kein Knoten doppelt vorkommt. Dann kommt in jedem kürzesten s-t-Weg ein Knoten zweimal vor. Betrachte den kürzesten s-t-Weg P mit der geringsten Kantenanzahl. In P kommt mindestens ein Knoten zweimal vor. Sei dies Knoten v. Wir können den Teil von v nach v entfernen, da jeder Kreis nichtnegative Länge hat und erhalten einen kürzesten s-t-Weg mit weniger Kanten. Widerspruch zur Wahl von P!

LS 2 / Informatik 32 Graphalgorithmen Eine rekursive Problemformulierung Opt(i,v) sei Länge eines optimalen s-v-Wegs, der maximal i Kanten benutzt Sei P ein optimaler s-v-Weg mit max. i Kanten Opt(i,v) = Opt(i-1,v), falls P weniger als i Kanten hat Opt(i-1,u) + w(u,v), falls P genau i Kanten benutzt und (u,v) die letzte Kante bezeichnet s v u

LS 2 / Informatik 33 Graphalgorithmen Die Rekursion Für i>0 gilt Opt(i,v) = min {Opt(i-1,v), min(Opt(i-1,u) + w(u,v))} Für i=0 gilt Opt(0,s)=0 und Opt(0,v)= für v s (u,v) E

LS 2 / Informatik 34 sabcd Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M s a b c d 2

LS 2 / Informatik 35 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M s a b c d 2 sabcd

LS 2 / Informatik 36 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd

LS 2 / Informatik 37 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 38 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 39 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 40 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 41 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 42 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 43 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 44 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 45 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 46 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 47 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 48 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 49 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 50 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i s a b c d 2

LS 2 / Informatik 51 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i s a b c d 2

LS 2 / Informatik 52 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen a b sabcd i s a b c d 2

LS 2 / Informatik 53 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 54 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 55 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 56 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i s a b c d 2

LS 2 / Informatik 57 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i s a b c d 2

LS 2 / Informatik 58 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i s a b c d 2

LS 2 / Informatik 59 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen sabcd i a b s a b c d 2

LS 2 / Informatik 60 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 61 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 62 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 63 Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M Graphalgorithmen s a b c d 2 sabcd i

LS 2 / Informatik 64 Bellman-Ford(G,s) Laufzeit: O(|V|²) für Init. von M 1. for each v V do M[0][v]= O(|V|) 2. M[0][s] 0 O(|V|) 3. for i 1 to |V|-1 do O(|V|) 4. for each v V do O(|V|²) 5. Berechne M[i,v] nach Rekursionsgleichung O(|V|³) 6. return M O(1) O(|V|² |E|) Graphalgorithmen

LS 2 / Informatik 65 Graphalgorithmen Satz 57 Sei G ein Graph ohne negative Zyklen. Algorithmus Bellman-Ford berechnet für jeden Knoten v aus G die Kosten eines kürzesten s-v-Pfads. Laufzeit der ersten Version des Algorithmus ist O(|V|³) und Speicherbedarf ist O(|V|²).

LS 2 / Informatik 66 Graphalgorithmen Satz 57 Sei G ein Graph ohne negative Zyklen. Algorithmus Bellman-Ford berechnet für jeden Knoten v aus G die Kosten eines kürzesten s-v-Pfads. Laufzeit der ersten Version des Algorithmus ist O(|V|³) und Speicherbedarf ist O(|V|²). Beweis Korrektheit per Induktion. Sei Opt(i,v) die Länge eines kürzesten Weges mit i Kanten von s nach v. Wir zeigen: M(i,v)=Opt(i,v). (I.A.) M(0,v)=Opt(0,v), da M(0,s)=0=Opt(0,s) und M(0,v)= =Opt(0,v) für v s. (I.V.) Die Aussage gilt für i-1.

LS 2 / Informatik 67 Graphalgorithmen Satz 57 Sei G ein Graph ohne negative Zyklen. Algorithmus Bellman-Ford berechnet für jeden Knoten v aus G die Kosten eines kürzesten s-v-Pfads. Laufzeit der ersten Version des Algorithmus ist O(|V|³) und Speicherbedarf ist O(|V|²). Beweis (I.S.) Wir zeigen Opt(i,v) M(i,v) und Opt(i,v)M(i,v). Damit folgt die Gleichheit. (1) Opt(i,v) M(i,v): Nach (I.V.) enthält M(i-1,v) die Länge eines kürzesten Weges mit maximal i-1 Kanten von s nach v. M(i-1,u)+w(u,v) gibt nach (I.V.) die Länge eines Weges mit maximal i-1 Kanten von s nach u gefolgt von der Kante (u,v) an. Damit handelt es sich um die Länge eines Weges mit maximal i Kanten von s nach v. Da M(i,v) als die Länge eines kürzesten Weges aus einer Menge von Wegen mit maximal i Kanten gewählt wird, gilt (1).

LS 2 / Informatik 68 Graphalgorithmen Satz 57 Sei G ein Graph ohne negative Zyklen. Algorithmus Bellman-Ford berechnet für jeden Knoten v aus G die Kosten eines kürzesten s-v-Pfads. Laufzeit der ersten Version des Algorithmus ist O(|V|³) und Speicherbedarf ist O(|V|²). Beweis (2) Opt(i,v) M(i,v): Betrachte den kürzesten Weg mit i Kanten von s nach v. Hat dieser weniger als i Kanten, so folgt nach (I.V.) M(i,v)M(i-1,v)=Opt(i-1,v)=Opt(i,v) ist. Hat der Weg genau i Kanten, so betrachte die letzte Kante des Weges, sagen wir (u,v). Wegen M(i,v) M(i-1,u) + w(u,v) gilt (2) auch in diesem Fall. Es folgt: Opt(i,v) = M(i,v).

LS 2 / Informatik 69 Graphalgorithmen Satz 57 Sei G ein Graph ohne negative Zyklen. Algorithmus Bellman-Ford berechnet für jeden Knoten v aus G die Kosten eines kürzesten s-v-Pfads. Laufzeit der ersten Version des Algorithmus ist O(|V|³) und Speicherbedarf ist O(|V|²). Beweis Da es nach Lemma 56 in einem Graph ohne negativen Zyklen immer einen kürzesten Weg mit mit maximal n-1 Kanten gibt, ist Opt(n-1,v) die Länge eines kürzesten Weges von s nach v. Wie bereits gezeigt, ist die Laufzeit O(|V|³). Der Speicherbedarf für das |V| |V| Feld ist O(|V|²).

LS 2 / Informatik 70 Graphalgorithmen Lemma 58 M(n,v)=M(n-1,v) gilt für alle Knoten v V eines Graphen G=(V,E) genau dann, wenn G keinen negativen Zyklus. Beweis Gilt M(n,v)=M(n-1,v) so folgt wegen der Rekursion auch M(m,v)=M(n,v) für jedes m>n. Außerdem gilt nach dem Beweis von Satz 57 M(m,v)=Opt(m,v). Annahme: Es gibt negativen Zyklus C und M(m,v)=M(n,v) für alle m>n. Sei c die Anzahl Kanten in C. Dann ist sicher, dass für jeden Knoten v aus C gilt: Opt(n,v) < Opt(n+c,v). Dies ist richtig, da man zunächst einmal um C laufen kann und dann den Weg mit maximal n Kanten und Kosten Opt(n,v) nimmt. Widerspruch, denn M(n+c,v)=Opt(n+c,v)<Opt(n,v)=M(n,v).

LS 2 / Informatik 71 Graphalgorithmen Lemma 58 M(n,v)=M(n-1,v) gilt für alle Knoten v V eines Graphen G=(V,E) genau dann, wenn G keinen negativen Zyklus. Beweis Hat G keinen negativen Zyklus so gibt es nach Lemma 56 für jeden Knoten v einen kürzesten s-v-Weg mit maximal n-1 Kanten. Daher enthält Opt(n-1,v) bereits die Längen der kürzesten Wege und somit dieselben Werte wie Opt(n,v). Es folgt nach dem Beweis von Satz 57: M(n,v)=Opt(n,v)=Opt(n-1,v)=M(n-1,v).

LS 2 / Informatik 72 Graphalgorithmen Verbesserung der Laufzeit Vor Beginn des Algorithmus berechne in O(|V|+|E|) Zeit eine umgedrehte Adjazenzliste Jeder Knoten v hat eine Liste In[v] der eingehenden Kanten

LS 2 / Informatik 73 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to |V|-1 do 4. for each v V do 5. Berechne M[i,v] nach Rekursionsgleichung 6. return M

LS 2 / Informatik 74 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to n-1 do 4. for each v V do 5. min M[i-1][v] 6. for each (u,v) In[v] do 7. if M[i-1][u]+w(u,v)<min then min M[i-1][u]+w(u,v) 8. M[i][v] min 9. return M

LS 2 / Informatik 75 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[0][v]= 2. M[0][s] 0 3. for i 1 to n-1 do 4. for each v V do 5. min M[i-1][v] 6. for each (u,v) In[v] do 7. if M[i-1][u]+w(u,v)<min then min M[i-1][u]+w(u,v) 8. M[i][v] min 9. return M Laufzeit O(|V|²+|V| |E|), da in Zeile 6 und 7 jede Kante einmal durchlaufen wird. Laufzeit O(|V|²+|V| |E|), da in Zeile 6 und 7 jede Kante einmal durchlaufen wird.

LS 2 / Informatik 76 Graphalgorithmen Verbesserung des Speicherbedarfs Wir speichern nur einen Wert M[v] ab Dieser speichert die Länge des kürzesten Wegs nach v, den wir bisher gefunden haben Wir führen jetzt nur das Update M[v] = min ( M[v], min (M[u]+w(u,v))) durch Beobachtung 59 (1) M[v] ist immer die Länge irgendeines Wegs von v nach t und (2) nach i Runden ist M[v] höchstens so groß wie die Länge des kürzesten Wegs mit i Kanten.

LS 2 / Informatik 77 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[v]= 2. M[s] 0 3. for i 1 to n-1 do 4. for each v V do 5. min M[v] 6. for each (u,v) In[v] do 7. if M[u]+w(u,v)<min then min M[u]+w(u,v) 8. M[v] min 9. return M Speicherbedarf: O(|V|)

LS 2 / Informatik 78 Graphalgorithmen Bellman-Ford(G,s) 1. for each v V do M[v]= 2. M[s] 0 3. for i 1 to n-1 do 4. for each v V do 5. for each (u,v) In[v] do 6. if M[u]+w(u,v)<M[v] then M[v] M[u]+w(u,v) 7. return M Speicherbedarf: O(|V|)

LS 2 / Informatik 79 Graphalgorithmen Satz 60 Sei G ein Graph ohne negative Zyklen. Die verbesserte Implementierung des Algorithmus Bellman-Ford berechnet für jeden Knoten v die Kosten eines kürzesten s-v-Pfads. Laufzeit der verbesserten Implementierung des Algorithmus ist O(|V|²+|V| |E|) und Speicherbedarf ist O(|V|). Beweis Die Korrektheit folgt aus Satz 57 zusammen mit Beobachtung 59. Die Laufzeit haben wir im Wesentlichen analysiert.

LS 2 / Informatik 80 Graphalgorithmen Negative Zyklen Wir können negative Zyklen daran erkennen, dass sich für mindestens einen Knoten v der Wert M[v] noch nach n Iterationen ändert Wir können uns die Wege über ein Feld merken, ähnlich wie bei der Breitensuche

LS 2 / Informatik 81 Graphalgorithmen Zusammenfassung Bellman-Ford für allgemeine Kantengewichte; Laufzeit O(|V|²+|V| |E|) Negative Zyklen können erkannt werden