86
10. GRAPHEN 2 KÜRZESTE WEGE Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen - Ma5hias Thimm ([email protected]) 1

Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10. GRAPHEN2 KÜRZESTEWEGE

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 1

Page 2: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Erinnerung: Gewichtete Graphen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 2

Datenstrukturen

Page 3: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Kürzeste Wege 1/2

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 3

Gegeben: (Di-)Graph G=(V,E,γ) mit einer Gewichtsfunktion:

Erinnerung: •  Ein(gerichteter)WegWisteineSequenzvonKnotenW=(v1,...,vn)mitv1,...,vn∈V,fürdiegilt: (vi,vi+1)∈Efürallei=1,...,n-1

•  EinWegWheisstPfad,fallszusätzlichgilt:vi≠vjfürallei,j=1,...,nmiti≠j(keinedoppeltenKnoten)

� : E ! N

Problemstellungen

Page 4: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Kürzeste Wege 2/2

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 4

Gewicht eines Pfades P: Aufsummierung der einzelnen Kantengewichte

Distanz zweier Knoten d(u,v) ist Gewicht eines günstigsten Pfades von u nach v

w(P ) =n�1X

i=1

�((vi, vi+1))

Problemstellungen

Page 5: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

KürzesteWegeProbleme

SPSP:SinglepairshortestpathEingabe:GraphG,Startknotens,EndknotentAusgabe:Distanzd(s,t)

SSSP:Singlesourceshortestpaths

Eingabe:GraphG,StartknotensAusgabe:Distanzend(s,v)füralleKnotenv

APSP:All-pairsshortestpaths

Eingabe:GraphGAusgabe:Distanzend(v,w)füralleKnotenv,w

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 5

Problemstellungen

Page 6: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Gewichtete Graphen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 6

Ergänzung zum Graph-Interface:

Datenstrukturen

public interface Graph{public int addNode();public boolean addEdge(int orig, int dest);public Collection<Integer> getChildren(int node);public Collection<Integer> getNodes();public int getWeight(int orig, int dest);

}

Page 7: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Spezialfall: homogene Gewichte

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 7

•  Falls alle Gewichte identisch sind (wir also eigentlich einen ungewichteten Graphen haben), kann mit leichten Modifikationen schon die Breitensuche zur Lösung von SSSP genutzt werden

•  Idee (sei Gewicht aller Kanten 1): 1.  Vom Startknoten ausgehend betrachte alle direkten

Nachfolger (diese haben Distanz 1 zum Startknoten) 2.  Jeder Nachfolger eines direkten Nachfolgers wird eine

um 1 erhöhte Distanz haben 3.  Da die Knoten entsprechend ihrer Distanz vom

Startknoten aus abgearbeitet werden, müssen wir uns zu jedem Startknoten nur seinen direkten Vorgänger merken

Algorithmen

Page 8: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Breitensuche für kürzeste Wege

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 8

public int[] ssspBfs(Graph g, int s){int[] d = new int[g.getNodes().size()];int[] pred = new int[g.getNodes().size()];Set<Integer> visited = new HashSet<Integer>();Queue<Integer> q = new LinkedList<Integer>();d[s] = 0;for(Integer m: g.getChildren(s)){

q.add(m);pred[m] = s;

}visited.add(s);while(!q.isEmpty()){

int node = q.poll();d[node] = d[pred[node]] + 1;visited.add(node);for(Integer m: g.getChildren(node))

if(!visited.contains(m) && !q.contains(m)){q.add(m);pred[m] = node;

}}return d;

}

Algorithmen

Page 9: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Terminierung)DerAlgorithmusssspBfs terminiertnachendlicherZeit.Beweis:FolgtausdementsprechendenResultatfürdieBreitensucheTheorem(Korrektheit)FallsalleKantengewichtegleich1sind,löstderAlgorithmusssspBfs dasProblemSSSPBeweis:FolgtausdementsprechendenResultatfürdenAlgorithmusvonDijkstra(siehenächstesKapitel)Theorem(Laufzeit)IstsowohldieLaufzeitvongetChildrenlinearinderAnzahlderKinderalsauchgetNodeslinearinderAnzahlderKnoten,sohatderAlgorithmusssspBfseineLaufzeitvonO(|V|+|E|).Beweis:FolgtausdementsprechendenResultatfürdieBreitensucheAlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 9

Analysen

Page 10: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10.1DERALGORITHMUSVON DIJKSTRA

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 10

Page 11: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Berechnung kürzester Wege: Dijkstra

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 11

Dijkstra Algorithmus zur Berechnung kürzester Wege (SSSP): •  Dijkstra 1959 •  Iterative Erweiterung einer Menge von „günstig“

erreichbaren Knoten •  Greedy-Algorithmus

