Bellman-Ford og Floyd-Warshall Kristian Veøy

Slides:



Advertisements
Liknende presentasjoner
Vi har kjøpt en liten hytte på fjellet, og lurte på om du ville ta med deg familien eller noen venner og komme en tur i påsken for en liten påskepils med.
Advertisements

TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Kontrollstrukturer (Kapittel 3)
The Travelling Salesperson. LOG530 Distribusjonsplanlegging 2 2 Et forsyningsskip skal starte fra VestBase for å betjene 10 forskjellig installasjoner.
Det gode Det rette Det rettferdige
Matematisk Induksjon.
Korteste vei. LOG530 Distribusjonsplanlegging 2 2 Ofte står en overfor ønsket om å finne korteste kjørerute fra et gitt utgangspunkt til et ønsket bestemmelsessted.
Prosjekt sterilforsyning Helse Nord
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF 4130: Algoritmer: Design og effektivitet Eksamensdag:15. desember 2010.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og maksimum bipartitt matching Jon Marius Venstad Redigert og forelest av Gleb Sizov.
Forelesning nr.2 INF 1411 Elektroniske systemer
Memoisering og dynamisk programmering
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Forside Introduksjon Fibonacci-tall Memoisering DP Neste uke Spørsmål Introduksjon til memoisering og dynamisk programmering Åsmund Eldhuset asmunde *at*
Teoriøving 4 (1) Strongly connected component: ”det maksimale settet med noder slik at for alle nodepar (u,v) i settet finnes kantene u -> v og v -> u.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Alg. Dat Øvingsforelesning 5 Kompleksitetsanalyse Torbjørn Moralnd
Kompleksitetsanalyse
Korrekt dybde først-søk
Øvingsforelesning 12 Redusering av problemer,
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
Forside Motivasjon Analyse Forside Motivasjon Analyse  -notasjon O og  Relasjoner Klasser Fallgruver Spørsmål Kompleksitetsanalyse Åsmund Eldhuset asmunde.
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Øvingsforelesning 9 - Børge Rødsjø
Algoritmer og Datastrukturer
Kap 10 Graf.
Dynamisk programmering
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
INF 295 Forelesning 17 - kap 9 Korteste vei i grafer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 18 - kap 9 Aktivitetsgrafer
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
Leif Aanderud Yrkesmed.avd. Haukeland Universitetssykehus
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Hovedfagspresentasjon
Trekanter med vinkler på 30, 60 og 90 grader
INF 4130 Eksamen 2008 Gjennomgang.
Magnus Haug Algoritmer og Datastrukturer
Kapping av plater Mål: Vi skal lage komponenter for en møbelfabrikk ut fra standardiserte plater på 12 x 24 dm. Komponentene har lengde og bredde oppgitt.
Lokalisering og betjening av greiner. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. De må derfor opprette.
Typer i programmering. Simple typer var a = 13;
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
INF 295 Algoritmer og datastrukturer Forelesning 22 Teknikker for algoritmeutvikling Hans Fr. Nordhaug/ Ola Bø.
Forside Intro Fibonacci-tall Memoisering DP Longest increasing subsequence Betingelser Matrise- multiplikasjon Longest common subsequence Grådig vs. DP.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
The Impact of DHT Routing Geometry on Resilience and Proximity TDT 2, Olav Engelsåstrø
Sterke og 2-sammenhengende komponeneter, DFS
Prioritetskøer Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer.
Praktisk Midtveisevaluering av kurset («femminutterslapper») i pausen. Undervisningsfri neste uke (ingen forelesninger eller grupper). NM i programmering.
Trekkstrukturer Bygges opp fra en mengde trekk f,g,h,… og en mengde atomære verdier a,b,c,… Defineres som en DAG (directed acyclic graph), det vil si en.
UFLP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
Lokalisering og max minimumavstand. LOG530 Distribusjonsplanlegging 2 2 Anta at nettverket angir en region hvor McBurger skal opprettes 3 konkurrerende.
Korteste vei. LOG530 Distribusjonsplanlegging 2 2 Ofte står en overfor ønsket om å finne korteste kjørerute fra et gitt utgangspunkt til et ønsket bestemmelsessted.
LOG530 Distribusjonsplanlegging
INF 295 Algoritmer og datastrukturer Forelesning 23 Kompleksitet Hans Fr. Nordhaug/ Ola Bø.
5702 Geografisk analyse Nettverksanalyse. Evaluering av nettverksstruktur Nettverksdiameter Diameteren på et nettverk representerer maksimum antall.
Memoisering og dynamisk programmering Magnus Botnan botnan at stud.ntnu.no 23/
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
Øvingsforelesning 10 Grådighet
Utskrift av presentasjonen:

