Grafalgoritmer: Korteste vei

Like dokumenter
Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for:

Anvendelser av grafer

Anvendelser av grafer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

KORTESTE STI. Vektede Grafer. Korteste Sti. Dijkstra s Algoritme. Vektet Urettet Graf

Algoritmer og datastrukturer Kapittel 11 Delkapittel 11.2

Grunnleggende Grafalgoritmer

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

Øvingsforelesning Korteste vei: Alle til alle

PG4200 Algoritmer og datastrukturer Forelesning 10

Dijkstras algoritme Spørsmål

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Datastrukturer for rask søking

PG4200 Algoritmer og datastrukturer forelesning 10. Lars Sydnes 21. november 2014

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

IN Algoritmer og datastrukturer

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

Øvingsforelesning 7. Dijkstras algoritme. Foiler: Fredrik Ludvigsen Foreleser: Jon Marius Venstad 10/4/09 1

INF1020 Algoritmer og datastrukturer GRAFER

Rettede, ikke-sykliske grafer (DAG)

Definisjon av binært søketre

Definisjon: Et sortert tre

Løsnings forslag i java In115, Våren 1996

Grunnleggende Grafteori

Minimum Spenntrær - Kruskal & Prim

Korteste Vei II. Lars Vidar Magnusson Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

Oppgave 1. Sekvenser (20%)

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

INF Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Et eksempel: Åtterspillet

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Notater til INF2220 Eksamen

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

SIF8010 ALGORITMER OG DATASTRUKTURER

INF Algoritmer og datastrukturer

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

INF Algoritmer og datastrukturer

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

INF1020 Algoritmer og datastrukturer GRAFER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF Algoritmer og datastrukturer

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Binære trær: Noen algoritmer og anvendelser

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF Algoritmer og datastrukturer

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

Løsningsforslag - Korteste vei

IN Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Korteste vei i en vektet graf uten negative kanter

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

All good things. Fjortende forelesning

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

INF Algoritmer og datastrukturer

45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 1992

TMA4140 Diskret Matematikk Høst 2016

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Korteste vei problemet (seksjon 15.3)

INF2220: Forelesning 2

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

UNIVERSITETET I OSLO

Pensum: fra boken (H-03)+ forelesninger

Løsnings forslag i java In115, Våren 1998

København 20 Stockholm

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

GRAFER. Hva er en graf? Det første grafteoretiske problem: Broene i Königsberg. Grafer vi har sett allerede

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

Binær heap. En heap er et komplett binært tre:

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

IN2010: Forelesning 11. Kombinatorisk søking Beregnbarhet og kompleksitet

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Det første grafteoretiske problem: Broene i Königsberg

Et eksempel: Åtterspillet

PG4200 Algoritmer og datastrukturer Forelesning 7

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Norsk informatikkolympiade runde

ALGORITMER OG DATASTRUKTURER

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Pensum: fra boken (H-03)+ forelesninger

Selv-balanserende søketrær

Transkript:

Grafalgoritmer: Korteste vei

Korteste-vei problemer for vektede grafer * Single Source Shortest Path Problem Finn lengden av korteste vei fra én bestemt node til alle andre noder i grafen All-Pairs Shortest Path Problem Finn lengden av korteste vei fra alle noder til alle andre noder i grafen *: For uvektede grafer finnes korteste veier enkelt med bredde-først søk

Anvendelser av korteste-vei algoritmer Ruteplanlegging GPS Google Maps Travelling Salesman's Problem Flåtestyring Ulike typer optimaliseringer Og veldig mye mer...

Vektede grafer for korteste-vei problemer Representerer grafen som en nabomatrise med kantlengder Hvis det ikke går en kant mellom to noder, legger vi inn en uendelig stor kantlengde 0 1 2 3 4 5 6 0 0 2 1 1 0 3 10 2 4 0 5 3 2 0 2 8 4 4 0 6 5 0 6 1 0

All-Pairs Shortest Path 0 1 2 3 4 5 6 0 0 2 1 1 0 3 10 2 4 0 5 Finn lengden av korteste vei mellom alle par av noder Kan løses ved å transformere nabomatrisen til en løsningsmatrise med korteste veilengder 3 2 0 2 8 4 4 0 6 5 0 6 1 0 0 1 2 3 4 5 6 0 0 2 3 1 3 6 5 1 9 0 5 3 5 8 7 2 4 6 0 5 7 5 9 3 6 8 2 0 2 5 4 4 0 7 6 5 0 6 1 0

Floyds algoritme * Starter med nabomatrisen, bygger opp løsningsmatrisen steg for steg Samme prinsipp som i Warshall-algoritmen: Det finnes en vei fra node i til node j, hvis det finnes en vei fra node i til node k, og fra node k til node j Sjekker alle mulige veier, tar hele tiden vare på den korteste veien som til nå er funnet mellom to noder I hvert steg øker antall noder langs veiene med 1 Etter n steg vil garantert lengden til alle de korteste veiene i hele grafen ligge lagret i løsningsmatrisen *: Floyd, Robert W.: "Algorithm 97: Shortest Path", Communications of the ACM, 1962