–  Ähnlich Breitensuche –  Nur für nichtnegative Gewichte –  Berechnet (iterativ verfeinernd) Distanzwerte d(v,w) –  Prioritätswarteschlange zum Herauslesen des jeweils

minimalen Elements

Algorithmen

Page 12: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Priority-Queues

EinePriority-QueuePisteinedynamischeDatenstruktur,die(mindestens)diefolgendenOperahonenunterstützt:•  P.add(Element):Elementhinzufügen•  P.poll():MinimalstesElementzurückgeben•  P.contains(Element):EnthältPdasElement?DieOrdnungzurSorherungmussdabeivorabdefiniertsein.EinHeapkannbeispielweisezurImplemenherungeinerPriority-Queuebenutztwerden(add-OperahonistdannO(logn),poll-OperahonO(logn),undcontains-OperahonistO(n))BenutztmanzusätzlichzumHeapnocheinenbinärenSuchbaumaufdenselbenElementensoistauchcontainsinO(logn)realisierbar.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 12

Datenstrukturen

Page 13: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Priority-QueueinJava

IstdeineMap“Knoten”->”AktuellerDistanzwertvonsaus”,soist

PriorityQueue<Integer> queue =new PriorityQueue<Integer>(g.getNumberOfNodes(),new DijkstraComparator(d));

einePriority-Queue,diebeiiterahvemAufrufqueue.poll()immerdasElementmitdemminimalstend-Wertzurückliefert

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 13

class DijkstraComparator implements Comparator<Integer>{Map<Integer,Integer> d = new HashMap<Integer,Integer>();

public DijkstraComparator(Map<Integer,Integer> d){this.d = d;

}

public int compare(Integer o1, Integer o2) {return d.get(o1).compareTo(d.get(o2));

}}

Datenstrukturen

Page 14: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Idee

1.  InihalisierealleDistanzwertevonszuvmit∞(undvonszusmit0)

2.  InihalisiereeinePriority-QueueQmitallenv3.  ExtrahieredasminimaleElementwminausQ4.  AktualisierealleDistanzwertederNachfolgervon

wmininQ:–  IstesgünshgerüberwminzueinemKnotenwzu

kommen?–  Fallsjasetzed(s,w)=d(s,wmin)+γ(wmin,w)

5.  Wiederholebei3solangeQnochElementehat

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 14

Algorithmen

Page 15: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Initialisierung

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 15

D[s]+γ(s,u) <D[u] ? 0 + 10 < ∞ => D[u] = 10

D[s]+γ(s,x) <D[x] ? 0 + 5 < ∞ => D[x] = 5

Algorithmen

Page 16: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Schritt 1

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 16

D[x]+γ(x,u) <D[u] ? 5 + 3 < 10 => D[u] = 8

D[y] analog

Algorithmen

Page 17: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Schritt 2

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 17

Algorithmen

Page 18: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Schritt 3

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 18

Algorithmen

Page 19: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus: Schritt 4

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 19

Algorithmen

Page 20: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Dijkstras Algorithmus in Java

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 20

Map<Integer,Integer> dijkstra(Graph g, int s){Map<Integer,Integer> d = new HashMap<Integer, Integer>();PriorityQueue<Integer> queue = //Initialisiere Priority-Queue entsprechendfor(Integer n: g){

if(!n.equals(s)){d.put(n, Integer.MAX_VALUE);queue.add(n);

}}d.put(s, 0);queue.add(s);

while(!queue.isEmpty()){Integer u = queue.poll();for(Integer v: g.getChildren(u)){

if(queue.contains(v)){if(d.get(u) + g.getWeight(u,v) < d.get(v)){

d.put(v, d.get(u) + g.getWeight(u,v));//refresh queuequeue.remove(v);queue.add(v);

}}

}}

return d;}

Algorithmen

Page 21: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Terminierung)DerAlgorithmusvonDijkstraterminiertfüreineendlicheEingabenachendlicherZeit.Beweis:InjedemSchri5derwhile-SchleifewirdeinElementausqueueenrerntunddieSchleifeendetsobaldqueueleerist.JederKnotenhatnurendlichevieleKinder,deswegenistauchdieLaufzeitderinnerenfor-Schleifeendlich.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 21

Analysen

Page 22: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Korrekheit)SindalleKantengewichtenicht-negahv,soenthältdamEndedieDistanzwertevonszuallenanderenKnoten.Beweis:Beachte,dasssobaldeinKnotenvausqueueenrerntwird,derWertfürvindnichtmehrgeändertwird.Zeigenun,dassgilt:Wirdvausqueueenrernt,soenthältddenDistanzwertvonsnachv.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 22

Analysen

Page 23: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

