Grunnleggende Grafteori

Like dokumenter
IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF 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

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

MAT1030 Forelesning 22

Grunnleggende Grafalgoritmer

INF Algoritmer og datastrukturer

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

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

Anvendelser av grafer

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

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

MAT1030 Forelesning 22

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

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

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

MAT1030 Diskret Matematikk

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

MAT1030 Forelesning 23

Kompleksitet og Beregnbarhet

TMA4140 Diskret Matematikk Høst 2016

Anvendelser av grafer

PG4200 Algoritmer og datastrukturer Forelesning 10

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

Vi skal se på grafalgoritmer for:

INF1020 Algoritmer og datastrukturer GRAFER

MAT1030 Diskret Matematikk

IN Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

MAT1030 Forelesning 25

Grunnleggende Grafalgoritmer II

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

IN2010: Algoritmer og Datastrukturer Series 2

MAT1030 Diskret matematikk

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

MAT1030 Forelesning 24

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamen i tdt4120 Algoritmer og datastrukturer

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

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger

Vi skal se på grafalgoritmer for:

Innhold. Innledning 1

MAT1030 Diskret matematikk

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

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

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

IN Algoritmer og datastrukturer

Korteste vei i en vektet graf uten negative kanter

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

Dijkstras algoritme Spørsmål

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

LO118D Forelesning 9 (DM)

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

En litt annen måte å forklare traversering på. Traversering

Grafteori. MAT1030 Diskret Matematikk. Oppsummering. Oppsummering. Forelesning 24: Grafer og trær. Dag Normann

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

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

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

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

MAT1140: Kort sammendrag av grafteorien

Forelesning 24. Grafer og trær. Dag Normann april Vektede grafer. En kommunegraf

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

Kompleksitet. IN algoritmer og datastrukturer Plenumstime / repetisjon

SIF8010 ALGORITMER OG DATASTRUKTURER

Oppgave 1. Sekvenser (20%)

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

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag for utvalgte oppgaver fra kapittel 9

København 20 Stockholm

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

MAT1030 Forelesning 25

Algdat - øvingsforelesning

Transkript:

Grunnleggende Grafteori 2. September, 2019 Institutt for Informatikk 1

Dagens plan Terminologi og definisjoner Hvordan representere grafer i datamaskinen Traversering Dybde-først-søk Bredde-først-søk Topologisk sortering 2

Eksempler på grafer Kart Bekjentskapsgrafer Nettverk Trær Spilltrær Lenkelister Slektstrær Stjerner Søketrær Spenntrær 3

Terminologi Betegnelse Forklaring Eksempel Parellelle kanter Flere enn én kant mellom to noder (Enkle) løkker En kant fra en node til seg selv Urettet/rettet I en rettet graf har kantene har retning vs Vektet/uvektet Enkel graf Kantene har en verdi. I en uvektet graf kan man se for seg at alle kantene har vekt 1 Ingen løkker, ingen parallelle kanter, urettet, uvektet 5 vs 4

Terminologi II Betegnelse Forklaring Eksempel Graden til en node, deg(v) Inn- og ut-grad til en node Naboer, forgjengere og etterfølgere Hvor mange kanter er v koblet sammen med? For rettede grafer, hvor mange kanter går inn/ut av v? Noder som forbindes av en kant. Forgjenger/etterfølger om grafen er rettet 5

Terminologi III Betegnelse Forklaring Eksempel Sti (path) Vei (trail) En sekvens av noder (og kantene som forbinder dem) der ingen node gjentas En sekvens av noder (og kantene som forbinder dem) der ingen kant gjentas 3 3 1 4 Lengden av en sti Antall kanter i sekvensen 1 Kosten til en sti Summen av vekten til kantene i stien 9 1 6

Definisjon En graf G = V, E, der V er en mengde av noder (vertices) og E er en mengde av kanter (edges). En kant i E er på formen {u, v}, der u, v V og u v. Det vi har definert over er enkle grafer Vi kan si at kantene i E er tupler/ordnede par, (ikke mengder) og da får rekkefølgen noe å si. Dette vil tilsvare rettede grafer Hvis vi ønsker parallelle kanter kan vi definere E som en multimengde (antall forekomster har noe å si) Hvis vi fjerner kravet at u v, tillater vi løkker Med notasjonen V og E menes henholdsvis antall noder og antall kanter i G 7

Tidlige observasjoner En enkel (urettet) komplett graf med V noder har For enkle grafer vet vi at E = O( V 2 ). V ( V 1) 2 kanter. Her ser vi at antall kanter er begrenset av antall noder, så antall noder er en mulig målestokk på hvor stor grafen vår er. Husk at vi hele tiden tenker på hvordan ting skalerer. Når antall kanter i en graf er nærme V 2 sier vi gjerne at grafen er tett (dense). Det motsatte er tynne (sparse) grafer, der antall kanter er nærmere V. Se på alle nodene i G og summer gradene. Dette er alltid lik det dobbelte av antall kanter. deg(v) = 2 E v V 8

