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

Like dokumenter
Dijkstras algoritme Spørsmål

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

Minimum Spenntrær - Kruskal & Prim

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

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

INF Algoritmer og datastrukturer

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

IN Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

PG4200 Algoritmer og datastrukturer Forelesning 10

Øvingsforelesning Korteste vei: Alle til alle

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Korteste vei i en vektet graf uten negative kanter

INF Algoritmer og datastrukturer

Grafalgoritmer: Korteste vei

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Oppgave 1. Sekvenser (20%)

MAT1030 Diskret Matematikk

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

MAT1030 Forelesning 25

INF Algoritmer og datastrukturer

Korteste vei problemet (seksjon 15.3)

INF Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF Algoritmer og datastrukturer

Grunnleggende Grafteori

Vi skal se på grafalgoritmer for:

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

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Roger Antonsen

Grunnleggende Grafalgoritmer

Vi skal se på grafalgoritmer for:

Søk i tilstandsrom. Backtracking (Kap. 10) Branch-and-bound (Kap. 10) Iterativ fordypning. Dijkstras korteste sti-algoritme A*-søk (Kap.

INF Algoritmer og datastrukturer

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

IN Algoritmer og datastrukturer

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

MAT1030 Forelesning 25

INF1020 Algoritmer og datastrukturer. Dagens plan

Binære Søketre. Egenskap. Egenskap : Grafisk. Egenskap : Kjøretid. Egenskap : Kjøretid. Egenskap : Oppsumering. Binære Søketre

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

... Dagens plan. Prioritetskø ADT

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Vektede grafer. MAT1030 Diskret matematikk. En kommunegraf. En kommunegraf. Oppgave

INF Algoritmer og datastrukturer

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan

Eksamen i tdt4120 Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

Forelesning 24. Grafer og trær. Dag Normann april Vektede grafer. En kommunegraf

TMA4140 Diskret Matematikk Høst 2016

Anvendelser av grafer

INF2220: Time 4 - Heap, Huffmann

Algdat - Øvingsforelesning. Maks flyt

IN Algoritmer og datastrukturer

Løsningsforslag - Korteste vei

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Fra A til B. Syvende forelesning

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

INF1020 Algoritmer og datastrukturer GRAFER

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

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

Løsningsforslag for utvalgte oppgaver fra kapittel 9

INF Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Et eksempel: Åtterspillet

UNIVERSITETET I OSLO

Korteste Vei I. Lars Vidar Magnusson Kapittel 24 Hvordan finne korteste vei Egenskaper ved korteste vei

PQ: HEAP. Heap. Er disse heap er? Hvordan implementere heap:

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

Lineær sortering. Radix sort

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

Forelesningsplan. Grådighet. LF Øving 9. Hva er grådighet? Aktivitetsvelger En grådig strategi Grådig eller dynamisk? Knapsack Huffmankoding

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

Datastrukturer for rask søking

Innledning Grafer. Grafer / Nettverk. Hva er en graf? Hva er en graf? Eksempler på grafer? Hva er en graf? Elementære Graf-Algoritmer

Notater til INF2220 Eksamen

SIF8010 ALGORITMER OG DATASTRUKTURER

Avanserte flytalgoritmer

INF Algoritmer og datastrukturer

Definisjon: Et sortert tre

MAT1030 Diskret matematikk

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

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

INF Algoritmer og datastrukturer

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

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

Algdat Eksamensforelesning. Nils Barlaug

Transkript:

Øvingsforelesning 7 ijkstras algoritme oiler: redrik Ludvigsen oreleser: Jon Marius Venstad 0/4/09

Korteste sti - hvorfor? ksempel på bruk GPS-systemer ilde-krymping (som vist forrige mandag) Routing-protokoller i ip-nettverk (lan, internett etc.) Simulering av kombinasjonskostnader + mye, mye mer 0/4/09 2

Simulering av kombinasjonskostnader n administrator skal kjøpe inn datamaskiner, operativsystemer, og programvare til sitt universitet. Hans eneste mål er at maskinene skal kunne gjøre en gitt type avansert bildebehandling, men han vil bruke så lite penger som mulig. (Prisen på maskiner, OS, og programvare skal minimeres.) Operativsystemene fungerer kun på gitte datamaskiner, og de avanserte bildebehandlingsprogrammene fungerer kun under gitte operativsystemer (og enkelte krever plugins). 0/4/09

Simulering av kombinasjonskostnader Operativsystemer atamaskiner (rees, MC OS X, Linux, Vista,...) (x86, power6, MIPS,...) Linux GIMP (00 k for nødvendign (00 k) Kinesisk maskin support i 0 år) med MIPS-prosessor (2 mill kr) ildebehandlingsprogrammer (CS4, Paintshop pro, GIMP, CSee, ) Plugin, utvikles ved Universitetet (00 k) Pris på maskin Plugins (som må kjøpes inn eller lages selv) Pris på OS-lisens Pris på bildebahandlings programvare Pris på innkjøp / utvikling av plugin 0/4/09 4

Korteste sti med dijkstra hvordan? ijkstras algoritme følger en tankegang som ligner på S. S finner faktisk korteste sti i grafer, hvis man kun ser på antall kanter traversert. (Hvis du tenker at hver kant har lengde ) 0/4/09 5

ijkstras algoritme i én setning Velg noder med (minste) økende avstand fra utgangsnoden, helt til målet er nådd. 0/4/09 6

ijkstras algoritme eksempel, første gang 8 7 5 2 4 2 C 4 0 5 0/4/09 7

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger 0/4/09 8

ijkstras algoritme i praksis INITILIZ-SINGL-SOURC(G, s) S Ø while Q Ø do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 9

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 0

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 2

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 4

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 5

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 6

ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 7

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 0 S 2 C 4 0/4/09 8

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q S 0 * 2 C 4 0/4/09 9

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 2 4 S 0 * 2 C 4 0/4/09 20

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 4 S 0 2 * 2 C 4 0/4/09 2

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q S 0 2 * 2 C 4 9 0/4/09 22

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 9 0/4/09 2

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 6 9 4 C C 0/4/09 24

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 6 C 4 C 9 2 C 4 0/4/09 25

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 5 4 C 9 2 C 4 0/4/09 26

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 4 C 9 5 2 C 4 0/4/09 27

ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 4 C 8 5 2 C 4 0/4/09 28

ijkstras algoritme eksempel, andre gang INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 5 8 C 0/4/09 29

ijkstras algoritme H I J I forrige eksempel lå alle nodene etter hverandre på den korteste stien G 70 K 20 L 57 ijkstra finner korteste vei en-til-alle, så resultatet er et tre. 0/4/09 0

ijkstras algoritme - korrekthet start 2 2 7 (4) (8) 0/4/09 () Tankegangen her likner tankegangen i prims algoritme, men nå velges nye noder ut ifra avstand til startnoden, ikke bare avstand til en hvilken som helst del av treet. Hver gang vi velger en ny node u vet vi at avstanden til den er riktig Vi vet at avstanden til alle de andre nodene i S er riktig, og vi kan ikke finne en kortere vei til u via bare disse. Så en kortere vei til u må gå via noder i Q. MN: lle disse har avstand større enn eller lik avstanden til u, og vi antar at det ikke fins negative kanter, så da kan ikke en vei gjennom Q være kortere likevel :) Hvis det finnes negative kanter fungerer verken algoritmen eller beviset.

