INF Algoritmer og datastrukturer

Like dokumenter
INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

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

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

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

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Korteste vei i en vektet graf uten negative kanter

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

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 10

INF Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Anvendelser av grafer

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Grunnleggende Grafalgoritmer

Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for:

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

INF Algoritmer og datastrukturer

Rettede, ikke-sykliske grafer (DAG)

IN Algoritmer og datastrukturer

MAT1030 Forelesning 22

MAT1030 Forelesning 22

Grafalgoritmer: Korteste vei

Anvendelser av grafer

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

Dijkstras algoritme Spørsmål

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

Pensum: fra boken (H-03)+ forelesninger

Notater til INF2220 Eksamen

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

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

TMA4140 Diskret Matematikk Høst 2016

INF Algoritmer og datastrukturer

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

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

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

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

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

MAT1030 Diskret Matematikk

Minimum Spenntrær - Kruskal & Prim

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

MAT1140: Kort sammendrag av grafteorien

Disjunkte mengder ADT

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

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

Oppgave 1. Sekvenser (20%)

MAT1030 Forelesning 23

INF Algoritmer og datastrukturer

MAT1030 Diskret Matematikk

Innhold. Innledning 1

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

Grunnleggende Grafalgoritmer II

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

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

Eksamen i tdt4120 Algoritmer og datastrukturer

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

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

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

MAT1030 Forelesning 25

LO118D Forelesning 9 (DM)

København 20 Stockholm

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

INF1020 Algoritmer og datastrukturer GRAFER

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

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Uke 5 Disjunkte mengder

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

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

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

Transkript:

INF2220 - Algoritmer og datastrukturer HØSTEN 2015 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 5: Grafer I Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 1 / 55

Dagens plan: Definisjon av en graf Grafvarianter Intern representasjon av grafer Topologisk sortering Korteste vei en-til-alle uvektet graf Korteste vei en-til-alle vektet graf M.A.W. Data Structures and Algorithm Analysis kap. 9 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 2 / 55

Det første grafteoretiske problem: Broene i Königsberg Er det mulig å ta en spasertur som krysser hver av broene nøyaktig en gang? Dette problemet ble løst av Euler allerede i 1736! Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 3 / 55

Grafer vi har sett allerede Labyrint Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 4 / 55

Grafer vi har sett allerede Trær Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 5 / 55

Hva er en graf? En graf G =(V,E) har en mengde noder, V, og en mengde kanter, E V og E er henholdsvis antall noder og antall kanter i grafen Hver kant er et par av noder, dvs. (u, v) slik at u, v V En kant (u, v) modellerer at u er relatert til v Dersom nodeparet i kanten (u, v) er ordnet (dvs. at rekkefølgen har betydning), sier vi at grafen er rettet, i motsatt fall er den urettet Grafer er den mest fleksible datastrukturen vi kjenner ( alt kan modelleres med grafer) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 6 / 55

Hvorfor grafer? De dukker opp i veldig mange problemer i hverdagslivet: Flyplassystemer Datanettverk Trafikkflyt Ruteplanlegging VLSI (chip design) og mange flere... Grafalgoritmer viser veldig godt hvor viktig valg av datastruktur er mhp. tidsforbruk Det finnes grunnleggende algoritmeteknikker som løser mange ikke-trivielle problemer raskt Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 7 / 55

Grafer: Definisjoner og varianter Node y er nabo-node (eller etterfølger) til node x dersom (x, y) E En graf er vektet dersom hver kant har en tredje komponent, kalt kost eller vekt x 2 y 9 5 z Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 8 / 55

En vei (eller sti) i en graf er en sekvens av noder v 1, v 2, v 3,..., v n slik at (v i, v i+1 ) E for 1 i n 1 Lengden til veien er lik antall kanter på veien, dvs. n 1 x y w z <z, w, x> er en vei med lengde 2 Kosten til en vei er summene av vektene langs veien y 1 z x <z, w, x> er en vei med kost 7 5 w 2 En vei er enkel dersom alle nodene (untatt muligens første og siste) på veien er forskjellige Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 9 / 55

Våre grafer har vanligvis ikke loops, (v, v), eller multikanter (to like kanter): En løkke (sykel) i en rettet graf er en vei med lengde 1 slik at v 1 = v n. Løkken er enkel dersom stien er enkel I en urettet graf må også alle kanter i løkken være forskjellige Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 10 / 55