Sammenhengende grafer og komponenter En graf kalles sammenhengende hvis det finnes en sti mellom alle par av noder. En graf som ikke er sammenhengende kan deles inn i sammenhengende komponenter. Rettede grafer er sterkt sammenhengende hvis det finnes en rettet sti mellom alle par av noder. Hvis den underliggende urettede grafen er sammenhengende sier vi at den rettede grafen er svakt sammenhengende. 9

Sykler En sykel i en graf er en sti med minst tre noder, sammen med kanten som forbinder første og siste node. Legg merke til at det ikke spiller noen rolle hvor i en sykel vi begynner. Grafer som ikke inneholder sykler kalles asykliske. Når vi snakker om sykler i rettede grafer mener vi rettede sykler, som er definert på tilsvarende måte. En spesiell type graf vi skal jobbe med er rettede, asykliske grafer eller DAGs (directed acyclic graphs). 10

Trær Et tre er en sammenhengende asyklisk (urettet) graf. Trær har masse spesielle egenskaper og er en viktig del av pensum i dette kurset. Her ser vi et tre og en graf som ikke er et tre. 11

To klassiske grafproblemer I det første problemet leter vi etter Hamiltonsk sykel, det vil si en sykel som er innom hver node i G nøyaktig en gang. Hamiltonsykel Instans: En graf G Spørsmål: Har G en Hamiltonsykel? Vi husker at i en sykel har du ikke lov til å gjenta noder (utenom den første og siste). Hva om vi tillater gjenbruk av noder, men ikke kanter? Dette tilsvarer en vei (ikke gjenta kanter) som starter og slutter i samme node. En slik vei kalles en krets. Vi ønsker en krets som besøker alle kanter nøyaktig en gang. Slike kretser kaller vi Eulerkretser. Eulerkrets Instans: En graf G Spørsmål: Har G en Eulerkrets? 12

Representasjon av grafer: Objektorientering Noder som objekter med pekere til naboer Kanter som objekter? 13

Representasjon av grafer: Nabo-matrise (adjacency matrix) Typisk implementert som en 2-dimensjonal array, A A[i][j] = 1 tolkes som at G har en kant fra node i til node j Vektede grafer: A[i][j] = c(i, j) tolkes som at G har en kant fra node i til node j med kost c(i, j) Velegnet for rettede, tette grafer Krever O( V 2 ) plass, som man må forvente når grafen er tett 14

Representasjon av grafer: Nabo-liste (adjacency list) Vi lager en liste/mengde/array av noder og en liste/mengde/array av node-par som utgjør kantene En liste/array per node, som utgjør nodens naboer. Nabo(v) inneholder naboene til v Nabo-lista for node v krever O(deg(v)) plass Ligner på den matematiske definisjonen Velegnet for tynne grafer G representeres med O( V + E ) plass 15