Bellman-Ford og Floyd-Warshall Kristian Veøy veoy@stud.ntnu.no Øvingsforelesning 8 Bellman-Ford og Floyd-Warshall Kristian Veøy veoy@stud.ntnu.no 10/06/09

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

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

Korteste vei - repetisjon Noder har avstand 0 til seg selv 10000 j 10000 1 S 1 T 1 10000 10000 i 10/06/09

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

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

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

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

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

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

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

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

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

Dijkstras algoritme - repetisjon 3 2 1 1 S T 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 3 2 1 1 S T 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 3 2 1 1 S T 1 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 1 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 1 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 1 1 1 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 1 1 1 1+1 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 1 1 S T 1 1 1 2 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 2 1 1 S T 1 1 1 2 10 10/06/09

Dijkstras algoritme - repetisjon 2 3 2 2 1 1 S T 1 1 1 2 10 10/06/09

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bellman-Ford Hva om vi har en negativ sykel? 10/06/09

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

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

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

Bellman-Ford i=0 d = ∞ p = nil d = 0 p = nil 4 S U -1 5 -1 -1 -4 W V 10/06/09

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

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

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

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

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

DAG-shortest-paths Hva om grafen er en DAG? 10/06/09

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Korteste vei - alle-til-alle Matematisk: 10/06/09

Korteste vei - alle-til-alle Matematisk: 10/06/09

Korteste vei - alle-til-alle Matematisk: 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 - - 5 0 6 7 1 3 4 l(1) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 - - 5 0 6 7 1 3 4 w = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 - - 5 0 6 7 1 3 4 l(1) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 13 8 3 5 8 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 7 1 3 4 l(2) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 13 8 3 5 8 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 7 1 3 4 l(2) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 k= 2 1 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 8 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 k=1 2 1 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 8 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 5 7 1 3 4 l(3) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 k=1 2 1 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 7 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 5 7 1 3 4 l(3) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 k=… 2 1 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 7 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09

Korteste vei - alle-til-alle Eksempel: 2 2 1 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 7 0 7 2 4 - 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 l(3) = 2 3 5 5 10/06/09

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

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

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

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

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

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

Korteste vei - alle-til-alle 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: 10/06/09

Korteste vei - alle-til-alle 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: 10/06/09

Korteste vei - alle-til-alle 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) 10/06/09

Korteste vei - alle-til-alle 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 10/06/09

Korteste vei - alle-til-alle Kode - eksempel 10/06/09

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

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

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

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

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

Floyd-Warshall Eller en korteste vei med k Denne kan dekomponeres: 1 2 … k-1 … 10/06/09

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

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

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

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

Floyd-Warshall Eksempel: k = 0 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 - - 5 0 6 7 1 3 4 d(0) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 - - 5 0 6 7 1 3 4 d(1) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 5 - 5 0 6 7 1 3 4 d(1) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 1 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 5 - 5 0 6 7 1 3 4 d(1) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 - - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 5 - 5 0 6 7 1 3 4 d(2) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 - 0 - 5 3 5 - 5 0 6 7 1 3 4 d(2) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 7 0 - 5 3 5 - 5 0 6 7 1 3 4 d(2) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 2 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 7 0 - 5 3 5 11 5 0 6 7 1 3 4 d(2) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 3 2 2 1 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 1 2 3 4 5 1 0 2 8 - - 2 - 0 6 - - 3 - - 0 7 2 4 - 1 7 0 - 5 3 5 11 5 0 6 7 1 3 4 d(3) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 3 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 - 0 6 13 8 3 - - 0 7 2 4 - 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(3) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 4 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 - 0 6 13 8 3 - - 0 7 2 4 - 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(4) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 4 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 - 0 6 13 8 3 - 8 0 7 2 4 - 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(4) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 - 0 6 13 8 3 - 8 0 7 2 4 - 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(5) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 7 0 7 2 4 12 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(5) = 2 3 5 5 10/06/09

Floyd-Warshall Eksempel: k = 5 2 2 1 1 2 3 4 5 1 0 2 8 15 10 1 2 3 4 5 1 0 2 8 15 10 2 11 0 6 13 8 3 5 7 0 7 2 4 12 1 7 0 9 5 3 5 11 5 0 6 7 1 3 4 d(5) = 2 3 5 5 10/06/09

Floyd-Warshall Kode - eksempel 10/06/09

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

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

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

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

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

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

Teoriøving 6 10/06/09

Teoriøving 7 10/06/09

Praksisøving 7 - Mumien 10/06/09