Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

10/06/091 Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy

Liknende presentasjoner


Presentasjon om: "10/06/091 Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy"— Utskrift av presentasjonen:

1 10/06/091 Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy

2 10/06/092 Korteste vei - repetisjon  Vi har en vektet graf  Vi vil finne en minimal vekt-sum sti imellom noder S T

3 10/06/093 Korteste vei - repetisjon  Noder som ikke kan nå hverandre har avstand ∞ (w ij = ∞) S i j T ∞

4 10/06/094 Korteste vei - repetisjon  Noder har avstand 0 til seg selv S i j T

5 10/06/095 Korteste vei - repetisjon  Vi vil ha sykelfrie stier (simple paths)

6 10/06/096 Korteste vei - repetisjon  Vi vil ha sykelfrie stier (simple paths)  Om vi har en negativ sykel har stien vektsum -∞

7 10/06/097 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

8 10/06/098 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

9 10/06/099 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 10/06/0910 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 v u 2 d = 6 p = x d = 11 p = z

11 10/06/0911 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 v u 2 d = 6 p = x d = 8 p = u

12 10/06/0912 Dijkstras algoritme - repetisjon  Korteste vei en-til-alle uten negative kanter  Velg node med kortest avstand og oppdater estimater

13 10/06/0913 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

14 10/06/0914 Dijkstras algoritme - repetisjon S T

15 10/06/0915 Dijkstras algoritme - repetisjon S T

16 10/06/0916 Dijkstras algoritme - repetisjon S 1 T

17 10/06/0917 Dijkstras algoritme - repetisjon S 2 1 T

18 10/06/0918 Dijkstras algoritme - repetisjon S 2 1 T

19 10/06/0919 Dijkstras algoritme - repetisjon S 2 1 T

20 10/06/0920 Dijkstras algoritme - repetisjon S T

21 10/06/0921 Dijkstras algoritme - repetisjon S T

22 10/06/0922 Dijkstras algoritme - repetisjon S T

23 10/06/0923 Dijkstras algoritme - repetisjon S T

24 10/06/0924 Dijkstras algoritme - repetisjon  Kjøretid avhengig av implementasjon:  Array: O(V²) fint for dense grafer  Heap: O(E lg V) fint for sparse grafer

25 10/06/0925 Bellman-Ford  Korteste vei en-til-alle  Men, her kan vi ha negative kanter  Da kan negative sykler oppstå

26 10/06/0926 Bellman-Ford  Den korteste veien kan maks gå innom alle nodene; ellers har vi en sykel

27 10/06/0927 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: S K T

28 10/06/0928 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: S K T n-1 n 1

29 10/06/0929 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

30 10/06/0930 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

31 10/06/0931 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = ∞ p = nil d = 0 p = nil d = ∞ p = nil d = ∞ p = nil i=1

32 10/06/0932 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = ∞ p = nil d = 0 p = nil d = ∞ p = nil d = ∞ p = nil i=1

33 10/06/0933 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = ∞ p = nil d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1

34 10/06/0934 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1 d = ∞ p = nil

35 10/06/0935 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 5 p = S d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1

36 10/06/0936 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 5 p = S d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1

37 10/06/0937 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 5 p = S d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1

38 10/06/0938 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1 d = 5 p = S

39 10/06/0939 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = ∞ p = nil i=1

40 10/06/0940 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S i=1 d = ∞ p = nil

41 10/06/0941 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = 3 p = U i=1

42 10/06/0942 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S i=1 d = 3 p = U

43 10/06/0943 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=1

44 10/06/0944 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=1

45 10/06/0945 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=2

46 10/06/0946 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=2

47 10/06/0947 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=2

48 10/06/0948 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=2

49 10/06/0949 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=2

50 10/06/0950 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

51 10/06/0951 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = 0 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

52 10/06/0952 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = -4 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

53 10/06/0953 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = -4 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

54 10/06/0954 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = -4 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

55 10/06/0955 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = -4 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=2

56 10/06/0956 Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) SU WV d = -4 p = U d = 0 p = nil d = 0 p = V d = -1 p = S i=3

57 10/06/0957 Bellman-Ford  Hva om vi har en negativ sykel?

58 10/06/0958 Bellman-Ford  Hva om vi har en negativ sykel?  Den vil gi kontinuerlig bedre tilbud

