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

Like dokumenter
Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. 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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

Korteste vei i en vektet graf uten negative kanter

Grunnleggende Grafteori

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

København 20 Stockholm

INF1020 Algoritmer og datastrukturer GRAFER

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Anvendelser av grafer

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

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

Rettede, ikke-sykliske grafer (DAG)

INF Algoritmer og datastrukturer

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

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

Grunnleggende Grafalgoritmer

TMA4140 Diskret Matematikk Høst 2016

INF Algoritmer og datastrukturer

MAT1030 Forelesning 22

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

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

MAT1030 Forelesning 22

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

PG4200 Algoritmer og datastrukturer Forelesning 10

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

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

MAT1030 Diskret Matematikk

Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for:

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

Notater til INF2220 Eksamen

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

Pensum: fra boken (H-03)+ forelesninger

MAT1030 Forelesning 23

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

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Pensum: fra boken (H-03)+ forelesninger

Dijkstras algoritme Spørsmål

INF Algoritmer og datastrukturer

Grunnleggende Grafalgoritmer II

INF Algoritmer og datastrukturer

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

Disjunkte mengder ADT

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

LO118D Forelesning 9 (DM)

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

MAT1140: Kort sammendrag av grafteorien

INF Algoritmer og datastrukturer

Kompleksitet og Beregnbarhet

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

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

INF Algoritmer og datastrukturer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

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

Innhold. Innledning 1

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

INF1020 Algoritmer og datastrukturer GRAFER

Grafalgoritmer: Korteste vei

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

Minimum Spenntrær - Kruskal & Prim

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Obligatorisk oppgave 2 - inf

Oppgave 1. Sekvenser (20%)

Algoritmer og Datastrukturer

MAT1030 Diskret matematikk

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

Kap 9 Tre Sist oppdatert 15.03

Eksamen i tdt4120 Algoritmer og datastrukturer

MAT1030 Diskret Matematikk

Forelesning 30: Kompleksitetsteori

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

Forelesning 28. Grafer og trær, eksempler. Dag Normann - 5. mai Grafer og trær. Grafer og trær. Grafer og trær

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet

Transkript:

Dagens plan: INF0 - Algoritmer og datastrukturer HØSTEN 007 Institutt for informatikk, Universitetet i Oslo INF0, forelesning 6: Grafer Denisjon av en graf (kap. 9.1) Grafvarianter Intern representasjon av grafer (kap. 9.1.1) Topologisk sortering (kap. 9.) en-til-alle uvektet graf (kap. 9.3.1) Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 1 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 / 3 Grafer Det første grafteoretiske problem: Broene i Königsberg Grafer vi har sett allerede Grafer Er det mulig å ta en spasertur som krsser hver av broene nøaktig en gang? Labrint, rundreise, trær Dette problemet ble løst av Euler allerede i 1736! Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 3 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 4 / 3

Grafer Grafer 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 betdning), sier vi at grafen er rettet, i motsatt fall er den urettet Hvorfor grafer? De dukker opp i veldig mange problemer i hverdagslivet: Flplassstemer Datanettverk Trakkt Ruteplanlegging VLSI (chip design) og mange ere... Grafer er den mest eksible datastrukturen vi kjenner (alt kan modelleres med grafer) Grafalgoritmer viser veldig godt hvor viktig valg av datastruktur er mhp. tidsforbruk Det nnes grunnleggende algoritmeteknikker som løser mange ikke-trivielle problemer raskt Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 5 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 6 / 3 Node er nabo-node (eller etterfølger) til node dersom (, ) E En vei (eller sti) i en graf er en sekvens av noder v 1, v, 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 w z <z, w, > er en vei med lengde En graf er vektet dersom hver kant har en tredje komponent, kalt kost eller vekt 5 z 9 Kosten til en vei er summene av vektene langs veien 1 z 5 w <z, w, > er en vei med kost 7 En vei er enkel dersom alle nodene (untatt muligens første og siste) på veien er forskjellige Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 7 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 8 / 3

Våre grafer har vanligvis ikke loops, (v, v), eller multikanter (to like kanter): En løkke (skel) 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 En rettet graf er asklisk dersom den ikke har noen løkker En rettet, asklisk graf blir ofte kalt en DAG (Directed, Acclic Graf) En urettet graf er sammenhengende dersom det er en vei fra hver node til alle andre noder sammenhengende ikke sammenhengende Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 9 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 10 / 3 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 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. sterkt sammen hengende svakt sammen hengende v Grad(v)=3 v Inngrad(v)=1 Utgrad(v)=4 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 11 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 1 / 3