ZeigediesdurchIndukhonnachi=„AnzahlbisherausqueueenrernterKnoten“:•  i=0:AmAnfanghatqueuenurfürseinenendlichenWertgespeichert,alleanderenWertesind∞.DerKnotenswirdauchstetszuerstenrerntundderDistanzwertist0.Diesistauchkorrekt,daszusichselbstDistanz0hatundalleanderenKnotenkeinegeringereDistanzvonsaushabenkönnen(daalleKantennicht-negahveGewichtehaben).

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 23

Analysen

Page 24: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

•  i→i+1:Seivder(i+1)teKnoten,derausqueueenrerntwird.–  Da die bisher bearbeiteten Knoten den korrekten

Distanzwert haben, ist der neue Distanzwert durch den „günstigsten“ aus dem bisher bearbeiteten Teilgraphen um genau eine Kante hinausgehenden Pfad bestimmt.

–  Jeder Pfad zum Zielknoten dieses Pfades, der um mehr als eine Kante aus dem bearbeiteten Bereich hinausgeht, ist teurer als die gewählte, da Kosten mit zusätzlich hinzugenommenen Kanten nicht sinken können.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 24

Analysen

Page 25: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Anmerkung:•  SindalleKantengewichteidenhsch(beispielsweise=1),soarbeitetderAlgorithmusvonDijkstradieKnoteninderselbenReihenfolgeabwiedieBreitensuche

•  DiePriorityQueueenthältdannstetsnurKnotenmitDistanzwerten,diesichummaximal1unterscheiden

•  DarausfolgtdirektdieKorrektheitderBreitensuchefürdieBerechnungkürzesterWege(füridenhscheGewichte)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 25

Analysen

Page 26: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Laufzeit)SeiG=(V,E,g)eingerichteterGraph.DerLaufzeitaufwandvonDijkstrasAlgorithmusfüreinenbeliebigenKnotensinGistO((|E|+|V|)log|V|).Beweis:Beachte:WirdfürdiePriority-QueuebeispielsweiseeinHeapverwendet,sohatdieOperahonpoll()einenAufwandvonO(logk)(mitk=„AnzahlElementeinQueue“).Sei|V|=nund|E|=m.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 26

Analysen

Page 27: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Map<Integer,Integer> dijkstra(Graph g, int s){Map<Integer,Integer> d = new HashMap<Integer, Integer>();PriorityQueue<Integer> queue = //Initialisiere Priority-Queue entsprechendfor(Integer n: g){

if(!n.equals(s)){d.put(n, Integer.MAX_VALUE);queue.add(n);

}}d.put(s, 0);queue.add(s);

while(!queue.isEmpty()){Integer u = queue.poll();for(Integer v: g.getChildren(u)){

if(queue.contains(v)){if(d.get(u) + g.getWeight(u,v) < d.get(v)){

d.put(v, d.get(u) + g.getWeight(u,v));//refresh queuequeue.remove(v);queue.add(v);

}}

}}

return d;

Analyse

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 27

O(logn)

O(n)

n-mal

O(logn)

JedeKanteimGraphwirdhierirgendwanngenaueinmalbetrachtet,Schleifenrumpfwirdalsom-malausgeführtInsgesamt:

O(nlogn)+O(n)+n*O(logn)+m*O(logn)=O((m+n)logn)

O(logn)(proKanteim

Graph)

Analysen

Page 28: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Anmerkung

•  DurchBenutzungsog.Fibonacci-Heaps(ansta5normalerHeaps)kanndieLaufzeitvonO((m+n)logn)verbessertwerdenzuO(m+nlogn)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 28

Analysen

Page 29: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Nachteil des Algorithmus von Dijkstra

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 29

•  Kürzester Weg wird immer gefunden •  Aber: viele unnötige, sinnlose Wege werden

gegangen •  Bei negativen Kanten auch falsche Ergebnisse

A B C D

E

2 2 2

-6 1

Analysen

Page 30: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10.2DERALGORITHMUSVON BELLMANN-FORD

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 30

Page 31: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Berechnung kürzester Wege: Bellmann-Ford

•  Dijkstra: nur nichtnegative Gewichte •  Variante mit negativen Gewichten?

–  Macht nur bei gerichteten Graphen Sinn –  Problem: Zyklen mit negativem Gesamtgewicht

•  Beispiel für Gewinne statt Kosten: –  Verbindungsnetze mit Bonus-Gewinnen für bestimmte

Verbindungen, um Auslastung zu erhöhen (z.B. bei Fluggesellschaften sind Flüge mit Zwischenstopp oft billiger aus diesem Grund)

•  Konkret: Bellman-Ford-Algorithmus •  Löst ebenfalls das SSSP Problem

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 31

Algorithmen

Page 32: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Kürzeste Wege mit negativen Kantengewichten

•  Beispielgraph

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 32