Representasjon av grafer V = {1, 2, 3, 4, 5, 6, 7} 1 2 3 4 5 6 7 1 0 1 1 1 0 0 0 2 1 0 1 1 0 0 0 3 1 1 0 1 0 0 0 4 1 1 1 0 0 0 0 5 0 0 0 0 0 0 0 6 0 0 0 0 0 0 1 7 0 0 0 0 0 1 0 1 3 4 2 6 5 7 E = {{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {6, 7}} nabo(1) = {2, 3, 4} nabo(2) = {1, 3, 4} nabo(3) = {1, 2, 4} nabo(4) = {1, 2, 3} nabo(5) = nabo(6) = {7} nabo(7) = {6} 16

Traversering Ofte ønsker vi å traversere (gå gjennom) grafene vi jobber med For å kunne si noe nyttig om grafen, må vi ofte traversere den (gjerne flere ganger) Finn en spesifik node Hvor mange noder har en gitt egenskap? Hva er korteste vei mellom to noder? Inneholder grafen en sykel? Hamiltonsykel/ Eulerkrets Vi ønsker typisk en traverseringsalgoritme som er proposjonal med antall noder/kanter i grafen, altså en lineær traversering Dybde-først-søk Bredde-først-søk 17

Dybde-først-søk (DFS) DFS er en traverseringsalgoritme for grafer Minner om hvordan man traverserer en en labyrint Husk hvor du har vært og fortsett fremover til du finner en blindvei Hold til venstre Velg alltid en forgrening du ikke har prøvd før Backtrack der du må Vi implementerer DFS ved hjelp av rekursjon Vi ønsker å unngå å bli gående rundt og rundt i sykler i grafen Vi marker noder enten som besøkte eller ubesøkte 18

DFS i pseudokode DFS(G, s): visited(s) = true for hver kant (s,v) i G // her bruker vi nabo-lista til s if visited(v) = false DFS(G,v) // rekursjon DFS-full(G): for node v i G if visited(v) = false DFS(G,v) B A C D F G E 19

Analyse av DFS DFS(G, s): visited(v) = true for hver kant (s,v) i G // her bruker vi nabo-lista til s if visited(v) = false DFS(G,v) // rekursjon DFS-full(G): for node v i G if visited(v) = false DFS(G,v) DFS fra en node s besøker alle nodene i komponenten til s. DFS full sørger for at vi går gjennom alle komponenter i G. Hvis vi antar at vi har implementert G med nabo-lister, tar det O(deg(v)) tid å gå gjennom alle naboene til v. Dette må vi gjøre for alle noder, så vi får summen av gradene til alle nodene i G, som vi så var O( E ). I tillegg går den ytre løkka i DFS full gjennom alle nodene så den totale kjøretiden blir O( V + E ). 20

Bredde-først-søk (BFS) BFS traverserer en graf lag for lag fra en gitt startnode Hvis v er startnoden, vil BFS besøke alle noder som kan nåes fra v BFS gir oss nodene vi kan nå i 0 steg, 1 steg, 2 steg osv. Hvis G er urettet kan vi bruke BFS en gang for å avgjøre om G er sammenhengende Veldig nyttig når det kommer til å finne korteste sti mellom to noder Senere skal vi se på Dijkstra, en algoritme for å finne korteste sti i vektede grafer, som er basert på BFS Viktig i f.eks. modellsjekking. Nodene er tilstander og rettede kanter representerer overganger mellom tilstander 21

BFS i pseudokode BFS(G, v): visited(v) = true L_0 = [v] i = 0 while L_i ikke tom L_i+1 = [] for all u i L_i for all w i naboer(u) if visited(w) = false visited(w) = true sett inn w i L_i+1 i = i+1 A B D C Hvis vi antar at startnoden er B, vil BFS dele inn nodene som følger: E F G Lag 0 Lag 1 Lag 2 Lag 3 B A,C D, F E, G 22

Analyse av BFS BFS(G, v): visited(v) = true L_0 = [v] i = 0 while L_i ikke tom L_i+1 = [] for all u i L_i for all w i naboer(u) if visited(w) = false visited(w) = true sett inn w i L_i+1 i = i+1 Analysen av tidskompleksiteten til BFS er veldig lik den for DFS. Algoritmen BFS bruker O( E ) tid. Hvis G ikke er sammenhengende kan vi gjøre som for DFS; kjøre BFS fra ubesøkte noder helt til vi har besøkt alle komponenter i G. Etter dette har vi besøkt alle noder (tilsvarer den ytreløkka i DFS/BFS-full), får vi kjøretid O( V + E ). 23

Topologisk sortering Topologisk sortering ordner nodene i en rettet asyklisk graf (DAG) En avhengighetsgraf er et typisk eksempel på en DAG En topologisk sortering av en avhengighetsgraf gir en mulig prosjektplan Grafer som representerer noe temporalt (noe med tid) er ofte DAGs For eksempel kan nodene representere hendelser og de rettede kantene at noe skjedde før noe annet Hvis vi sorterer en slik graf ved hjelp av topologisk sortering får vi et mulig hendelsesforløp 24

Topologisk sortering eksempel I C D F A G H B E Ideen er å finne en node med inngrad null, og så fjerne den og alle utkanter og fortsett med neste av inngrad null. Anta at nodene og kantene i G er lagret i alfabetisk, rekkefølge. Da vil TopologiskSortering(G) gi følgende sortering: A, B, C, I, E, G, D, H, F Legg merke til at det kan finnes flere enn en korrekt topologisk sortering. 25

Topologisk sortering i pseudokode TopologiskSortering(G) S = [] // S er en tom stack for all nodes v in G: incounter(v) = indegree(v) if incounter(v) = 0 S.push(v) i = 1 \\fortsetter på andre side av streken while S ikke tom v = S.pop() sett v til å være node nummer i // i den topologiske sorteringen i = i+1 for hver u i etterfølgere(v) incounter(u) = incounter(u) -1 if incounter(u) = 0 S.push(u) if i > V returner sorteringen returner "G har en sykel" 26

Analyse: Topologisk sortering Først ser vi at TopologiskSortering kan brukes til å løse to problemer. Enten så gir den oss en ordning av nodene, eller så rapporterer den at G inneholder en sykel. Kjøretiden til TopologiskSortering er O( V + E ). Selve initialiseringen kan gjøres ved en enkel traversring av G, som vi vet kan gjøres i O( V + E ) tid. Etter dette besøkes alle noder (med mindre G har en sykel). Før en node v kan besøkes må vi ha fjernet alle kantene som gikk inn til v. I tillegg ser vi at ingen node eller kant kan besøkes mer enn en gang. 27