Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no

Slides:



Advertisements
Liknende presentasjoner
Kombinatorikk for lærerstudenter
Advertisements

De dårige følelsene. Veiene ut..
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
The Travelling Salesperson. LOG530 Distribusjonsplanlegging 2 2 Et forsyningsskip skal starte fra VestBase for å betjene 10 forskjellig installasjoner.
Bellman-Ford og Floyd-Warshall Kristian Veøy
En innføring i spillet: Dobbeltkrig – Grønn
Godt verktøy er halve jobben
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.
Ulike sorteringsmetoder Kompleksitet av dem
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.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Forside A: Diverse B: O -,  - og  -relasjoner C: Pseudo- polynomialitet D: Transitivitet E: Diverse Spørsmål Teoriøving 5, oppgave 1 Åsmund Eldhuset.
Øvingsforelesning 9 Flytnettverk, maksimum flyt og
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
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.
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Reiserute med maksimal opplevelse. LOG530 Distribusjonsplanlegging 2 2 I følgende eksempel er det en turist som ønsker å velge kjøreruten med mest severdigheter,
P-MP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
The Postmans Problem. LOG530 Distribusjonsplanlegging 2 2 Mista har fått i oppdrag å vedlikeholde veiene i landsdelen. Dette er et eksempel på den klassiske.
Komplekse tall Naturlige tall
Øvingsforelesning 9 - Børge Rødsjø
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 10 Graf.
Dynamisk programmering
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
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 13 - kap 6 Prioritetskø (Heap) 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 Forelesning 19 - Dynamisk programmering Korteste vei alle til alle (Floyd) Hans Fr. Nordhaug (Ola Bø)
Hovedfagspresentasjon
INF 4130 Eksamen 2008 Gjennomgang.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
100 lure ord å lære.
Magnus Haug Algoritmer og Datastrukturer
SINTEF-undersøkelsen om salting og trafikksikkerhet
De 222 mest brukte ordene i det norske språket..
Alg. Dat Øvingsforelesning 11 Dynamisk programmering, grådighet
En formel er gyldig hviss den sann i alle tolkninger Utsagnslogikk Tolkning = linje i sannhetsverditabell Altså: En formel er gyldig hviss den har T i.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
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.
Sannsynlighet og kombinatorikk
UFLP modeller. LOG530 Distribusjonsplanlegging 2 2 Det skal opprettes p fasiliteter (lager) for å betjene en gitt mengde kunder. Kundenodene er også potensielle.
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.
Matematikk 1 årskurs 26. oktober 2009
Sannsynlighet og kombinatorikk
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.
1 Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
Utskrift av presentasjonen:

Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no :: Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no www.stud.ntnu.no/~asmunde/algdat/dijkstra.ppt

:: Korteste sti Vi er ofte interessert i å finne korteste, raskeste eller billigste vei mellom to punkter Gods- og persontransport GPS-kartsystemer Ruting av internettrafikk Kart og nettverk kan modelleres som vektede grafer, der hver kant har en lengde, pris eller tid Gitt en vektet graf og en startnode, finn de korteste stiene fra startnoden til hver av de andre nodene Algoritmene for å finne korteste vei til én node finner også korteste vei til de andre nodene som et "biprodukt"

BFS i uvektede grafer I uvektede grafer har alle kanter samme lengde :: BFS i uvektede grafer I uvektede grafer har alle kanter samme lengde I BFS vil da noder komme inn i (og ut av) køen i stigende rekkefølge mhp. avstand Startnoden (avstand 0) vil legge til alle nodene med avstand 1 Hver node med avstand 1 vil legge til naboer som har avstand 2, osv. Derfor fungerer BFS til å finne korteste vei fra ett punkt til alle andre, fordi ALLE noder med avstand d er funnet før fjernere noder Kanskje bredde først-søk kan fungere? Den fungerer jo på uvektede grafer.

BFS i uvektede grafer Kø: E (2), D (2), F (2) A B C D E F G :: BFS i uvektede grafer Kø: E (2), D (2), F (2) A B C D E F G Kø: D (2), F (2), G (3) A B C D E F G Kø: C (1), E (2), D (2), F (2) A B C D E F G Kø: B (1), C (1), E (2) A B C D E F G Kø: A (0), B (1), C (1) A B C D E F G Kø: A (0) A B C D E F G Fargene her har ingenting med hvit/grå/svart-markeringen; de skal bare markere hvilke noder som undersøkes akkurat nå

BFS i vektede grafer Prøver vi BFS på en vektet graf, får vi problemer :: BFS i vektede grafer Prøver vi BFS på en vektet graf, får vi problemer På grunn av de ulike vektene vil nodene komme inn i køen i feil rekkefølge Når vi tar ut en node v og legger til naboene dens, kan det hende at det egentlig fantes en kortere vei til v

BFS i vektede grafer Kø: A (0) A B C D E F 2 4 1 7 3 5 :: BFS i vektede grafer Kø: A (0) A B C D E F 2 4 1 7 3 5 Kø: A (0), B (2), C (4) A B C D E F 2 4 1 7 3 5