ijkstras algoritme alternativ tankegang, bruk av S 7 5 2 C 4 0/4/09 2

ijkstras algoritme valg av prioritetskø INITILIZ-SINGL-SOURC(G, s) 2 4 5 do u XTRCT-MIN(Q) 6 7 for each vertex v # dj[u] 8 do RLX(u, v, w) Konstruksjon av Q med V elementer () While-løkka kjøres V ganger tt uttak fra Q (5) or-løkka kjøres totalt ganger (7) I verste fall én oppdatering i Q for hver kant (8) 0/4/09

ijkstras algoritme valg av prioritetskø Vi skal gjøre følgende: : Konstuere prioritetskø 2: V antall extract-min fra køen : antall oppdateringer i køen (til lavere verdi) Sortert rray rray (Min-)Heap ibonacci Heap konstruer O(n log n) O(n) O(n) O(n) extract-min O() O(n) O(log n) O(log n) * decreasekey O(n) O() O(log n) O() * totalt V log V + V + * V V + V 2 + V + V log V + log V V + V log V + forenklet * V V 2 log V V log V + 0/4/09 4

ijkstras algoritme valg av prioritetskø Når vi sammenligner kjøretidene til dijkstras algoritme ved bruk av usortert array og min-heap V 2 log V ser vi at dersom nærmer seg V 2 vil det lønne seg å bruke usortert array. 0/4/09 5