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

Like dokumenter
Dijkstras algoritme Spørsmål

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

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

Grafalgoritmer: Korteste vei

Oppgave 1. Sekvenser (20%)

Vi skal se på grafalgoritmer for:

Grunnleggende Grafalgoritmer

Algdat - Øvingsforelesning. Maks flyt

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

Anvendelser av grafer

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

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

Vi skal se på grafalgoritmer for:

Løsningsforslag - Korteste vei

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

SIF8010 ALGORITMER OG DATASTRUKTURER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Øvingsforelesning Korteste vei: Alle til alle

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Minimum Spenntrær - Kruskal & Prim

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

PRIORITETSKØ. Aksjehandel. Datastruktur for aksjehandel. Nøkler og Totalorden-relasjonen

PG4200 Algoritmer og datastrukturer Forelesning 10

Fra A til B. Syvende forelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

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

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

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

ALGORITMER OG DATASTRUKTURER

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

Lineær sortering. Radix sort

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

Korteste vei i en vektet graf uten negative kanter

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

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

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

INF1020 Algoritmer og datastrukturer GRAFER

Algdat Eksamensforelesning. Nils Barlaug

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

Pensum: fra boken (H-03)+ forelesninger

IN2010: Algoritmer og Datastrukturer Series 2

Pensum: fra boken (H-03)+ forelesninger

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

ALGORITMER OG DATASTRUKTURER

Algdat - øvingsforelesning

MAT1030 Forelesning 25

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Grunnleggende Grafalgoritmer III

MAT1030 Diskret Matematikk

INF Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing

Sensorveiledning/løsningsforslag IN2010/INF2220 Algoritmer og datastrukturer H2018 Ragnhild Kobro Runde, Stein Michael Storleer, Ingrid Chieh Yu

Algoritmer og datastrukturer Kapittel 11 Delkapittel 11.2

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Oppgave 1. Stabler og Køer (30%)

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

Lars Vidar Magnusson

INF2220: Forelesning 2

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

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

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

MAT1030 Forelesning 22

Øvingsforelesning 12 Maks flyt

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

All good things. Fjortende forelesning

INF Algoritmer og datastrukturer

Løsningsforslag for utvalgte oppgaver fra kapittel 9

O, what a tangled. Fjerde forelesning. O, what a tangled web we weave / When first we practice to deceive! Sir Walter Scott, *Marmion*

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

O, what a tangled. Fjerde forelesning. Robot-eksemplet som ikke ble gjennomgått sist blir frivillig selvstudium (ut fra foilene :-)

UNIVERSITETET I OSLO

Transkript:

Vektet Urettet Graf KORTESTE STI Finn: fra en Enkel Kilde til Alle Noder. (Engelsk: Single Source Shortest Path - SSSP) Vektede Grafer vekter på kanter representerer f.eks. avstand, kostnad, båndbredde... Eks: Urettet vektet graf: Dijkstra s SSSP Algoritme PQ med UpdateKey-operasjon 6 6 1 2 Bredde Først Søk finner stier med minst antall kanter fra en start-node. Dvs, BFS løser SSSP-problemet dersom alle kanter har samme vekt. I mange applikasjoner, f.eks. transport-nettverk, har kantene forskjellig vekt. Hvordan skal vi da finne stier med lavest sum av vekt på kanter? Eksempel - Boston til Los Angeles: 6 Dijkstra s Algoritme Dijkstra s algoritme finner korteste sti fra startnode v til alle andre noder i en graf med - positive kantvekter For hver node u beregnes avstand fra startnode v til noden u, dvs laveste vektsum over alle stier fra v til u. Algoritmen oppdaterer en sky av de noder for hvilke korrekt avstand allerede er beregnet. En foreløpig approksimert avstand fra startnoden lagres i en tabell D, dvs D[u] vil inneholde vektsum på korteste sti til node u som har blitt funnet hittil. Når node u legges til skyen, er D[u] den faktiske avstand fra startnoden til u, dvs vi vet da at ingen kortere sti kan finnes. Ved initiering: - D[v] =...avstand fra v til seg selv er... - D[u] = for u v...disse vil endres... 3 4