:: Modifikasjon av BFS Problem nr. 1: Vi risikerer å behandle noder som vi ikke har funnet den korteste veien til Idé nr. 1: i stedet for å ta ut den første noden fra køen, hva med å ta ut den noden med kortest avstand? Vil fungere på startnodens nærmeste nabo, men vil det fungere lengre ut?

:: Modifikasjon av BFS Problem nr. 2: underveis kan vi finne kortere veier til noen noder, men da er nodene allerede markert som besøkt Idé nr. 2: hva med å tillate at man finner bedre avstander underveis? Må ikke markere noder som besøkt før man tar dem ut av køen Avstandene vi finner underveis, er ikke endelige – de er bare estimater helt frem til vi er sikre på at vi har den korteste stien

:: Dijkstras algoritme Hvis vi modifiserer BFS slik, får vi Dijkstras algoritme Vi bruker en prioritetskø slik at vi raskt kan finne den ”korteste” ubesøkte noden (den med kortest estimat) En prioritetskø kan lages slik: Et array som man holder sortert når man setter noe inn (treigt å sette inn, raskt å hente ut) Et array som man søker gjennom hver gang man skal ta noe ut (raskt å sette inn, treigt å hente ut) En heap (”haug”) (begge deler går temmelig raskt)

Pseudokode S er en tom liste Q er en prioritetskø :: Pseudokode S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 Vis koden i boka først, og presenter dette som en løsning som er lettere å implementere!

Sammenl. med koden i boka :: Sammenl. med koden i boka S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) S er en tom liste Q er en prioritetskø sett alle estimater til  sett startnodens estimat til 0 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 og forgjenger INITIALIZE-SINGLE-SOURCE(G, s) S   Q  V[G] while Q   do u  EXTRACT-MIN(Q) S  S  {u} for each vertex v  Adj[u] do RELAX(u, v, w) Her blir teksten så liten at det nok er like greit at dere ser på dette når dere gjør øvingen.

:: Eksempel A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander <A: 0 (-)> B: ? (-) C: ? (-) D: ? (-) E: ? (-) F: ? (-) A B C D E F 2 4 1 7 3 5 La oss begynne med startnoden A, som har avstand 0 til seg selv, og se hvor vi kommer ved ikke å gå mer enn én kant utover fra A.

Eksempel Nodeavstander :: Eksempel Nodeavstander <A: 0 (-)> B: 2 (A) C: 4 (A) D: ? (-) E: ? (-) F: ? (-) A B C D E F 2 4 1 7 3 5 Allerede nå har vi funnet den korteste veien til B, for alle veier dit må begynne med en av kantene ut fra A, og kanten til B var den korteste.

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) <B: 2 (A)> C: 4 (A) D: ? (-) E: ? (-) F: ? (-) A 2 4 B C D E F 1 7 3 5 Nå som vi har utforsket alle veier fra A, ser vi på B, som vi vet at vi har funnet den korteste veien til.

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) <B: 2 (A)> C: 3 (B) D: ? (-) E: 9 (B) F: ? (-) A B C D E F 2 4 1 7 3 5 Det viser seg at B kan tilby en kortere vei til C enn den vi hadde fra før av.

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) <C: 3 (B)> D: ? (-) E: 9 (B) F: ? (-) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) <C: 3 (B)> D: 6 (C) E: 9 (B) F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 6 (C) E: 9 (B) <F: 4 (C)> A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 5 (F) E: 9 (F) <F: 4 (C)> A B C D E F 2 4 1 7 3 5 F kan tilby en like kort vei til E som den vi allerede har, men det er ikke noen vits i å bruke tid på å oppdatere E.

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) <D: 5 (F)> E: 9 (F) F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) <D: 5 (F)> E: 8 (D) F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 5 (F) <E: 8 (D)> F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 5 (F) <E: 8 (D)> F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 5 (F) E: 8 (D) F: 4 (C) A B C D E F 2 4 1 7 3 5

Eksempel Nodeavstander :: Eksempel Nodeavstander A: 0 (-) B: 2 (A) C: 3 (B) D: 5 (F) E: 8 (D) F: 4 (C) A B C D E F 2 4 1 7 3 5