En rettet graf er asyklisk dersom den ikke har noen løkker En rettet, asyklisk graf blir ofte kalt en DAG (Directed, Acyclic Graf) En urettet graf er sammenhengende dersom det er en vei fra hver node til alle andre noder sammenhengende ikke sammenhengende Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 11 / 55

En rettet graf er sterkt sammenhengende dersom det er en vei fra hver node til alle andre noder En rettet graf er svakt sammenhengende dersom den underliggende urettede grafen er sammenhengende sterkt sammen hengende svakt sammen hengende Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 12 / 55

Graden til en node i en urettet graf er antall kanter mot noden Inngraden til en node i en rettet graf er antall kanter inn til noden Utgraden til en node i en rettet graf er antall kanter ut fra noden. v Grad(v)=3 v Inngrad(v)=1 Utgrad(v)=4 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 13 / 55

Hvordan representere grafer? Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 14 / 55

Nabo-matrise (adjacency matrix) Bra hvis tett graf, dvs. E = Θ( V 2 ) Det tar O( V ) tid å finne alle naboer Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 15 / 55

Nabo-liste (adhacency list) Bra hvis tynn ( sparse ) graf Tar O(Utgrad(v)) tid å finne alle naboer til v De fleste grafer i det virkelige liv er tynne! Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 16 / 55

Objekter & array I Java kan grafer også representeres ved en kombinasjon av node-objekter og etterfølgerarrayer Arraylengden kan være en parameter til node-klassens constructor Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 17 / 55

c l a s s Node { i n t a n t a l l N a b o e r ; Node [ ] e t t e r f ; double [ ] v e k t ; } Node ( i n t k a p a s i t e t ) { e t t e r f = new Node [ k a p a s i t e t ] ; v e k t = new double [ k a p a s i t e t ] ; a n t a l l N a b o e r = 0 ; } Da må vi vite antall etterfølgere når vi genererer noden Eventuelt kan vi estimere en øvre grense og la siste del av arrayen være tom Vi trenger da en variabel som sier hvor mange etterfølgere en node faktisk har Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 18 / 55

Topologisk sortering En topologisk sortering er en ordning (rekkefølge) av noder i en DAG slik at dersom det finnes en vei fra v i til v j, så kommer v j etter v i i ordningen Topologisk sortering er umulig hvis grafen har en løkke MA100/ MA001 IN102 IN115 En liten del av Ifis kursplan i 1999 IN105 IN114 IN212 IN394 MA108 IN147 IN211 IN310 MA IN 118 IN210 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 19 / 55

Følgende enkle algoritme finner en topologisk sortering (hvis det er noen): 1 Finn en node med inngrad = 0 2 Skriv ut noden, og fjern noden og utkantene fra grafen (marker noden som ferdig og reduser inngraden til nabonodene) 3 Gå tilbake til punkt 1 Eksempel: Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 20 / 55

Algoritme for topologisk sortering v o id t o p s o r t ( ) { Node v ; f o r ( i n t t e l l e r = 0 ; t e l l e r < ANTALL_NODER; t e l l e r ++) { v = finnnynodemedinngradnull ( ) ; i f ( v == n u l l ) { e r r o r ( "Løkke f u n n e t! " ) ; } e l s e { < S k r i v ut v som node t e l l e r > f o r < h v e r nabo w t i l v > { w. i n n g r a d ; }}}} Denne algoritmen er O( V 2 ) siden finnnynodemedinngradnull ser gjennom hele node/inngrad-tabellen hver gang Unødvendig: bare noen få av verdiene kommer ned til 0 hver gang Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 21 / 55

En forbedring er å holde alle noder med inngrad=0 i en boks. Boksen kan implementeres som en stakk eller en kø: 1 Plasser alle nodene med inngrad=0 i boksen. 2 Ta ut en node v fra boksen. 3 Skriv ut v. 4 Fjern v fra grafen og reduserer inngraden til alle etterfølgerne. 5 Dersom noen av etterfølgerne får inngrad=0, settes de inn i boksen. 6 Gå tilbake til punkt 2. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 22 / 55