Dijsktra s Algoritm: Skyen vokser seg større Repeter inntil alle noder ligger i skyen: - la u være noden ikke i skyen som har lavest D[u]- verdi (i første runde vil dette være startnoden v) - legg u til skyen C - så oppdaterer vi approksimerte avstander til naboer av u som følger: for each vertex z adjacent to u do if z is not in the cloud C then if D[u] + weight(u,z) < D[z] then D[z] = D[u] + weight(u,z) steget over kalles relaksering av kant (u,z) v 6 u 3 8 u 5 z 85 9 v ble lagt i skyen først. Så kom denne u. Så denne u. Pseudokode Bruker prioritetskø Q for å lagre nodene som ikke er i skyen enda, D[v] er nøkkel for node v i Q Algorithm ShortestPath(G, v): Input: A weighted graph G and a distinguished vertex v of G. Output: D[u], for each vertex u of G, such that D[u] is the length of a shortest path from v to u in G. initialize D[v] and D[u] + for each vertex v u let Q be a priority queue that contains all of the vertices of G using the D labels as keys. while Q do {pull u into the cloud C} u Q.RemoveMin() for each vertex z adjacent to u such that z is in Q do {perform the relaxation operation on edge (u, z) } if D[u] + w((u, z)) < D[z] then D[z] D[u] + w((u, z)) Q.UpdateKey(z,D[z]) return the label D[u] of each vertex u. 5 6 Eksempel: korteste stier fra er nærmest... 849 6 621 849 6 621 621 621 328 7 8

deretter. er neste. 849 6 621 849 6 621 621 328 621 328 375 9 1 : Chicago kommer så. neste. 849 6 621 849 6 621 1423 621 328 2467 NB: D for oppdatert også for 1423 3288 621 328 2467 11 12

deretter. neste. 849 6 621 849 6 621 1423 2658 621 328 2467 og D for blir oppdatert 1423 2658 621 328 2467 13 14 siste stopp. 849 6 621 1423 2658 621 328 2467 15 Dijkstra-VersteFall Kjøretid Må raskt gå gjennom alle kanter utfra en node. Dvs vi representer grafen G vha naboliste. Anta G har n noder og m kanter. Antall PQ-operasjoner er: - n RemoveMin (en for hver node) - opptil m UpdateKey-operasjoner, siden hver kantrelaksering kan føre til UpdateKey. Heap-Implementasjon av prioritetskø Q: - Hver FjernMin er O(log n) vha Downheap. - Hver UpdateKey er O(log n) vha enten Upheap eller Downheap dersom vi bruker locators for å finne elementer i Q i tid O(1). - Total kjøretid blir O((n+m)log n) eller O(n 2 log n). Usortert sekvens-implementasjon av Q: - Hver FjernMin tar O(n). - Hver UpdateKey er O(1). - Kjøretid blir O(n 2 + m)=o(n 2 ) Dvs heap er best for grafer med få kanter, dvs om m < n 2 / log n, og usortert sekvens for grafer med mange kanter, dvs m > n 2 / log n. 16

Dijkstra- Forventet Kjøretid Forventet kjøretid blir noe annet: - Hvor mange UpdateKey kan vi forvente? UpdateKey for hver eneste kant-relaksering er usannsynlig. - Dersom vi anvender random kant-gjennomgang så kan vi forvente O(log n) UpdateKey per node. - Dvs heap-implementasjon har forventet kjøretid O(nlogn+m), mens usortert-sekvensimplementasjon har forventet kjøretid O(n 2 ). - Heap-implementasjon er dermed å foretrekke i nesten alle situasjoner. Dijkstra s Algoritme, flere anliggender... I eksempelet er kantvekt geografisk distanse. Men det kunne også vært flytid eller billettpris. Det er enkelt å modifisere Dijkstra s algoritme for forskjellige situasjoner: Hva om vi kun vil ha vektsum av korteste sti til en enkelt node x? Svar: Stopp såsnart x er i skyen. Bruk locator for elementer i Q slik at x kan finne sin nøkkelverdi=avstand. Hva om vi vil ha også nodene på denne korteste stien? Svar: Lagre SSSP-treet (rødt i eksempelet) vha forelder-pekere, og så traversere fra x via forelderpekere til startnoden. 17 18