INF Algoritmer og datastrukturer

Like dokumenter
INF Algoritmer og datastrukturer

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

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

IN Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

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

Korteste vei i en vektet graf uten negative kanter

PG4200 Algoritmer og datastrukturer Forelesning 10

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

Anvendelser av grafer

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

TMA4140 Diskret Matematikk Høst 2016

Anvendelser av grafer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

MAT1030 Forelesning 22

INF1020 Algoritmer og datastrukturer GRAFER

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

Grunnleggende Grafalgoritmer

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

MAT1030 Forelesning 22

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

MAT1030 Diskret Matematikk

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

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Rettede, ikke-sykliske grafer (DAG)

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

MAT1030 Forelesning 23

Vi skal se på grafalgoritmer for:

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

Grunnleggende Grafalgoritmer II

Vi skal se på grafalgoritmer for:

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

INF Algoritmer og datastrukturer

Dijkstras algoritme Spørsmål

Algoritmer og datastrukturer Løsningsforslag

Pensum: fra boken (H-03)+ forelesninger

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

København 20 Stockholm

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

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

IN Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

Disjunkte mengder ADT

Notater til INF2220 Eksamen

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

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Algoritmer og Datastrukturer

Oppgave 1. Sekvenser (20%)

MAT1140: Kort sammendrag av grafteorien

EKSAMEN med løsningsforslag

LO118D Forelesning 9 (DM)

INF Algoritmer og datastrukturer

Obligatorisk oppgave 2 - inf

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

UNIVERSITETET I OSLO

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

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

UNIVERSITETET I OSLO

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

INF1020 Algoritmer og datastrukturer GRAFER

Eksamen i tdt4120 Algoritmer og datastrukturer

IN2010: Algoritmer og Datastrukturer Series 2

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

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

Grafalgoritmer: Korteste vei

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

UNIVERSITETET I OSLO

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

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

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

MAT1030 Diskret Matematikk

UNIVERSITETET I OSLO

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

1 Hver node er enten rød eller sort. 2 Rota er sort. 3 En rød node kan bare ha sorte barn

UNIVERSITETET I OSLO

Transkript:

INF2220 - Algoritmer og datastrukturer HØSTEN 2009 Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 6: Grafer Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 1 / 31

Dagens plan: Definisjon av en graf Grafvarianter Intern representasjon av grafer Topologisk sortering Korteste vei en-til-alle uvektet graf M.A.W. Data Structures and Problem Solving kap. 14 M.A.W. Data Structures and Algorithm Analysis kap. 9 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 2 / 31

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! Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 3 / 31

Grafer vi har sett allerede Labyrint Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 4 / 31

Grafer vi har sett allerede Trær A B C D E F G H I J Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 5 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 6 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 6 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 6 / 31

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) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 6 / 31

Hvorfor grafer? De dukker opp i veldig mange problemer i hverdagslivet: Flyplassystemer Datanettverk Trafikkflyt Ruteplanlegging VLSI (chip design) og mange flere... Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 7 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 7 / 31

Grafer: Definisjoner og varianter Node y er nabo-node (eller etterfølger) til node x dersom (x, y) E Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 8 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 8 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 9 / 31

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 z <z, w, x> er en vei med lengde 2 w Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 9 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 9 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 9 / 31

Våre grafer har vanligvis ikke loops, (v, v), eller multikanter (to like kanter): Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 10 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 10 / 31

En rettet graf er asyklisk dersom den ikke har noen løkker En rettet, asyklisk graf blir ofte kalt en DAG (Directed, Acyclic Graf) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 11 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 11 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 12 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 13 / 31

Hvordan representere grafer? Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 14 / 31

Hvordan representere grafer? Kan organisere strukturen etter noder og/eller etter kanter... Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 14 / 31

Hvordan representere grafer? Kan organisere strukturen etter noder og/eller etter kanter... Merk: Boka benytter eksplisitte datastrukturer for kantene. Dette gir (ofte) effektivitetsgevinst. For enkelhets skyld gjør vi ikke det på foilene... Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 14 / 31

Nabo-matrise (adjacency matrix) Bra hvis tett graf, dvs. E = Θ( V 2 ) Det tar O( V ) tid å finne alle naboer Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 15 / 31

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! Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 16 / 31

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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 17 / 31

class Node { int antallnaboer ; Node [ ] e t t e r f ; double [ ] vekt ; } Node( int kapasitet ) { e t t e r f = new Node [ kapasitet ] ; vekt = new double [ kapasitet ] ; antallnaboer = 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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 18 / 31

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 Vanligvis er det flere mulige løsninger Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 19 / 31

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 Vanligvis er det flere mulige løsninger Eksempel: forutsetter/bygger på graf MA100/ MA001 IN105 IN102 IN115 IN114 En liten del av Ifis kursplan i 1999 IN212 IN394 En topologisk sortering er en lovlig rekkefølge å ta alle kursene på Ifi i MA108 MA IN 118 IN147 IN211 IN210 IN310 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 19 / 31

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: Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 20 / 31

Algoritme for topologisk sortering void topsort () { Node v ; for ( int 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 funnet! ) ; } } } else { < Skriv ut v som node t e l l e r > for < hver nabo w t i l v > { w. inngrad ; } } 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 Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 21 / 31

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. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 22 / 31

Forbedret algoritme void topsort () { Kø k = new Kø ( ) ; Node v ; int t e l l e r = 0; for < hver node v > i f ( v. inngrad == 0) k. s e t t I n n ( v ) ; while (! k. isempty ()) { v = k. taut ( ) ; < Skriv ut v >; t e l l e r ++; } for < hver nabo w t i l v > { w. inngrad ; i f (w. inngrad == 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 funnet! ) ; Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 23 / 31

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 én gang. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 24 / 31

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. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 25 / 31

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). (Vi skal senere se på korteste vei alle-til-alle, slik som i NAFs veibok) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 25 / 31

Negative vekter (kost) i løkker kan skape problemer: x 12 y 5 5 Hvor mye koster korteste vei fra x til z? z Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 26 / 31

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) Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 27 / 31

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. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 28 / 31

Vi kan finne den korteste veien ved å sette bakoverpekere ( vei ) til den noden som oppdaget oss void uvektet (Node s ) { for < hver node v > { v. avstand = UENDELIG; v. kjent = f a l s e ; } s. avstand = 0; } for ( int d i s t = 0; d i s t < ANTALL NODER; d i s t++) { for < hver node v > { i f (! v. kjent && v. avstand == d i s t ) { v. kjent = true ; for < hver nabo w t i l v > { i f (w. avstand == UENDELIG) { w. avstand = d i s t + 1; w. vei = v ; } } } } } Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 29 / 31

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 ). Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 30 / 31

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). Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 30 / 31

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 én gang. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 30 / 31

Korteste uvektet vei fra node s void uvektet (Node s ) { Kø k = new Kø ( ) ; Node v ; for < hver node n > n. avstand = UENDELIG; s. avstand = 0; k. s e t t I n n ( s ) ; while (! k. isempty ()) { v = k. taut ( ) ; for < hver nabo w t i l v > { i f (w. avstand == UENDELIG) { w. avstand = v. avstand + 1; w. vei = 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 én gang. Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 31 / 31