Korteste sti-tre A B C D E F 2 4 1 8 3 5 :: Korteste sti-tre A B C D E F 2 4 1 8 3 5 I de fleste tilfeller vil ikke alle nodene ligge etter hverandre, men vi vil få et generelt tre. Merk da at for to noder u og v har vi funnet den korteste veien mellom de to hvis u ligger på veien fra startnoden til v (hvis ikke det var den korteste veien vi hadde funnet, kunne vi ha byttet den ut med en kortere vei, og vi ville ha fått en kortere vei fra startnoden til v. Hvis ikke u ligger mellom startnoden og v, vet vi ingenting om korteste vei mellom u og v. I eksempelet vet vi f.eks. den korteste veien mellom B og F, men IKKE mellom D og F.

:: Korrekthet Vi må vise at når vi tar ut en node fra prioritetskøen, er estimatet til noden faktisk den korteste distansen Er det mulig å finne kortere veier? Når vi tar ut en node u fra prioritetskøen, vet vi at vi har undersøkt alle stier som har kortere lengde enn u sitt estimat Dersom det fantes kortere stier, måtte de ha begynt fra en node x med kortere distanse Men hvis x hadde kortere distanse enn u, ville x ha blitt tatt ut av prioritetskøen før u, og da ville den kortere veien ha blitt funnet

Illustrasjon av korrekthet :: Illustrasjon av korrekthet La oss tenke oss at Dijkstra gjør en tabbe på et tidspunkt, ved å legge en node u til de kjente nodene uten at estimatet til u faktisk er kortest. La oss se på situasjonen der vi tar ut u fra prioritetskøen og skal til å legge den til de kjente nodene. Vi vil bevise at det faktisk ikke er mulig at det finnes en annen vei som er kortere. Dersom det finnes en kortere vei fra s til u, kan vi spore den veien til det punktet hvor den går fra en kjent node b til en ukjent node x x ligger i prioritetskøen siden den er ukjent b er en kjent node, med korrekt korteste avstand (siden u er den første noden der vi gjorde en tabbe) Da b ble lagt til, oppdaterte vi estimatet til alle nabonodene, deriblant x. Dermed har x også riktig estimat, siden b -> x ligger på en korteste vei Dersom alle kantvektene er positive, må x ha et estimat som er kortere enn u sitt Men da skulle x ha blitt tatt ut fra prioritetskøen FØR u! Vi har altså en selvmotsigelse, så det er ikke mulig at det finnes kortere stier når vi tar ut en node ? u ? Denne teksten er ment for å leses av de som laster ned denne presentasjonen, og som hjelp for at jeg skal huske det jeg skal si nå, så ikke bekymre dere om dere ikke klarer å lese den. a ? x b s

Negative kantvekter Merk argumentet på forrige slide: :: Negative kantvekter Merk argumentet på forrige slide: "Dersom alle kantvektene er positive..." Essensen er at noder på den korteste veien til u må ha kortere estimat enn u Dersom det finnes negative kanter, gjelder ikke beviset lenger! Det blir da mulig å gå fra en node med estimat d, følge en negativ kant, og ende opp med en distanse som er mindre enn d Konklusjon: Dijkstras algoritme fungerer ikke når grafen inneholder negative kanter!

Analyse |V| innsettinger i Q (3) While-løkka kjøres |V| ganger :: Analyse 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 S   3 Q  V[G] 4 while Q   5 do u  EXTRACT-MIN(Q) 6 S  S  {u} 7 for each vertex v  Adj[u] 8 do RELAX(u, v, w) |V| innsettinger i Q (3) While-løkka kjøres |V| ganger Ett uttak fra Q hver gang (5) For-løkka kjøres totalt |E| ganger (7) I verste fall én oppdatering i Q hver gang (8) Referer til øving 5 (Prinsessejakt), der vi skulle finne tettheten i en graf

Valg av prioritetskø-struktur :: Valg av prioritetskø-struktur Med n elementer i prioritetskøen har vi følgende kompleksiteter: Usortert array Innsetting: O(1) Uttak: O(n) Oppdatering: O(1) Heap Innsetting: O(lg n) Uttak: O(lg n) Oppdatering: O(lg n)

Valg av prioritetskø-struktur :: Valg av prioritetskø-struktur Vi hadde altså V innsettinger, V uttak og E oppdateringer Usortert array: totalt O(V2 + E) = O(V2) Innsetting: O(V) Uttak: O(V2) Oppdatering: O(E) Heap: totalt O(V lg V + E lg V) Innsetting: O(V lg V) Uttak: O(V lg V) Oppdatering: O(E lg V) Kommenter at E = O(V2)

Valg av prioritetskø-struktur :: Valg av prioritetskø-struktur Dersom heap skal lønne seg, må E lg V = o(V2) (altså E lg V < V2) Generelt sett kan vi ikke si noe annet enn at E = O(V2) (maksimalt én kant mellom hvert par av noder) Hvis vi vet hvor mange noder og kanter en bestemt graf har, kan vi finne tettheten (formelen fra øving 5): T = E / V2 Dersom T < 1 / lg V, lønner det seg å bruke heap Understrek at det er viktig å bruke nabolister i "sparse" grafer

Øving 7: Mumien Her går det ut på å finne "mest sannsynlige vei" :: Øving 7: Mumien Her går det ut på å finne "mest sannsynlige vei" Hver node har en viss sannsynlighet Hint: Sannsynligheten til en kant == sannsynligheten til noden kanten går til Problem: Finne en vei der produktet av sannsynlighetene er størst mulig Klarer vi å transformere dette til et problem om å finne en vei der en sum skal være minst mulig?

:: Spørsmål?