Algorithmen

Page 33: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford-Algorithmus: Prinzip

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 33

•  Mehrere Durchläufe –  Bestimme jeweils beste bisher mögliche (um eine

Kante längere) Verbindung –  Der i-te Durchlauf berechnet korrekt alle Pfade vom

Startknoten der Länge i –  Längster Pfad ohne Zyklus hat Länge kleiner als |V|-1 –  Ergebnis also spätestens nach |V|-1 Durchläufen

stabil –  Prinzip der Dynamischen Programmierung

•  Ist Ergebnis nach |V|-1 Durchläufen nicht stabil, ist negativ bewerteter Zyklus enthalten

Algorithmen

Page 34: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford-Algorithmus (Pseudocode)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 34

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Algorithmen

Page 35: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford: Initialisierung

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 35

Algorithmen

Page 36: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford: Schleife i=1

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 36

§  u hat den Wert 10 und x den Wert 5 bekommen

Algorithmen

Page 37: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford: Schleife i=2

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 37

§  Knoten u wurde aktualisiert (Pfad über x) §  Änderung an u wird erst im nächsten Schritt an v propagiert

Algorithmen

Page 38: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford: Schleife i=3

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 38

§  Negativ gewichtete Kante (v,y) zur Berechnung von D[y] genutzt

Algorithmen

Page 39: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Bellman-Ford: Schleife i=4

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 39

§  Negativ gewichtete Kante (v,y) zur Berechnung von D[y] genutzt §  Greedy-Verfahren das jeden Knoten nur einmal besucht, hätte für y den in jedem Schritt lokal optimalen Pfad <s,x,y> gewählt und nicht das beste Ergebnis geliefert

Algorithmen

Page 40: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Terminierung)DerAlgorithmusBF(G,s)terminiertfüreineendlicheEingabeGinendlicherZeit.Beweis:AlleSchleifensindendlich.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 40

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 41: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Korrektheit)IstGeinGraph,derkeinenZyklusmitnegahvemGewichthat,soenthältDnachAufrufBF(G,s)dieDistanzwertevonszuallenKnoten.Beweis:Wirzeigen,dassdiefolgendenAussagenSchleifeninvariantederfor-Schleife(Schleifenvariablei)sind:1.  IstD[i][v]<∞,soistD[i][v]derWerteinesPfadesvonsnachv2.  IstD[i][v]<∞,soistD[i][v]derkleinsteWerteinesPfadesvons

nachvmitmaximaliKanten3.  D[i][v]<∞gdw.eseinenPfadvonsnachvmitgleichoder

wenigeralsiKantengibtDaGkeineZyklenmitnegahvemGewichthat,istdieLängedeslängstenkürzestenPfadesmaximal|AnzahlKnoten|-1(jederKnotenwirdaufdiesemPfadeinmalbesucht).AlsogiltnachdemletztenSchleifendurchlaufnach2und3.dieAussagedesTheorems.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 41

Analysen

Page 42: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Nochzuzeigen:1.  IstD[i][v]<∞,soistD[i][v]derWerteinesPfades

vonsnachv2.  IstD[i][v]<∞,soistD[i][v]derkleinsteWerteines

PfadesvonsnachvmitmaximaliKanten3.  D[i][v]<∞gdw.eseinenPfadvonsnachvmit

