Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
1
Bellman-Ford og Floyd-Warshall Kristian Veøy veoy@stud.ntnu.no
Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy 10/06/09
2
Korteste vei - repetisjon
Vi har en vektet graf Vi vil finne en minimal vekt-sum sti imellom noder 10000 10000 1 S 1 T 1 10000 10000 10/06/09
3
Korteste vei - repetisjon
Noder som ikke kan nå hverandre har avstand ∞ (wij = ∞) 10000 j 10000 1 S 1 ∞ T 1 10000 10000 i 10/06/09
4
Korteste vei - repetisjon
Noder har avstand 0 til seg selv 10000 j 10000 1 S 1 T 1 10000 10000 i 10/06/09
5
Korteste vei - repetisjon
Vi vil ha sykelfrie stier (simple paths) 10/06/09
6
Korteste vei - repetisjon
Vi vil ha sykelfrie stier (simple paths) Om vi har en negativ sykel har stien vektsum -∞ 10/06/09
7
Korteste vei - repetisjon
Vi vil ha sykelfrie stier (simple paths) Om vi har en negativ sykel har stien vektsum -∞ Om vi har en positiv sykel blir stien kortere av å fjerne den 10/06/09
8
Korteste vei - repetisjon
Vi vil ha sykelfrie stier (simple paths) Om vi har en negativ sykel har stien vektsum -∞ Om vi har en positiv sykel blir stien kortere av å fjerne den Om vi har en 0-vekt sykel kan vi fjerne den uten at det påvirker vekten til stien 10/06/09
9
Korteste vei - repetisjon
Vi vil ha sykelfrie stier (simple paths) Om vi har en negativ sykel har stien vektsum -∞ Om vi har en positiv sykel blir stien kortere av å fjerne den Om vi har en 0-vekt sykel kan vi fjerne den uten at det påvirker vekten til stien Vi tar kun for oss sykelfrie stier 10/06/09
10
Korteste vei - repetisjon
def relax(u, v): if d[v] > d[u] + weight[u][v]: d[v] = d[u] + weight[u][v] parent[v] = u d = 11 p = z v 2 u d = 6 p = x 10/06/09
11
Korteste vei - repetisjon
def relax(u, v): if d[v] > d[u] + weight[u][v]: d[v] = d[u] + weight[u][v] parent[v] = u d = 8 p = u v 2 u d = 6 p = x 10/06/09
12
Dijkstras algoritme - repetisjon
Korteste vei en-til-alle uten negative kanter Velg node med kortest avstand og oppdater estimater 10/06/09
13
Dijkstras algoritme - repetisjon
Korteste vei en-til-alle uten negative kanter Velg node med kortest avstand og oppdater estimater Intuitivt: Det laveste estimatet kan umulig forbedres ettersom vi ikke har negative kanter 10/06/09
14
Dijkstras algoritme - repetisjon
3 2 1 1 S T 1 1 10 10/06/09
15
Dijkstras algoritme - repetisjon
3 2 1 1 S T 1 1 10 10/06/09
16
Dijkstras algoritme - repetisjon
3 2 1 1 S T 1 1 1 10 10/06/09
17
Dijkstras algoritme - repetisjon
2 3 2 1 1 S T 1 1 1 10 10/06/09
18
Dijkstras algoritme - repetisjon
2 3 2 1 1 S T 1 1 1 10 10/06/09
19
Dijkstras algoritme - repetisjon
2 3 2 1 1 S T 1 1 1 10 10/06/09
20
Dijkstras algoritme - repetisjon
2 3 2 1 1 S T 1 1 1 1+1 10 10/06/09
21
Dijkstras algoritme - repetisjon
2 3 2 1 1 S T 1 1 1 2 10 10/06/09
22
Dijkstras algoritme - repetisjon
2 3 2 2 1 1 S T 1 1 1 2 10 10/06/09
23
Dijkstras algoritme - repetisjon
2 3 2 2 1 1 S T 1 1 1 2 10 10/06/09
24
Dijkstras algoritme - repetisjon
Kjøretid avhengig av implementasjon: Array: O(V²) fint for dense grafer Heap: O(E lg V) fint for sparse grafer 10/06/09
25
Bellman-Ford Korteste vei en-til-alle
Men, her kan vi ha negative kanter Da kan negative sykler oppstå 10/06/09
26
Bellman-Ford Den korteste veien kan maks gå innom alle nodene; ellers har vi en sykel 10/06/09
27
Bellman-Ford Den korteste veien kan maks gå innom alle nodene; ellers har vi en sykel Vi kan utnytte at en dekomponert korteste vei består av korteste veier: K S T 10/06/09
28
Bellman-Ford Den korteste veien kan maks gå innom alle nodene; ellers har vi en sykel Vi kan utnytte at en dekomponert korteste vei består av korteste veier: K n-1 1 S T n 10/06/09
29
Bellman-Ford Hvis vi først finner alle veier som bruker i kanter, kan vi utvide disse til å bruke i+1 kanter Sjekk for alle kanter om vi kan gi en kortere vei 10/06/09
30
Bellman-Ford Hvis vi først finner alle veier som bruker i kanter, kan vi utvide disse til å bruke i+1 kanter Sjekk for alle kanter om vi kan gi en kortere vei Begynn med stier av lengde 1, og utvid til lengde V - 1 10/06/09
31
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = nil d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil 10/06/09
32
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = nil d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil 10/06/09
33
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil 10/06/09
34
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil 10/06/09
35
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil 10/06/09
36
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil 10/06/09
37
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil 10/06/09
38
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil 10/06/09
39
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = ∞ p = nil 10/06/09
40
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = ∞ p = nil 10/06/09
41
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = 3 p = U 10/06/09
42
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = 3 p = U 10/06/09
43
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
44
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
45
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
46
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
47
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
48
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
49
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
50
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
51
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = -1 p = S 10/06/09
52
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = -4 p = U 1 d = -1 p = S 10/06/09
53
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = -4 p = U 1 d = -1 p = S 10/06/09
54
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = -4 p = U 1 d = -1 p = S 10/06/09
55
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = -4 p = U 1 d = -1 p = S 10/06/09
56
Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v)
p = V d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = -4 p = U 1 d = -1 p = S 10/06/09
57
Bellman-Ford Hva om vi har en negativ sykel? 10/06/09
58
Bellman-Ford Hva om vi har en negativ sykel?
Den vil gi kontinuerlig bedre tilbud 10/06/09
59
Bellman-Ford Hva om vi har en negativ sykel?
Den vil gi kontinuerlig bedre tilbud Sjekk om vi får forbedringer ved neste iterasjon! 10/06/09
60
Bellman-Ford Hva om vi har en negativ sykel?
Den vil gi kontinuerlig bedre tilbud Sjekk om vi får forbedringer ved neste iterasjon! Minst en node får et kortere estimat -> Vi har en negativ sykel 10/06/09
61
Bellman-Ford i=0 d = ∞ p = nil d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V
10/06/09
62
Bellman-Ford i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V
p = U 1 d = -1 p = S 10/06/09
63
Bellman-Ford i=2 d = -2 p = V d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V
p = U 1 d = -3 p = U 10/06/09
64
Bellman-Ford i=3 d = -4 p = V d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V
p = U 1 d = -5 p = U 10/06/09
65
Bellman-Ford i=4 d = -6 p = V d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V
p = U 1 d = -7 p = U 10/06/09
66
Bellman-Ford Kjøretid: Sjekk alle kanter V-1 ganger
Sjekk etter negativ sykel O(V*E) 10/06/09
67
DAG-shortest-paths Hva om grafen er en DAG? 10/06/09
68
DAG-shortest-paths Hva om grafen er en DAG?
Kan vi utnytte denne strukturen? 10/06/09
69
DAG-shortest-paths Hva om grafen er en DAG?
Kan vi utnytte denne strukturen? Ingen sykler -> ingen negative sykler 10/06/09
70
DAG-shortest-paths Hva om grafen er en DAG?
Kan vi utnytte denne strukturen? Ingen sykler -> ingen negative sykler Vi kan lage en topologisk sortering 10/06/09
71
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: 10/06/09
72
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 1 1 10/06/09
73
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 1 1 10/06/09
74
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 1 1 1 10/06/09
75
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 1 1 1 3 10/06/09
76
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 4 1 1 1 3 10/06/09
77
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 4 1 1 1 3 10/06/09
78
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 4 1 1 1 2 10/06/09
79
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 4 1 1 1 2 10/06/09
80
DAG-shortest-paths Topologisk sortering:
Lar oss besøke i en slik rekkefølge at estimatene ikke kan oppdateres etter at en node har blitt besøkt: S 4 1 3 3 1 1 1 2 10/06/09
81
DAG-shortest-paths Kjøretid: Går igjennom alle nodene og alle kantene
O(V + E) 10/06/09
82
Korteste vei - alle-til-alle
Resultatet blir en VxV matrise der element (A, B) representerer minste avstand fra A til B 10/06/09
83
Korteste vei - alle-til-alle
Resultatet blir en VxV matrise der element (A, B) representerer minste avstand fra A til B Vi kan kjøre Dijkstra eller Bellman-Ford V ganger Dijkstra: O(V³) eller O(V E lg V) Bellman-Ford: O(V² E) 10/06/09
84
Korteste vei - alle-til-alle
Resultatet blir en VxV matrise der element (A, B) representerer minste avstand fra A til B Vi kan kjøre Dijkstra eller Bellman-Ford V ganger Dijkstra: O(V³) eller O(V E lg V) Bellman-Ford: O(V² E) Finnes spesialiserte løsninger 10/06/09
85
Korteste vei - alle-til-alle
Vi kan igjen utnytte at en dekomponert korteste vei består av korteste veier: K S T 10/06/09
86
Korteste vei - alle-til-alle
Spesialtilfelle: Den korteste veien fra S til T kan bygges opp med den korteste fra S til K, og kanten mellom K og T K representerer her den siste noden før T K S T 10/06/09
87
Korteste vei - alle-til-alle
Korteste vei av lengde i kan settes sammen av en korteste avstand av lengde i-1 + en kant Må sjekke alle muligheter 10 K1 7 15 1 S K2 T 4 20 K3 10/06/09
88
Korteste vei - alle-til-alle
Korteste vei av lengde i kan settes sammen av en korteste avstand av lengde i-1 + en kant Må sjekke alle muligheter 10 K1 7 15 1 S K2 T 4 20 K3 10/06/09
89
Korteste vei - alle-til-alle
Matematisk: 10/06/09
90
Korteste vei - alle-til-alle
Matematisk: 10/06/09
91
Korteste vei - alle-til-alle
Matematisk: 10/06/09
92
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 l(1) = 2 3 5 5 10/06/09
93
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 w = 2 3 5 5 10/06/09
94
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 l(1) = 2 3 5 5 10/06/09
95
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 l(2) = 2 3 5 5 10/06/09
96
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 l(2) = 2 3 5 5 10/06/09
97
Korteste vei - alle-til-alle
Eksempel: 2 k= 2 1 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09
98
Korteste vei - alle-til-alle
Eksempel: 2 k=1 2 1 6 5 7 1 3 4 l(3) = 2 3 5 5 10/06/09
99
Korteste vei - alle-til-alle
Eksempel: 2 k=1 2 1 6 5 7 1 3 4 l(3) = 2 3 5 5 10/06/09
100
Korteste vei - alle-til-alle
Eksempel: 2 k=… 2 1 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09
101
Korteste vei - alle-til-alle
Eksempel: 2 2 1 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09
102
Korteste vei - alle-til-alle
Kjøretid: For alle mulige lengder: Sjekk for alle par om det er bedre å gå innom k 10/06/09
103
Korteste vei - alle-til-alle
Kjøretid: For alle mulige lengder: Sjekk for alle par om det er bedre å gå innom k O(V * …) 10/06/09
104
Korteste vei - alle-til-alle
Kjøretid: For alle mulige lengder: Sjekk for alle par om det er bedre å gå innom k O(V * V² * …) 10/06/09
105
Korteste vei - alle-til-alle
Kjøretid: For alle mulige lengder: Sjekk for alle par om det er bedre å gå innom k O(V * V² * V) 10/06/09
106
Korteste vei - alle-til-alle
Kjøretid: For alle mulige lengder: Sjekk for alle par om det er bedre å gå innom k O(V^4) 10/06/09
107
Korteste vei - alle-til-alle
Men; hvorfor må vi ta en vei av lengde m , kan vi ikke ta veier av lengde m/2 + m/2? 10/06/09
108
Korteste vei - alle-til-alle
Men; hvorfor må vi ta en vei av lengde m , kan vi ikke ta veier av lengde m/2 + m/2? Jo, det kan vi: 10/06/09
109
Korteste vei - alle-til-alle
Men; hvorfor må vi ta en vei av lengde m , kan vi ikke ta veier av lengde m/2 + m/2? Jo, det kan vi: Vi dobler da lengden på de korteste veiene hver gang, så trenger bare sjekke lg V lengder: 10/06/09
110
Korteste vei - alle-til-alle
Men; hvorfor må vi ta en vei av lengde m , kan vi ikke ta veier av lengde m/2 + m/2? Jo, det kan vi: Vi dobler da lengden på de korteste veiene hver gang, så trenger bare sjekke lg V lengder: Kjøretid: O(V^3 lg V) 10/06/09
111
Korteste vei - alle-til-alle
Men; hvorfor må vi ta en vei av lengde m , kan vi ikke ta veier av lengde m/2 + m/2? Jo, det kan vi: Vi dobler da lengden på de korteste veiene hver gang, så trenger bare sjekke lg V lengder: Kjøretid: O(V^3 lg V) Men, fortsatt for dårlig 10/06/09
112
Korteste vei - alle-til-alle
Kode - eksempel 10/06/09
113
Floyd-Warshall Korteste vei alle-til-alle
Bygger også på at en korteste vei kan dekomponeres 10/06/09
114
Floyd-Warshall La oss for øyeblikket kun se på korteste veier som bruker node (1, 2, 3, …, k) foruten endenodene: 1 2 … T S k 3 10/06/09
115
Floyd-Warshall La oss for øyeblikket kun se på korteste veier som bruker node (1, 2, 3, …, k) foruten endenodene: 1 2 … T S k 3 10/06/09
116
Floyd-Warshall Hver korteste vei vil da enten bestå av noder til-og-med k-1, 1 2 … T S k-1 10/06/09 k
117
Floyd-Warshall Eller en korteste vei med k Denne kan dekomponeres: 1 2
… T S k k-1 10/06/09
118
Floyd-Warshall Eller en korteste vei med k Denne kan dekomponeres: 1 2
… k-1 … 10/06/09
119
Floyd-Warshall Vi får da at korteste veier som bruker noder til og med node k, kan bygges opp av korteste veier som bruker til og med node k-1 10/06/09
120
Floyd-Warshall Vi får da at korteste veier som bruker noder til og med node k, kan bygges opp av korteste veier som bruker til og med node k-1 10/06/09
121
Floyd-Warshall Korteste veier som bruker til og med node V, er de korteste veiene i grafen 10/06/09
122
Floyd-Warshall for k in xrange(v): for i in xrange(v):
for j in xrange(v): d[i][j] = min(d[i][j], d[i][k] + d[k][j]) 10/06/09
123
Floyd-Warshall Eksempel: k = 0 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - -
6 7 1 3 4 d(0) = 2 3 5 5 10/06/09
124
Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - -
6 7 1 3 4 d(1) = 2 3 5 5 10/06/09
125
Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - -
6 7 1 3 4 d(1) = 2 3 5 5 10/06/09
126
Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - -
6 7 1 3 4 d(1) = 2 3 5 5 10/06/09
127
Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - -
6 7 1 3 4 d(2) = 2 3 5 5 10/06/09
128
Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - -
6 7 1 3 4 d(2) = 2 3 5 5 10/06/09
129
Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - -
6 7 1 3 4 d(2) = 2 3 5 5 10/06/09
130
Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - -
6 7 1 3 4 d(2) = 2 3 5 5 10/06/09
131
Floyd-Warshall Eksempel: k = 3 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - -
6 7 1 3 4 d(3) = 2 3 5 5 10/06/09
132
Floyd-Warshall Eksempel: k = 3 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(3) = 2 3 5 5 10/06/09
133
Floyd-Warshall Eksempel: k = 4 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(4) = 2 3 5 5 10/06/09
134
Floyd-Warshall Eksempel: k = 4 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(4) = 2 3 5 5 10/06/09
135
Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(5) = 2 3 5 5 10/06/09
136
Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(5) = 2 3 5 5 10/06/09
137
Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10
6 7 1 3 4 d(5) = 2 3 5 5 10/06/09
138
Floyd-Warshall Kode - eksempel 10/06/09
139
Floyd-Warshall Negative kanter:
Har vi en negativ sykel, vil en node få kostnad til seg selv lavere enn 0 -1 -1 -1 S -1 -1 10/06/09
140
Floyd-Warshall Negative kanter:
Har vi en negativ sykel, vil en node få kostnad til seg selv lavere enn 0 -1 -1 -1 -5 S -1 -1 10/06/09
141
Floyd-Warshall Negative kanter:
Har vi en negativ sykel, vil en node få kostnad til seg selv lavere enn 0 Vi kan oppdage negative sykler ved at et element langs diagonalen blir mindre enn 0 10/06/09
142
Floyd-Warshall Kjøretid: Tre for løkker til V O(V^3)
Samme som Dijkstra, men takler negative kanter, og har lave konstante faktorer 10/06/09
143
Dynamisk programmering
Metodene vi har sett på nå er eksempler på dynamisk programmering Vi uttrykker da den endelige løsningen som en funksjon av del-løsninger 10/06/09
144
Oppsummering Bellman-Ford: Korteste vei alle-til-alle:
Sjekk om vi kan få en bedre vei ved å bruke en kant til Korteste vei alle-til-alle: Sjekk for alle par om det finnes en node som gir en bedre vei om vi går innom Floyd-Warshall: Bruk de første k nodene Sjekk for alle k om det er bedre å bruke k 10/06/09
145
Teoriøving 6 10/06/09
146
Teoriøving 7 10/06/09
147
Praksisøving 7 - Mumien 10/06/09
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.