Forbedret algoritme v o id t o p s o r t ( ) { Kø k = new Kø ( ) ; Node v ; i n t t e l l e r = 0 ; f o r < h v e r node v > i f ( v. i n n g r a d == 0) k. s e t t I n n ( v ) ; w h i l e (! k. isempty ( ) ) { v = k. taut ( ) ; < S k r i v ut v >; t e l l e r ++; } f o r < h v e r nabo w t i l v > { w. i n n g r a d ; i f (w. i n n g r a d == 0) k. s e t t I n n (w ) ; } } i f ( t e l l e r < ANTALL_NODER) e r r o r ( "Løkke f u n n e t! " ) ; Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 23 / 55

Forutsatt at vi bruker nabolister, er denne algoritmen O( V + E ). Kø/stakk-operasjoner tar konstant tid, og hver node og hver kant blir bare behandlet en gang. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 24 / 55

Oppgave Anta at du har en avhengighetsgraf med noder: {Q, B, J, P, A, Z}. Grafen har 4 lovlige topologiske sorteringer, det finnes ingen annen sortering av nodene som tilfredstiller avhengighetene: 1 Q, A, B, J, Z, P 2 Q, B, A, J, Z, P 3 Q, A, B, Z, J, P 4 Q, B, A, Z, J, P Tegn en graf som oppfyller kriteriene. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 25 / 55

Korteste vei, en-til-alle I korteste vei problemet (en-til-alle) har vi gitt en (muligens vektet) graf G=(V,E) og en node s. Vi ønsker å finne den korteste veien (evt. med vekter) fra s til alle andre noder i G. x 2 y 9 5 z Korteste vei fra z til x uten vekt er 1. Korteste vei fra z til x med vekt er 7 (via y). Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 26 / 55

Negative vekter (kost) i løkker kan skape problemer: x 12 y 5 5 Hvor mye koster korteste vei fra x til z? z Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 27 / 55

Korteste vei i en uvektet graf Korteste vei fra s til t i en uvektet graf er lik veien som bruker færrest antall kanter. V 1 V 2 V 3 V 4 V 5 V 6 V 7 (Det tilsvarer at alle kanter har vekt=1) Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 28 / 55

Følgende bredde-først algoritme løser problemet for en node s i en uvektet graf G: 1 Marker at lengden fra s til s er lik 0. (Merk at s foreløpig er den eneste noden som er markert.) 2 Finn alle etterfølgere til s. Marker disse med avstand 1. 3 Finn alle umarkerte etterfølgere til nodene som er på avstand 1. Marker disse med avstand 2. 4 Finn alle umarkerte etterfølgere til nodene som er på avstand 2. Marker disse med avstand 3. 5 Fortsett til alle noder er markert, eller vi ikke har noen umarkerte etterfølgere. Finnes det fortsatt umarkerte noder, kan ikke hele G nåes fra s. Hvis G er urettet, skjer dette hvis og bare hvis G er usammenhengende. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 29 / 55

Vi kan finne den korteste veien ved å sette bakoverpekere ( vei ) til den noden som oppdaget oss v o id u v e k t e t ( Node s ) { f o r < h v e r node v > { v. a v s t a n d = UENDELIG ; v. k j e n t = f a l s e ; } s. a v s t a n d = 0 ; f o r ( i n t d i s t = 0 ; d i s t < ANTALL_NODER; d i s t ++) { f o r < h v e r node v > { i f (! v. k j e n t && v. a v s t a n d == d i s t ) { v. k j e n t = t r u e ; f o r < h v e r nabo w t i l v > { i f (w. a v s t a n d == UENDELIG) { w. a v s t a n d = d i s t + 1 ; w. v e i = v ; }}}}}} Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 30 / 55

Hovedløkken vil som oftest fortsette etter at alle noder er merket, men den vil terminere selv om ikke alle noder kan nåes fra s. Tidsforbruket er O( V 2 ). Vi sparer tid ved å benytte en kø av noder. Vi begynner med å legge s inn i køen. Så lenge køen ikke er tom, tar vi ut første node i køen, behandler denne og legger dens etterfølgere inn bakerst i køen. Da blir s behandlet først. Så blir alle noder i avstand 1 behandlet før alle i avstand 2, før alle i avstand 3... Denne strategien ligner på bredde først traversering av trær (først rotnoden, så alle noder på nivå 1, så alle noder på nivå 2, osv). Tidsforbruket blir O( E + V ) fordi køoperasjoner tar konstant tid og hver kant og hver node bare blir behandlet en gang. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 31 / 55