gleichoderwenigeralsiKantengibtWirzeigendieseAussagendurchIndukhonnachi(=#Schleifendurchläufe).•  i=0:VordemerstenSchleifendurchlaufgiltnurD[0][s]=0<∞.Darausfolgtdirekt1.,2.,3.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 42

Analysen

Page 43: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

•  i→i+1:Zunächst3.:–  IstD[i][v]endlich,soistD[i+1][v]endlichunddieAussagegiltnachIV

–  IstD[i+1][v]indiesemSchri5aufeinenendlichenWertgesetztworden,sogabeseinu,sodassD[i][u]vorherschonendlichwarundD[i+1][v]=D[i][u]+γ(u,v).NachIVgibteseinenPfadvonsnachuderLängei.DamitgibteseinenPfadderLängei+1vonsnachv.

–  UmgekehrtwirdbeiExistenzeinesPfadesderLängei+1dieserauchgefundenundD[i+1][v]aufeinenendlichenWertgesetzt.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 43

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 44: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

•  i→i+1:Zeige1.„IstD[i+1][v]<∞,soistD[i+1][v]derWerteinesPfadesvonsnachv“:NachIVisD[i][u]derWerteinesPfadesvonsnachu.WirdD[i+1][v]=D[i][u]+γ(u,v)gesetztsoistsomitD[i+1][v]derWertdesPfadesvonsnachvüberu.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 44

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 45: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

•  i→i+1:Zeige2.„IstD[i][v]<∞,soistD[i][v]derkleinsteWerteinesPfadesvonsnachvmitmaximaliKanten“:NachIVisD[i][v]derkleinsteWerteinesPfadesvonsnachvmitmaximaliKanten“.MachefolgendeFallunterscheidung:–  1.Fall:EsexishereeinPfadP1vonsnachvmiti+1Kanten,der

minimalenWertunterallenPfadenvonsnachvmitgleichoderwenigeralsi+1Kantenhat.BetrachtedenvorletzenKnotenuaufdiesemPfadunddenTeilpfadP2vonP1vonsnachu.DieserTeilpfadhatminimalenWertunterallenPfadendermaximalenLängeivonsnachu(ansonstenwäreP1keinPfadmitminimalemWert).NachIVistD[i][u]genaudieserWertundD[i][u]+γ(u,v)derWertvonP1,derdannimi+1tenDurchgangaktualisiertwird.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 45

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 46: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

–  2.Fall:EsexisherekeinPfadvonsnachvmiti+1Kanten,derminimalenWertunterallenPfadenvonsnachvmitgleichoderwenigeralsi+1Kantenhat.

•  1.Unterfall:EsexishertkeinPfadvonsnachvmitmaximali+1Kanten.Dannbleibtnach3.D[i+1][v]=∞.

•  2.Unterfall:EsexisherteinPfadvonsnachvmitk<i+1Kanten,derminimalenWertunterallenPfadenvonsnachvmitgleichoderwenigeralsi+1Kantenhat.DannistnachIVD[i][v]genaudieserWertundwirdimi+1tenDurchgangauchnichtaktualisiert.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 46

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 47: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Graph mit negativ gewichtetem Zyklus

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 47

•  Zyklus s, x, u, v, y, s hat die Kosten 5+3+1-5-7 = -3 •  Jeder Durchlauf durch den Zyklus erzeugt also einen Gewinn, es gibt hier

keinen günstigsten Pfad endlicher Länge!

§  Betrachten wir die Situation nach |V|-1 Iterationen §  Eine Kante könnte noch verbessert werden gdw. der Graph einen Zyklus mit negativer Länge enthält

§  Beispiel:

Analysen

Page 48: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Laufzeit)SeiG=(V,E,g)eingerichteterGraph.DerLaufzeitaufwandvomAlgorithmusvonBellmann-FordfüreinenbeliebigenKnotensinGistO(|V||E|).Beweis:EinfacheSchleifenanalyse.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 48

algorithm BF(G, s) Eingabe: ein Graph G mit Startknoten s

D[0][s] = 0D[0][t] = ∞ for all other tfor i := 1 to |V|-1 do

for each v∈V doD[i][v] := D[i-1][v]

od for each (u,v)∈ E do if D[i-1][u]+γ((u,v)) < D[i][v] then

D[i][v] := D[i-1][u] + γ((u,v)) fi

odod

Analysen

Page 49: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10.3DERALGORITHMUSVON FLOYD-WARSHALL

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 49

Page 50: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

All Pairs Shortest Paths: Floyd-Warshall

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 50

•  Dijkstras Algorithmus und Bellman-Ford berechnen zu einem gegebenen Startknoten die kürzesten Wege zu allen anderen Knoten (Single Source Shortest Paths – SSSP)

•  Berechnung aller kürzesten Wege zwischen allen Knoten v und w? –  Aufruf obiger Algorithmen für jeden Startknoten einzeln –  Geht das geschickter?

Antwort: Der Algorithmus von Floyd-Warschall löst das All Pairs Shortest Paths (APSP) Problem (nicht unbedingt effizienter aber eleganter), Prinzip: Dynamische Programmierung

Algorithmen

Page 51: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

All Pairs Shortest Paths: Problemdefinition (Wdh.)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 51

•  Gegeben Graph G=(V,E), finde für jedes Paar (v,w)∈VxV den Wert D(v,w) eines kürzesten Pfades

•  Annahme: keine negativen Kreise!

D s u v x y

s 0 8 9 5 4

u 3 0 1 -2 -4

v 2 10 0 7 -5

x 6 3 4 0 -1

y 7 15 6 12 0

Problemstellungen

Page 52: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Floyd-Warshall: Idee 1/3

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 52

•  Die Grundidee des Floyd-Warshall Algorithmus ist die folgende Beobachtung:

v k w… …

§  Geht ein kürzester Weg {(v,a1),…,(an,k), (k,an+1),…,(am,w)} von v nach w über k, dann gilt w  {(v,a1),…,(an,k)} ist ein kürzester Weg von v nach k w  {(k,an+1),…,(am,w)} ist ein kürzester Weg von k nach w