59 10/06/0959 Bellman-Ford  Hva om vi har en negativ sykel?  Den vil gi kontinuerlig bedre tilbud  Sjekk om vi får forbedringer ved neste iterasjon!

60 10/06/0960 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

61 10/06/0961 Bellman-Ford SU WV d = ∞ p = nil d = 0 p = nil d = ∞ p = nil d = ∞ p = nil i=0

62 10/06/0962 Bellman-Ford SU WV d = 0 p = U d = 0 p = nil d = 4 p = S d = -1 p = S i=1

63 10/06/0963 Bellman-Ford SU WV d = -6 p = U d = 0 p = nil d = -2 p = V d = -3 p = U i=2

64 10/06/0964 Bellman-Ford SU WV d = -8 p = U d = 0 p = nil d = -4 p = V d = -5 p = U i=3

65 10/06/0965 Bellman-Ford SU WV d = -10 p = U d = 0 p = nil d = -6 p = V d = -7 p = U i=4

66 10/06/0966 Bellman-Ford  Kjøretid:  Sjekk alle kanter V-1 ganger  Sjekk etter negativ sykel  O(V*E)

67 10/06/0967 DAG-shortest-paths  Hva om grafen er en DAG?

68 10/06/0968 DAG-shortest-paths  Hva om grafen er en DAG?  Kan vi utnytte denne strukturen?

69 10/06/0969 DAG-shortest-paths  Hva om grafen er en DAG?  Kan vi utnytte denne strukturen?  Ingen sykler -> ingen negative sykler

70 10/06/0970 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

71 10/06/0971 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:

72 10/06/0972 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

73 10/06/0973 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

74 10/06/0974 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

75 10/06/0975 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

76 10/06/0976 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

77 10/06/0977 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

78 10/06/0978 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

79 10/06/0979 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

80 10/06/0980 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

81 10/06/0981 DAG-shortest-paths  Kjøretid:  Går igjennom alle nodene og alle kantene  O(V + E)

82 10/06/0982 Korteste vei - alle-til-alle  Resultatet blir en VxV matrise der element (A, B) representerer minste avstand fra A til B

83 10/06/0983 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)

84 10/06/0984 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

85 10/06/0985 Korteste vei - alle-til-alle  Vi kan igjen utnytte at en dekomponert korteste vei består av korteste veier: S K T

86 10/06/0986  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 Korteste vei - alle-til-alle S K T

87 10/06/0987  Korteste vei av lengde i kan settes sammen av en korteste avstand av lengde i-1 + en kant  Må sjekke alle muligheter Korteste vei - alle-til-alle S K1 T K2 K

88 10/06/0988  Korteste vei av lengde i kan settes sammen av en korteste avstand av lengde i-1 + en kant  Må sjekke alle muligheter Korteste vei - alle-til-alle S K1 T K2 K

89 10/06/0989 Korteste vei - alle-til-alle  Matematisk:

90 10/06/0990 Korteste vei - alle-til-alle  Matematisk:

91 10/06/0991 Korteste vei - alle-til-alle  Matematisk:

92 10/06/0992 Korteste vei - alle-til-alle  Eksempel: l (1) =

93 10/06/0993 Korteste vei - alle-til-alle  Eksempel: w =

94 10/06/0994 Korteste vei - alle-til-alle  Eksempel: l (1) =

95 10/06/0995 Korteste vei - alle-til-alle  Eksempel: l (2) =

96 10/06/0996 Korteste vei - alle-til-alle  Eksempel: l (2) =

97 10/06/0997 Korteste vei - alle-til-alle  Eksempel: l (3) = k=

98 10/06/0998 Korteste vei - alle-til-alle  Eksempel: l (3) = k=

99 10/06/0999 Korteste vei - alle-til-alle  Eksempel: l (3) = k=

100 10/06/09100 Korteste vei - alle-til-alle  Eksempel: l (3) = k=…

101 10/06/09101 Korteste vei - alle-til-alle  Eksempel: l (3) =

102 10/06/09102 Korteste vei - alle-til-alle  Kjøretid:  For alle mulige lengder:  Sjekk for alle par om det er bedre å gå innom k

103 10/06/09103 Korteste vei - alle-til-alle  Kjøretid:  For alle mulige lengder:  Sjekk for alle par om det er bedre å gå innom k  O(V * …)

104 10/06/09104 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² * …)