Korteste uvektet vei fra node s v o id u v e k t e t ( Node s ) { Kø k = new Kø ( ) ; Node v ; f o r < h v e r node n > n. a v s t a n d = UENDELIG ; s. a v s t a n d = 0 ; k. s e t t I n n ( s ) ; w h i l e (! k. isempty ( ) ) { v = k. taut ( ) ; f o r < h v e r nabo w t i l v > { i f (w. a v s t a n d == UENDELIG) { w. a v s t a n d = v. a v s t a n d + 1 ; w. v e i = v ; k. s e t t I n n (w ) ; }}}} Bruken av kø gjør attributtet kjent overflødig. Forutsatt at vi bruker nabolister, er denne algoritmen O( V + E ). Kø-operasjoner tar konstant tid, og hver node og hver kant blir behandlet bare en gang. Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 32 / 55

Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 33 / 55

Korteste vei i en vektet graf uten negative kanter Graf uten vekter: Velger først alle nodene med avstand 1 fra startnoden, så alle med avstand 2 osv Mer generelt: Velger hele tiden en ukjent node blant dem med minst avstand fra startnoden Den samme hovedideen kan brukes hvis vi har en graf med vekter algoritmen: publisert av Dijkstra i 1959 og har fått navn etter ham Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 34 / 55

[source: http://biofilmforskning.wordpress.com/mikroorganismer/mugg/] Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 35 / 55

X V X s v* w* Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 36 / 55

Nodene er enten KJENT eller UKJENT KJENT = korteste vei fra s funnet! UKJENT = korteste vei er under beregning i starten: KJENT UKJENT s d s = 0.. V s For hvert steg øker algo. mengden av kjente noder med 1. Hvilken node velger den?? Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 37 / 55

KJENT UKJENT s d s = 0 v1 d v1 C v1,w1 C v1,w3 w1 w2 v2 d v2 C v2,w2 w3 Velg den noden som har minst avstand til s: Dijkstra grådig kriterier MIN(d v1 + C v1,w1, d v2 + C v2,w2, d v1 + C v1,w3 ) }{{}}{{}}{{} d w1 d w2 d w3 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 38 / 55

KJENT UKJENT d w1 w1 C w1,w4 s v1 d v1 C v1,w3 w4 d s = 0 w2 v2 d v2 C v2,w2 w3 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 39 / 55

6Ingrid SåChieh lenge Yu (Ifi, detuio) finnes ukjente noder, INF2220 gå til punkt 3 H2015, forelesning 5 40 / 55 Dijkstras algoritme 1 For alle noder: Sett avstanden fra startnoden s lik. Merk noden som ukjent 2 Sett avstanden fra s til seg selv lik 0 3 Velg en ukjent node v med minimal (aktuell) avstand fra s og marker v som kjent 4 For hver ukjent nabonode w til v: Dersom avstanden vi får ved å følge veien gjennom v, er kortere enn den gamle avstanden til s reduserer avstanden til s for w sett bakoverpekeren i w til v 5 Akkurat som for uvektede grafer, ser vi bare etter potensielle forbedringer for naboer (w) som ennå ikke er valgt (kjent) uvektet: d w = d v + 1 hvis d w = vektet: d w = d v + c v,w hvis d v + c v,w < d w

Eksempel Input: s = V 1 4 V 1 6 2 3 V 2 10 V 3 5 2 8 V 4 7 4 2 V 5 1 V 6 V 7 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 41 / 55

Den første noden som velges, er startnoden V 1 0 2 V 1 V 2 2 4 6 3 10 4 V 3 5 2 8 V 4 6 7 4 2 V 5 οο οο 1 V 6 V 7 οο Naboene til V 1 har fått endret sin avstand og fått tilbakepekere til V 1 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 42 / 55

Nå er V 2 nærmeste ukjente node 0 2 V1 V2 2 4 6 3 10 4 V 3 5 2 8 V 4 5 7 4 2 V 5 12 οο 1 V 6 V 7 οο V 4 og V 5 har fått ny avstand og tilbakepeker Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 43 / 55

V 3 er nærmeste ukjente node 0 2 V1 V2 2 4 6 3 10 4 V 3 5 2 8 V 4 5 7 4 2 V 5 12 9 1 V 6 V 7 οο V 6 har fått endret sin avstand og fått tilbakepeker til V 3 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 44 / 55

Nå er V 4 nærmeste ukjente node. Merk at den aldri senere kan få endret sin avstand 0 2 V1 V2 2 4 6 3 10 4 V 3 5 2 8 V 4 5 7 4 2 V 5 12 1 9 V 6 V 7 9 V 7 har fått ny avstand og tilbakepeker, og V 6 og V 7 er nærmeste ukjente noder Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 45 / 55

Vi velger V 6 som blir kjent 0 2 V1 V2 2 4 6 3 10 4 V 3 5 2 8 V 4 5 7 4 2 V 5 12 1 9 V 6 V 7 9 Nå er V 7 nærmest og blir kjent Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 46 / 55

V 5 får ny avstand og tilbakepeker 0 2 V1 V2 2 4 6 3 10 4 V 3 5 2 8 V 4 5 7 4 2 V 5 11 1 9 V 6 V 7 9 Vi kan nå avslutte med å gjøre V 5 kjent Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 47 / 55

Oppgave Bruk Dijkstras algoritme, og fyll ut tabellen nedenfor! 4 V 1 1 2 3 V 2 10 V 3 5 2 8 V 4 2 4 6 V 5 1 V 6 V 7 Initielt: v kjent avstand vei v kjent avstand vei v 1 v 2 F F 0 8 0 0 v 1 v 2 v 3 F 8 0 v 3 v 4 F 8 0 v 4 v 5 v 6 v 7 F F F 8 8 8 0 0 0 v 5 v 6 v 7 Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 48 / 55

Hvorfor virker algoritmen? Invariant Ingen kjent node har større avstand til s enn en ukjent node Alle kjente noder har riktig korteste vei satt Vi plukker ut en ukjent node v med minst avstand (d v ), markerer den som kjent og påstår at avstanden til v er riktig Denne påstanden holder fordi: d v er den korteste veien ved å bruke bare kjente noder de kjente nodene har riktig korteste vei satt en vei til v som er kortere enn d v, må nødvendigvis forlate mengden av kjente noder et sted, men d v er allerede den korteste veien fra kjente noder til v Dette argumentet holder fordi vi ikke har negative kanter! Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 49 / 55

X V X s y z v* w* Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 50 / 55

Tidsforbruk Hvis vi leter sekvensielt etter den ukjente noden med minst avstand tar dette O( V ) tid, noe som gjøres V ganger, så total tid for å finne minste avstand blir O( V 2 ) I tillegg oppdateres avstandene, maksimalt en oppdatering per kant, dvs. til sammen O( E ) Totalt tidsforbruk O( E + V 2 ) = O( V 2 ) Raskere implementasjon (for tynne grafer): Bruker en prioritetskø til å ta vare på ukjente noder med avstand mindre enn Prioriteten til ukjent node forandres hvis vi finner kortere vei til noden deletemin og decreasekey bruker O(log V ) tid (kap. 6) Totalt tidsforbruk Ingrid Chieh Yu (Ifi, O( V UiO) log V + E INF2220 log V ) = O( E log H2015, V ) forelesning 5 51 / 55

Hva med negative kanter? En mulig løsning: Nodene er ikke lenger kjente eller ukjente Vi har i stedet en kø som inneholder noder som har fått forbedret avstandsverdien sin Løkken i algoritmen gjør følgende: 1 Ta ut en node v fra køen 2 For hver etterfølger w, sjekk om vi får en forbedring (d w > d v + c v,w ) 3 Oppdater i så fall avstanden, og plasser w (tilbake)! i køen (hvis den ikke er der allerede) Tidsforbruket blir O( E V ) Det finnes ingen korteste vei med negative løkker i G. Det er det hvis og bare hvis samme node blir tatt ut av køen mer enn V ganger. Da må vi terminere algoritmen! Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 52 / 55

Hva med asykliske grafer? Lineær tid ved å behandle nodene i en topologisk rekkefølge O( E + V ) når en node v er valgt, kan d v ikke lenger senkes siden det er ingen innkommende kanter som kommer fra ukjente noder Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 53 / 55

Oppsummering Graf: Noder + Kanter Begrep: Rettet, urettet, inngrad, utgrad, sti... DAG: Rettet asyklisk graf (topologisk sortering) Avstand: Korteste vei en-til-alle Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 54 / 55

Neste forelesning: 24. september Grafer II:Prim, Kruskal, Dybde-først søk Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 55 / 55