Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Bellman-Ford og Floyd-Warshall Kristian Veøy

Liknende presentasjoner


Presentasjon om: "Bellman-Ford og Floyd-Warshall Kristian Veøy"— Utskrift av presentasjonen:

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


Laste ned ppt "Bellman-Ford og Floyd-Warshall Kristian Veøy"

Liknende presentasjoner


Annonser fra Google