Floyd: Stegvis løsning Steg 1: Finn alle korteste veier med maks. 3 noder Steg 2: Finn alle korteste veier med maks 4 noder Steg n 2: Alle korteste veier funnet 0 1 2 3 4 5 6 0 0 2 1 1 0 3 10 2 4 0 5 3 2 0 2 8 4 4 0 6 5 0 6 1 0 0 1 2 3 4 5 6 0 0 2 3 1 3 6 5 1 9 0 5 3 5 8 7 2 4 6 0 5 7 5 9 3 6 8 2 0 2 5 4 4 0 7 6 5 0 6 1 0

Animasjon av Floyd s algoritme Med muligheter for å variere: Rettet/urettet graf Størrelsen på eksempelgrafen Fremvisning av grafen: Med noder som sirkler og kanter som linjer/piler Som nabolister Som nabomatrise Floyd-Warshall All-Pairs Shortest Path

Floyds algoritme: Effektivitet og implementasjon Programmeres enkelt med tre løkker, på samme måte som Warshall-algoritmen: Ytre løkke går n 2 ganger, i hvert steg finnes alle de korteste veiene med 3, 4, 5, noder To indre løkker som går gjennom hele nabomatrisen og kobler node i og j hvis begge har en vei til node k Floyd er alltid O(n³) for graf lagret i nabomatrise Enkel implementasjon: floyd.java

Single Source Shortest Path Finn lengden av korteste vei fra én bestemt node til alle andre noder i grafen Kan løses med Dijkstras algoritme * Standard algoritme i mange systemer, f.eks. GPS-enheter, Google Maps, flybillettbestilling, ruting av av data på internett... *: Dijkstra, Edsger. W.: "A note on two problems in connexion with graphs", Numerische Mathematik 1, 1959

Dijkstras algoritme Anvendes på en vektet graf med n noder Starter i en node S, finner korteste avstand fra S til alle andre noder Bruker maksimalt n 1 steg, i hvert steg finner vi den korteste avstanden fra S til én ny node i grafen Ligner mye på et bredde-først søk Basert på følgende prinsipp: Den korteste veien fra S til en ny node må gå langs en av de korteste veiene til en av den nye nodens naboer

Dijkstra: Ekstra datastruktur En boolsk array funnet av lengde n: Alle elementer er intitielt lik false Brukes til å merke nodene som vi allerede har funnet korteste vei til En array avstand med n veilengder: Lagrer den hittil korteste veien som vi til nå har sett fra startnoden S til alle andre noder i grafen Alle elementer er lik uendelig til å begynne med, unntatt for startnoden der korteste vei settes lik 0 Løsningen ligger i arrayen avstand når algoritmen er ferdig

s=0 y=1 t=2 x=3 z=4 funnet = { true, true, false, false, false } avstand = { 0, 5, 10,, }

Dijkstras algoritme: Animasjon (finner korteste vei fra a til b)

Dijkstras algoritme: Eksempel

Dijkstra: Algoritme funnet[i] = false, i = 0, 1, 2,..., n-1 avstand[i] =, i = 0, 1, 2,..., n-1 avstand[s] = 0 denne = S antall = 0 For (alle naboer i til denne, der funnet[i] == false) { l = avstand[denne] + kantlengde[denne][i] Hvis (l < avstand[i]) avstand[i] = l funnet[denne] = true antall++ Hvis antall == n: Avslutt denne = (noden som har minst verdi av avstand og der funnet[denne] == false) }

Dijkstras algoritme: Animasjon Kantene i figuren er tegnet like lange som vekten/kantlengden

Mer animasjon av Dijkstra Med muligheter for å variere: Rettet/urettet graf Størrelsen på eksempelgrafen Fremvisning av grafen: Med noder som sirkler og kanter som linjer/piler Som nabolister Som nabomatrise Dijkstra Shortest Path

Dijkstra: Effektivitet og implementasjon Er O(n2 ) i originalutgaven, for en graf med n noder Blir O(n log n) med smartere koding (øvingsoppgave): Bruk en min-heap for å lagre avstandene Søking etter noden med minst avstand blir da O(log n) Er litt fiklete fordi vi må justere heapen hver gang avstander oppdateres i grafen Dijkstra kan også løse all-pairs shortest path: Start algoritmen én gang fra hver node i grafen Enkel O(n2 ) implementasjon: dijkstra.java

Dijkstra: Lagring av korteste veier Et problem med denne versjonen av Dijkstra er at det bare er lengden på de korteste veiene til hver node som tas vare på Ofte vil vi også ha behov for å vite hvilke noder den korteste veien går innom (se eksempel neste side) Øvingsoppgave: Programmering av en versjon av Dijkstra som både lagrer de korteste avstandene og veiene

Vektet, rettet graf for testing Fil: vgraf_13.txt