§  s → y: {(s,x),(x,u),(u,v),(v,y)} §  s → u: {(s,x),(x,u)} §  u → y: {(u,v),(v,y)}

Algorithmen

Page 53: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Floyd-Warshall: Idee 2/3

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 53

•  Beachte, dass die Umkehrung nicht gilt!

v k w… …

§  Ist {(v,a1),…,(an,k)} ein kürzester Weg von v nach k und ist {(k,an+1),…,(am,w)} ein kürzester Weg von k nach w dann gilt nicht notwendigerweise, dass §  {(v,a1),…,(an,k), (k,an+1),…,(am,w)} ein kürzester Weg von v nach

w ist!

§  x → y: {(x,y)} §  y → v: {(y,v)} §  x → v: {(x,y),(y,v)} ist nicht k. W.!

Algorithmen

Page 54: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Floyd-Warshall: Idee 3/3

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 54

•  Jedoch gilt: –  Ist bekannt, dass ein kürzester Weg zwischen v und w nur

Knoten aus V’ ⊆ V enthält so gilt entweder •  kürzester Weg zwischen v und w benutzt nur Knoten aus

V’\{k}, oder •  kürzester Weg zwischen v und w ist Konkatenation aus

–  kürzestem Weg zwischen v und k und –  kürzestem Weg zwischen k und w –  und beide Wege enthalten nur Knoten aus V’\{k}

DV 0[i, j] =

⇢�(i, j) falls V 0 = ;min{DV 0\{k}[i, j], DV 0\{k}[i, k] +DV 0\{k}[k, j]} fur k 2 V 0

Algorithmen

Page 55: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Floyd-Warshall Algorithmus (Pseudocode)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 55

algorithm FW(G) Eingabe: ein Graph G

for each v,v‘∈V D[v,v‘] = γ((v,v‘)) (or ∞)

for each k ∈ V do for each i ∈ V do

for each j ∈ V do if D[i,k]+D[k,j] < D[i,j] then

D[i,j] := D[i,k]+D[k,j] fi

od od od

Algorithmen

Page 56: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 56

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

InihalisiereDmitKantengewichten(nichtvorhandeneKantehabenGewicht∞,KantengewichtzumKnotenselberist0)

Anmerkung:ImFolgendenbetrachtenwirnursolcheSchleifendurchgängemitk≠i,k≠j,i≠j

Algorithmen

Page 57: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 57

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[u,s] + D[s,v] < D[u,v] ?

k

j i

Algorithmen

Page 58: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 58

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[u,s] + D[s,x] < D[u,x] ?

k

j

i

Algorithmen

Page 59: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 59

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[u,s] + D[s,y] < D[u,y] ?

k

j

i

Algorithmen

Page 60: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 60

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[v,s] + D[s,u] < D[v,u] ?

k

j i

Algorithmen

Page 61: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 61

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[v,s] + D[s,x] < D[v,x] ?

k

j

i

Algorithmen

Page 62: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 62

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[v,s] + D[s,y] < D[v,y] ?

k

j

i

Algorithmen

Page 63: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 63

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[x,s] + D[s,u] < D[x,u] ?

k

j

i

Algorithmen

Page 64: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 64

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[x,s] + D[s,v] < D[x,v] ?

k

j

i

Algorithmen

Page 65: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 65

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[x,s] + D[s,y] < D[x,y] ?

k

j i

Algorithmen

Page 66: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 66

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 ∞ 6 ∞ 0

D[y,s] + D[s,u] < D[y,u] ? è D[y,u] = D[y,s] + D[s,u] = 7 + 10 = 17

k

j

i

Algorithmen

Page 67: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 67

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 17 6 ∞ 0

D[y,s] + D[s,v] < D[y,v] ?

k

j

i

Algorithmen

Page 68: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 68

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 17 6 ∞ 0

D[y,s] + D[s,x] < D[y,x] ? è D[y,x] = D[y,s] + D[s,x] = 7 + 5 = 12

k

j i

Algorithmen

Page 69: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 69

D s u v x y

s 0 10 ∞ 5 ∞u ∞ 0 1 -2 ∞v ∞ ∞ 0 ∞ -5

x ∞ 3 ∞ 0 2

y 7 17 6 12 0

D[s,u] + D[u,v] < D[s,v] ? è D[s,v] = D[s,u] + D[u,v] = 10 + 1 = 11

k j

i

Algorithmen

Page 70: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 70

•  …

D s u v x y

s 0 8 9 5 4

u 3 0 1 -2 -4

v 2 10 0 7 -5

x 6 3 4 0 -1

y 7 15 6 12 0

Algorithmen

Page 71: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Terminierung)DerAlgorithmusFW(G)terminiertfüreineendlicheEingabeGinendlicherZeit.Beweis:AlleSchleifensindendlich.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 71