105 10/06/09105 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)

106 10/06/09106 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)

107 10/06/09107  Men; hvorfor må vi ta en vei av lengde m-1 + 1, kan vi ikke ta veier av lengde m/2 + m/2? Korteste vei - alle-til-alle

108 10/06/09108  Men; hvorfor må vi ta en vei av lengde m-1 + 1, kan vi ikke ta veier av lengde m/2 + m/2?  Jo, det kan vi: Korteste vei - alle-til-alle

109 10/06/09109  Men; hvorfor må vi ta en vei av lengde m-1 + 1, 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: Korteste vei - alle-til-alle

110 10/06/09110  Men; hvorfor må vi ta en vei av lengde m-1 + 1, 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) Korteste vei - alle-til-alle

111 10/06/09111  Men; hvorfor må vi ta en vei av lengde m-1 + 1, 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 Korteste vei - alle-til-alle

112 10/06/09112 Korteste vei - alle-til-alle Kode - eksempel

113 10/06/09113 Floyd-Warshall  Korteste vei alle-til-alle  Bygger også på at en korteste vei kan dekomponeres

114 10/06/09114 Floyd-Warshall  La oss for øyeblikket kun se på korteste veier som bruker node (1, 2, 3, …, k) foruten endenodene: S 1 3 T 2 k …

115 10/06/09115 Floyd-Warshall  La oss for øyeblikket kun se på korteste veier som bruker node (1, 2, 3, …, k) foruten endenodene: S 1 3 T 2 k …

116 10/06/09116  Hver korteste vei vil da enten bestå av noder til-og-med k-1, Floyd-Warshall S 1 k-1 T 2 k …

117 10/06/09117  Eller en korteste vei med k  Denne kan dekomponeres: Floyd-Warshall S 1 k-1 T 2 k …

118 10/06/09118  Eller en korteste vei med k  Denne kan dekomponeres: Floyd-Warshall S 1 k-1 T 2 k … 1 2 …

119 10/06/09119  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 Floyd-Warshall

120 10/06/09120  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 Floyd-Warshall

121 10/06/09121  Korteste veier som bruker til og med node V, er de korteste veiene i grafen Floyd-Warshall

122 10/06/09122 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])

123 10/06/09123 Floyd-Warshall  Eksempel: d (0) = k = 0

124 10/06/09124 Floyd-Warshall  Eksempel: d (1) = k = 1

125 10/06/09125 Floyd-Warshall  Eksempel: d (1) = k = 1

126 10/06/09126 Floyd-Warshall  Eksempel: d (1) = k = 1

127 10/06/09127 Floyd-Warshall  Eksempel: d (2) = k = 2

128 10/06/09128 Floyd-Warshall  Eksempel: d (2) = k = 2

129 10/06/09129 Floyd-Warshall  Eksempel: d (2) = k = 2

130 10/06/09130 Floyd-Warshall  Eksempel: d (2) = k = 2

131 10/06/09131 Floyd-Warshall  Eksempel: d (3) = k = 3

132 10/06/09132 Floyd-Warshall  Eksempel: d (3) = k = 3

133 10/06/09133 Floyd-Warshall  Eksempel: d (4) = k = 4

134 10/06/09134 Floyd-Warshall  Eksempel: d (4) = k = 4

135 10/06/09135 Floyd-Warshall  Eksempel: d (5) = k = 5

136 10/06/09136 Floyd-Warshall  Eksempel: d (5) = k = 5

137 10/06/09137 Floyd-Warshall  Eksempel: d (5) = k = 5

138 10/06/09138 Floyd-Warshall Kode - eksempel

139 10/06/09139 Floyd-Warshall  Negative kanter:  Har vi en negativ sykel, vil en node få kostnad til seg selv lavere enn 0 S 0

140 10/06/09140 Floyd-Warshall  Negative kanter:  Har vi en negativ sykel, vil en node få kostnad til seg selv lavere enn 0 S -5

141 10/06/09141 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

142 10/06/09142 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

143 Dynamisk programmering 10/06/09  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

144 Oppsummering 10/06/09  Bellman-Ford:  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

145 10/06/09 Teoriøving 6

146 10/06/09 Teoriøving 7

147 10/06/09 Praksisøving 7 - Mumien


Laste ned ppt "10/06/091 Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy"

Liknende presentasjoner


Annonser fra Google