1 / 147

Øvingsforelesning 8

Bellman-Ford og Floyd-Warshall Kristian Veøy veoy@stud.ntnu.no. Øvingsforelesning 8. 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. Korteste vei - repetisjon.

tory
Download Presentation

Øvingsforelesning 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bellman-Ford og Floyd-Warshall Kristian Veøy veoy@stud.ntnu.no Øvingsforelesning 8

  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

  3. Korteste vei - repetisjon • Noder som ikke kan nå hverandre har avstand ∞ (wij = ∞) 10000 j 10000 1 S 1 ∞ T 1 10000 10000 i

  4. Korteste vei - repetisjon • Noder har avstand 0 til seg selv 0 10000 j 10000 1 S 1 T 1 10000 10000 i

  5. Korteste vei - repetisjon Vi vil ha sykelfrie stier (simple paths)

  6. Korteste vei - repetisjon Vi vil ha sykelfrie stier (simple paths) Om vi har en negativ sykel har stien vektsum -∞

  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

  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

  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. 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

  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

  12. Dijkstras algoritme - repetisjon Korteste vei en-til-alle uten negative kanter Velg node med kortest avstand og oppdater estimater

  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

  14. Dijkstras algoritme - repetisjon 3 2 1 1 S T 0 1 10 1

  15. Dijkstras algoritme - repetisjon 3 2 1 1 S T 0 1 10 1

  16. Dijkstras algoritme - repetisjon 3 2 1 1 S T 0 1 1 10 1

  17. Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 0 1 1 10 1

  18. Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 0 1 1 10 1

  19. Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 0 1 1 10 1

  20. Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 0 1 1 1+1 10 1

  21. Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 0 1 1 2 10 1

  22. Dijkstras algoritme - repetisjon 2 3 2 2 1 1 S T 0 1 1 2 10 1

  23. Dijkstras algoritme - repetisjon 2 3 2 2 1 1 S T 0 1 1 2 10 1

  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

  25. Bellman-Ford Korteste vei en-til-alle Men, her kan vi ha negative kanter Da kan negative sykler oppstå

  26. Bellman-Ford Den korteste veien kan maks gå innom alle nodene; ellers har vi en sykel

  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

  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

  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

  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

  31. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = ∞ p = nil d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil

  32. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = ∞ p = nil d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil

  33. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil

  34. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = ∞ p = nil 1 d = ∞ p = nil

  35. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil

  36. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil

  37. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil

  38. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 5 p = S 1 d = ∞ p = nil

  39. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = ∞ p = nil

  40. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 p = S d = 0 p = nil 4 S U -1 5 -1 1 -4 W V d = 0 p = U 1 d = ∞ p = nil

  41. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 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

  42. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 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

  43. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 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

  44. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=1 d = 4 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

  45. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 4 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

  46. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 4 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

  47. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 4 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

  48. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 4 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

  49. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 4 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

  50. Bellman-Ford for i in xrange(1, v): for (u, v) in edges: relax(u,v) i=2 d = 0 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

More Related