Nabo-matrise Bra hvis tett graf, dvs. E = Θ( V ) Det tar O( V ) tid å nne alle naboer skip! Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 13 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 14 / 3 Nabo-liste Objekter & arra Bra hvis tnn (sparse) graf Tar O(Utgrad(v )) tid å nne alle naboer til v De este grafer i det virkelige liv er tnne! I Java kan grafer også representeres ved en kombinasjon av node-objekter og etterfølgerarraer Arralengden kan være en parameter til node-klassens constructor: Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 15 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 16 / 3

Topologisk sortering c l a s s Node { i n t a n t E t t e r f ; Node [ ] e t t e r f ; F l o a t [ ] v e k t ; Node ( i n t ant ) { e t t e r f = new Node [ ant ] ; v e k t = new F l o a t [ ant ] ; a n t E t t e r f = ant ; En topologisk sortering er en ordning (rekkefølge) av noder i en DAG slik at dersom det nnes 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 ere mulige løsninger Da må vi vite antall etterfølgere når vi genererer noden Eventuelt kan vi estimere en øvre grense og la siste del av arraen være tom Eksempel: forutsetter/bgger på graf MA100/ MA001 IN105 IN10 IN115 IN114 En liten del av Ifis kursplan i 1999 IN1 IN394 Vi trenger da en variabel som sier hvor mange etterfølgere en node faktisk har En topologisk sortering er en lovlig rekkefølge å ta alle kursene på I i MA108 MA IN 118 IN147 IN11 IN10 IN310 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 17 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 18 / 3 Følgende enkle algoritme nner en topologisk sortering (hvis det er noen): 1. Finn en node med inngrad = 0. 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 Algoritme for topologisk sortering (MAW side 3, gur 9.5) v o i d 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 = finnnnodemedinngradnull ( ) ; i f ( v == n u l l ) { e r r o r ( "Løkke f u n n e t! " ) ; Eksempel (gur 9.4): 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 ) siden nnnnodemedinngradnull ser gjennom hele node/inngrad-tabellen hver gang Unødvendig: bare noen få av verdiene kommer ned til 0 hver gang Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 19 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 0 / 3

Forbedret algoritme MAW side 33, gur 9.7) 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.. 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. v o i d 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. isempt ( ) ) { 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! " ) ; Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 1 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 / 3, en-til-alle I korteste vei problemet (en-til-alle) har vi gitt en (muligens vektet) graf G=(V,E) og en node s. 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. Vi ønsker å nne den korteste veien (evt. med vekter) fra s til alle andre noder i G. 9 5 z fra z til uten vekt er 1. fra z til med vekt er 7 (via ). (Vi skal senere se på korteste vei alle-til-alle, slik som i NAFs veibok) Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 3 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 4 / 3

i en uvektet graf Negative vekter (kost) i løkker kan skape problemer: fra s til t i en uvektet graf er lik veien som bruker færrest antall kanter. 1 5 5 Hvor me koster korteste vei fra til z? z V 3 V 1 V 6 V 4 V V 7 V 5 (Det tilsvarer at alle kanter har vekt=1) Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 5 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 6 / 3 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.). 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. 4. Finn alle umarkerte etterfølgere til nodene som er på avstand. 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. Vi kan nne den korteste veien ved å sette bakoverpekere til den noden som oppdaget oss (MAW side 38, gur 9.16) v o i d 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 ; Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 7 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 8 / 3

Korteste uvektet vei fra node s (MAW side 330, gur 9.18) 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 ). Vi sparer tid ved å bentte en kø av noder. Vi begnner 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, 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å, osv). Tidsforbruket blir O( E + V ) fordi køoperasjoner tar konstant tid og hver kant og hver node bare blir behandlet én gang. Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 9 / 3 v o i d 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. isempt ( ) ) { 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 overø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. Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 30 / 3 v avstand vei 1 v avstand vei 1 1 3 V 1 V V 1 V 1 3 3 0 V 3 V 4 V 5 4 5 V 3 V 4 V 5 4 1 5 3 V 6 V 7 6 7 V 6 V 7 6 1 3 7 3 4 Fll ut med s = v 3! Ferdig utflt med s = v 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 31 / 3 Einar Broch Johnsen (I, UiO) INF0 H007, forelesning 6 3 / 3