algorithm FW(G) Eingabe: ein Graph G

for each v,v‘∈V D[v,v‘] = γ((v,v‘)) (or ∞)

for k ∈ V do for each i ∈ V do

for each j ∈ V do if D[i,k]+D[k,j] < D[i,j] then

D[i,j] := D[i,k]+D[k,j] fi

od od od

Analysen

Page 72: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Korrektheit)IstGeinGraph,derkeinenZyklusmitnegahvemGewichthat,soenthältDnachAufrufFW(G)dieDistanzwertevonallenKnotenzuallenanderenKnoten.Beweis:Betrachte folgende Schleifeninvariante (äußerste for-Schleife mit Laufvariable k):

Nach der k-ten Schleifeniteration gilt, dass D[v,w] (für alle v,w) der Wert eines kürzesten Pfades ist, der nur Knoten 1,…,k benutzt

Nach Beendigung des Algorithmus gilt damit die Aussage des Theorems.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 72

Analysen

Page 73: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Noch zu zeigen: Nach der k-ten Schleifeniteration gilt, dass D[v,w] (für alle v,w) der Wert eines kürzesten Pfades ist, der nur Knoten 1,…,k benutzt

Zeige dies durch Induktion: •  k=0 (Initialisierung): Nach der Initialisierung gilt

D[v,w]=∞gdw. es keine Kante von v nach w gibt (dann muss jeder Pfad zwischen v und w mind. einen anderen Knoten enthalten). Ist D[v,w] endlich so ist dies genau der Wert der Kante (es gibt also einen Pfad, der keine weiteren Knoten beinhaltet).

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 73

Analysen

Page 74: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

•  k→ k+1: Nach Induktionsannahme ist D[v,w] der Wert eines kürzesten Pfades, der nur Knoten aus 1,…,k enthält. Im k+1-Schleifendurchgang wird überprüft, ob es einen kürzeren Weg über k+1 gibt und ggfs. aktualisiert. Es wird also genau folgende Gleichung ausgenutzt: Anschliessend ist also D[v,w] der Wert eines kürzesten Pfades ist, der nur Knoten 1,…,k+1 benutzt.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 74

DV 0[i, j] =

⇢�(i, j) falls V 0 = ;min{DV 0\{k}[i, j], DV 0\{k}[i, k] +DV 0\{k}[k, j]} fur k 2 V 0

Analysen

Page 75: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Laufzeit)SeiG=(V,E,g)eingerichteterGraph.DerLaufzeitaufwandvomAlgorithmusvonFloyd-WarshallaufGistO(|V|3).Beweis:EinfacheSchleifenanalyse.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 75

algorithm FW(G) Eingabe: ein Graph G

for each v,v‘∈V D[v,v‘] = γ((v,v‘)) (or ∞)

for each k ∈ V do for each i ∈ V do

for each j ∈ V do if D[i,k]+D[k,j] < D[i,j] then

D[i,j] := D[i,k]+D[k,j] fi

od od od

Analysen

Page 76: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10.4DASTRAVELINGSALESMAN PROBLEM

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 76

Page 77: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Traveling Salesman Problem (TSP)

•  Gegeben: Graph mit n Knoten (Städten) und m Kanten (Straßen); Straßen sind mit Entfernung versehen

•  Gesucht: kürzeste Route, die alle Städte besucht und an den Startpunkt zurückkehrt

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 77

Problemstellungen

Page 78: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP im Detail

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 78

•  Gegeben: –  n Städte –  n x n Entfernungsmatrix M = ( mi,j ) –  mi,j Entfernung von Stadt i nach Stadt j (evtl. ∞)

•  Gesucht: –  Rundreise über alle Städte mit insgesamt minimaler Länge –  Permutationen π : {1,….,n} → {1,….,n}

d.h. π(i) gibt an, welche Stadt im i-ten Schritt besucht wird –  Gesucht wird Permutation π mit

Steffen Staab

[email protected]

Algorithmen & Datenstrukturen

6 of 48

WeST

TSP im Detail

� Gegeben:

� n Städte

� n × n Entfernungsmatrix M = ( mi,j )� mi,j Entfernung von Stadt i nach Stadt j

� Gesucht:

� Rundreise über alle Städte mit insgesamt minimaler Länge

� Permutationen { : {1,….,n} � {1,….,n}

d.h. {(i) gibt an, welche Stadt im i-ten Schritt besucht wird

� Gesucht wird Permutation { mit

C(|) = m|(n),|(1)+nc1X

i=1

m|(i),|(i+1) ist minimal.

Problemstellungen

Page 79: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP mit dynamischer Programmierung (nach Held, Karp)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 79

•  betrachte g(i,S): Länge des kürzesten Weges von Stadt i über jede Stadt in S nach Stadt 1 –  Da Rundreise, kann Stadt 1 beliebig gewählt werden

•  Es gilt:

•  Idee: baue Rundreisen von hinten schrittweise auf •  Lösung: g(1,{2,…,n})

Steffen [email protected]

Algorithmen & Datenstrukturen7 of 48

WeST

TSP mit dynamischer Programmierung

� betrachte g(i,S): Länge des kürzesten Weges von Stadt i über jede Stadt in S nach Stadt 1� Da Rundreise, kann Stadt 1 beliebig gewählt werden

� Es gilt:

� Idee: baue Rundreisen von hinten schrittweise auf� Lösung: g(1,{2,…,n})

g(i, S) =

(mi,1 falls S = �minj�S(mi,j + g(j, S c {j})) sonst

Algorithmen

Page 80: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP: HK-Algorithmus (Pseudocode)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 80

Algorithmen

Rückwege

GesamteReise

Teillösungen/-reisen

Page 81: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP: Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 81

•  4 Städte, symmetrische Entfernungen M=

•  Initialisierung (Länge 1 = Rückkehr von der letzten Station nach Station 1):

g[ 2 , { } ] = 4 g[ 3 , { } ] = 9 g[ 4 , { } ] = 8

1 2 3 4 1 0 4 9 8 2 4 0 12 2 3 9 12 0 10 4 8 2 10 0

j

i

Algorithmen

Page 82: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP: Beispiel II

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 82

Die letzten 2 Schritte inklusive Rückkehr zur Station 1: g[ 2 , { 3 } ] = 12 + g[3, {} ] = 12 + 9 = 21 g[ 2 , { 4 } ] = 2 + 8 = 10 g[ 3 , { 2 } ] = 12 + 4 = 16 g[ 3 , { 4 } ] = 10 + 8 = 18 g[ 4 , { 2 } ] = 2 + 4 = 6 g[ 4 , { 3 } ] = 10 + 9 = 19

1 2 3 4

1 0 4 9 8

2 4 0 12 2

3 9 12 0 10

4 8 2 10 0

Algorithmen

Page 83: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

TSP: Beispiel III

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 83

Lösung: 1,2,4,3,1 Die letzten 4 Schritte, d.h. komplette Rundreise g[ 1,{ 2 , 3 , 4 } ] = min(m1,2 + g[2,{3,4}], m1,3 + g[3,{2,4}], m1,4 + g[4,{2,3}]) = 25 Die letzten 3 Schritte inklusive Rückkehr zu Station 1: g[ 2 , { 3 , 4 } ] = min(m2,3 + g[3,{4}], m2,4 + g[4,{3}]) = min(12+18, 2+19) = 21 g[ 3 , { 2 , 4 } ] = min(m3,2 + g[2,{4}], m3,4 + g[4,{2}]) = min(12+10, 10+6) = 16 g[ 4 , { 2 , 3 } ] = min(m4,2 + g[2,{3}], m4,3 + g[3,{2}]) = min(2+21, 10+16) = 23 Die letzten 2 Schritte inklusive Rückkehr zur Station 1: g[ 2 , { 3 } ] = 12 + 9 = 21 g[ 2 , { 4 } ] = 2 + 8 = 10 g[ 3 , { 2 } ] = 12 + 4 = 16 g[ 3 , { 4 } ] = 10 + 8 = 18 g[ 4 , { 2 } ] = 2 + 4 = 6 g[ 4 , { 3 } ] = 10 + 9 = 19

1 2 3 4 1 0 4 9 8 2 4 0 12 2 3 9 12 0 10 4 8 2 10 0

Algorithmen

Page 84: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Analyse

Theorem(Korrektheit)DerHK-AlgorithmuslöstdasTSP.OhneBeweisTheorem(Laufzeit)DerHK-AlgorithmshateineLaufzeitvonO(n22n).OhneBeweisAnmerkung:TSPisteinNP-vollständigesProblem,d.h.vermutlichexishertkeinpolynomiellerAlgorithmus.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 84

Analysen

Page 85: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

10.KÜRZESTEWEGEZUSAMMENFASSUNG

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 85

Page 86: Algorithmen und Datenstrukturen 10. GRAPHEN 2 · Der Algorithmus von Dijkstra terminiert für eine endliche Eingabe nach endlicher Zeit. Beweis: In jedem Schri5 der while-Schleife

Zusammenfassung

•  Algorithmus von Djikstra –  Löst SSSP

–  Laufzeit O(|E|+|V|log|V|)(ophmiert)

•  Algorithmus von Bellmann-Ford –  Löst SSSP

–  Laufzeit O(|V||E|)

•  Algorithmus von Floyd-Warshall –  Löst APSP

–  Laufzeit O(|V|3)

•  Das Traveling Salesman Problem AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 86