INF1020 Algoritmer og datastrukturer GRAFER

Like dokumenter
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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Grunnleggende Grafteori

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

INF Algoritmer og datastrukturer

Minimum Spenntrær - Kruskal & Prim

Minimum spenntrær. Lars Vidar Magnusson Kapittel 23. Kruskal Prim

INF Algoritmer og datastrukturer

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

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

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

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

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

INF Algoritmer og datastrukturer

Notater til INF2220 Eksamen

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

PG4200 Algoritmer og datastrukturer Forelesning 10

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

Matchinger i ikke-bipartite grafer

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

Vi skal se på grafalgoritmer for:

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

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

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

Uke 5 Disjunkte mengder

MAT1030 Diskret Matematikk

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Disjunkte mengder ADT

LO118D Forelesning 12 (DM)

INF Algoritmer og datastrukturer

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

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

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

INF1020 Algoritmer og datastrukturer GRAFER

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

Anvendelser av grafer

Rettede, ikke-sykliske grafer (DAG)

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

MAT1030 Forelesning 22

MAT1030 Forelesning 25

Innhold. Innledning 1

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 Diskret Matematikk

Vi skal se på grafalgoritmer for:

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Algdat - øvingsforelesning

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

EKSAMEN med løsningsforslag

Løsningsforslag for utvalgte oppgaver fra kapittel 9

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

KONTINUASJONSEKSAMEN

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

All good things. Fjortende forelesning

LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2

Pensum: fra boken (H-03)+ forelesninger

København 20 Stockholm

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

Løsningsforslag - Korteste vei

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

SIF8010 ALGORITMER OG DATASTRUKTURER

Grunnleggende Grafalgoritmer II

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

KONTINUASJONSEKSAMEN

INF Algoritmer og datastrukturer

MAT1030 Forelesning 22

Oppgave 1. Sekvenser (20%)

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

Transkript:

GRAFER Dagens plan: Minimale spenntrær Prim Kapittel 9.5.1 Kruskal Kapittel 9.5.2 Dybde-først søk Kapittel 9.6.1 Løkkeleting Dobbeltsammenhengende grafer Kapittel 9.6.2 Å finne ledd-noder articulation points Ark 1 av 2 Forelesning 8.11.2004

Minimalt spenntre Et minimalt spenntre for en urettet graf G er et tre bestående av kanter fra grafen, slik at alle nodene i G er forbundet til lavest mulig kostnad. Minimale spenntrær eksisterer bare for sammenhengende grafer. Generelt kan det finnes flere minimale spenntrær for samme graf. 4 V 1 1 2 V 2 10 V 5 2 8 V 4 4 7 6 V 5 1 V 6 V 7 2 V1 V2 1 V 2 V 4 V 5 4 6 V 6 1 V 7??? Hvor mange kanter får spenntreet i det generelle tilfellet? Forelesning 8.11.2004 Ark 2 av 2

Grådige algoritmer Prøver i hvert trinn å gjøre det som ser best ut der og da. Typisk eksempel: Gi vekslepenger Raske algoritmer, men kan ikke løse alle problemer: Finn det høyeste punktet! Vi skal se på to ulike grådige algoritmer for å finne minimale spenntrær. Forelesning 8.11.2004 Ark av 2

Prims algoritme Treet bygges opp trinnvis. I hvert trinn legges en kant og dermed en tilhørende node til treet. På ethvert tidspunkt har vi to typer noder: De som er med i treet, og de som ikke er det. Nye noder legges til ved å velge en kant u, v med minst vekt slik at u er med i treet, og v ikke er det.! $ % & * % Vi begynner med å velge en vilkårlig node. La oss begynne med v 1. Forelesning 8.11.2004 Ark 4 av 2

! $ % & * % Minste kant ut fra v 1 går til v 4,såvi legger den inn i spenntreet.! $ % & * % Forelesning 8.11.2004 Ark 5 av 2

! $ % & * % Vi har nå to mulige forsettelser: kanten fra v 1 til v 2, eller kanten fra v 4 til v. Samme hvilken vi velger, vil den andre av dem bli neste kant, så vi legger dem begge inn i spenntreet.! $ % & * % Forelesning 8.11.2004 Ark 6 av 2

! $ % & * % Minste kant ut fra spenntreet går nå fra v 4 til v 7. Så får vi kanten fra v 7 til v 6. Endelig får vi kanten fra v 7 til v 5. Det ferdige spenntreet blir:! $ % & * % Forelesning 8.11.2004 Ark 7 av 2

Prims algoritme er essensielt lik Dijkstras algoritme for å finne korteste vei! «avstanden» til en node v: den minste vekten til en kant som forbinder v med en kjent node. Husk at vi har urettede grafer, slik at hver kant befinner seg i to nabolister. Samme kjøretidsanalyse som for Dijkstra! V 4 5 V 2 V 1 8 1 2 V 4 V 2 4 6 1 6 V7 7 10 V 5 v kjent avstand vei v 1 F 0 0 v 2 F 8 0 v F 8 0 v 4 F 8 0 v 5 F 8 0 v 6 F 8 0 v 7 F 8 0 Forelesning 8.11.2004 Ark 8 av 2

! $ % & * % +,-. /01.+2 45627 ><4 +,-. /01.+2 45627 ><4!,,,,,,,,,,,,! ; %,,,,,, 8+9294:29:624+-.+ /.</:4=2/9++ +,-. /01.+2 45627 ><4 +,-. /01.+2 45627 ><4! ; ; * %! ; ; ; * % /.</:4=2/9++! /.</:4=2/9++ Forelesning 8.11.2004 Ark 9 av 2

! $ % & * % +,-. /01.+2 7:;2< >57 +,-. /01.+2 7:;2< >57! 4 4 4 & %! 4 4 % /.5/6782/9++ /.5/6782/9++ +,-. /01.+2 7:;2< >57 +,-. /01.+2 7:;2< >57! 4 %! % /.5/6782/9++ /.5/6782/9++</4.5-98= Forelesning 8.11.2004 Ark 10 av 2

Hvorfor virker Prim? Løkke-lemmaet: Anta at U er et spenntre for en graf, og at kanten e ikke er med i treet U. Om vi legger kanten e til treet U, vil det dannes en entydig bestemt enkel løkke. Hvis, og bare hvis, vi fjerner en vilkårlig kant i denne løkken, vil vi igjen ha et spenntre for grafen. 10 8 9 15 1 4 5 11 10 T-delen av lokka. f 14 2 e 1 5 T: U-T: Prim-invarianten: Det treet T som dannes av de kantene og deres endenoder vi til nå har plukket ut, er slik at det finnes et minimalt spenntre U for grafen som inneholder alle kantene i T. Forelesning 8.11.2004 Ark 11 av 2

Kruskals algoritme Ser på kantene en etter en, sortert etter minst vekt: En kant aksepteres hvis den ikke fører til noen løkke. Kruskals algoritme opprettholder dermed en skog, ensamling trær: Initielt: V trær med en node hver. Legger til en kant: To trær slås sammen. Ved terminering: Bare ett tre. Bruker disjunkte sett kapittel 8: Invariant: To noder tilhører samme sett hviss de er sammenhengende i den nåværende spenn-skogen. Å velge en kant u, v tilsvarer å gjøre en union på u og v. Sorteringen av kantene gjøres mest effektivt ved å bruke en prioritetskø. Gjentatte deletemin gir da kantene i den rekkefølgen de skal testes. Forelesning 8.11.2004 Ark 12 av 2

Dybde-først søk Generalisering av prefiks traversering for trær. Vi starter i en node v og traverserer rekursivt alle nabonodene. Rekursjonen gjør at vi undersøker alle noder som kan nåes fra første etterfølger til v, før vi undersøker neste etterfølger til v. For en vilkårlig graf må vi passe på å unngå løkker: Markerer nodene som besøkt etterhvert som de behandles, og kaller rekursivt videre bare for umerkede noder. void dybdeførstsøknode v { v.merke = true; for < hver nabo w til v > { if!w.merke { dybdeførstsøkw; } } } Forelesning 8.11.2004 Ark 1 av 2

Midtveis i en dybde-først traversering ser kanskje kjeden av rekursive metodekall og besøkt-merkene i nodene slik ut: a* b* d* e * c g f * void DFSf {... DFS g... } void DFSd {... DFS f... } void DFSb {... DFS d... } void DFSa { }... DFS b... Her er vi nå! - Noder merket * er besøkte. - Node e er allerede behandlet ferdig. - Nå behandles node f - Den kommer til å kalle DFSg - DFSg har ingen ikke-besøkte etterfølgere. - Dermed må algoritmen trekke seg tilbake. - Først i DFSb finnes det en ikke-besøkt etterfølger. DFS a Forelesning 8.11.2004 Ark 14 av 2

Er grafen sammenhengende? Hvis grafen ikke er sammenhengende, kan vi foreta nye dybde-først søk fra noder som ikke er besøkte, inntil alle nodene er behandlet. En urettet graf er sammenhengende hvis og bare hvis et dybde-først søk som starter i en tilfeldig node, besøker alle nodene i grafen. En rettet graf er sterkt sammenhengende hvis og bare hvis vi fra hver eneste node vklarer å besøke alle de andre nodene i grafen ved et dybde-først søk fra v. Forelesning 8.11.2004 Ark 15 av 2

Løkkeleting INF1020 Algoritmer og datastrukturer Vi kan bruke dybde-først søk til å sjekke om en graf har løkker. Vi trenger da tre verdier til tilstandsvariablen: usett, igang og ferdig besøkt. void løkkeletnode v { if v.tilstand == igang { < Løkke er funnet > } else if v.tilstand == usett { v.tilstand = igang; for < hver nabo w til v > { løkkeletw; } v.tilstand = ferdig; } } Metoden bygger på at de nodene der kall er i gang, alltid ligger på en rett vei fra startnoden. Må passe på å gjøre nye startkall inntil metoden er kalt i alle nodene. Vil alltid finne en løkke dersom det eksisterer en! Forelesning 8.11.2004 Ark 16 av 2

Metoden for løkkeleting kan også gi oss en topologisk sortering med nodene skrevet ut i omvendt rekkefølge dersom grafen ikke har løkker. Det får vi til ved å skrive ut noden like før vi trekker oss tilbake idet vi er ferdig med kallet. Dette er riktig tidspunkt å skrive ut noden fordi: Vi har sjekket alle etterfølgerne til noden. Disse var enten usette og da har vi skrevet dem ut i det vi trakk oss tilbake fra dem, eller ferdige og da var de skrevet ut tidligere. Dersom vi fant en node som var igang, har vi funnet en løkke... Forelesning 8.11.2004 Ark 17 av 2

Dobbeltsammenheng biconnectivity a b d e c Figur 9.60, side 26 i MAW En dobbeltsammenhengende graf er en graf som fortsatt er sammenhengende selv om en vilkårlig node blir fjernet fra grafen. Dette er en viktig egenskap i mange nettverk som strøm-, vei-, data- og internett Forelesning 8.11.2004 Ark 18 av 2

a b d e c En dybde-først traversering av denne grafen i leksikografisk ordning ser slik ut: $! % Heltrukne linjer viser vanlige rekursive kall. De danner et spenntre for grafen. Stiplede linjer viser «bakoverkall», dvs. forsøk på kall av merkede noder. Disse kalles bakoverkanter i grafen. Forelesning 8.11.2004 Ark 19 av 2

Sammenhengende grafer som ikke er dobbeltsammenhengende, må ha minst en «ledd-node» articulation point, dvs. en node vi ikke kan fjerne uten å gjøre grafen ikke-sammenhengende. Eksempel fig. 9.62 i MAW: $! & % Her har vi to ledd-noder: C og D. Vi ser at ved å fjerne C mister G sin forbindelse til grafen, og ved å fjerne D, får vi to sammenhengskomponenter, {A, B, C, G} og{e,f}. Forelesning 8.11.2004 Ark 20 av 2

Algoritme for å finne ledd-noder Forutsetning: Vi har en sammenhengende graf G. Gjør et dybde-først søk i G og gi hver node v et besøksnummer Nrv prefix-ordning. Vi har nå et spenntre T for G med bakoverkanter hvor Nrv øker når vi går nedover i T. For hver node v i T definerer vi Lavv som den lavest nummererte node som kan nåes fra v ved å gå null eller flere kanter utover i T og til slutt muligens tilbake langs én bakoverkant. Mer presist er Lavv definert som minimum av Nrv Minste Nrw der v, w er bakoverkant i T dvs. en kant i G \ T Minste Lavw der v, w er kant i T Merk at idet vi er ferdig med v, kjenner vi Lavv slik at vi får merket nodene med Lavv i postfix-orden. Forelesning 8.11.2004 Ark 21 av 2

Ledd-nodene kan nå leses ut av verdiene av Nrv og Lavv i nodene i T Vi har to tilfeller: Rotnoden er en ledd-node hvis, og bare hvis, den har mer enn ett barn. Øvrige noder v er ledd-noder hvis, og bare hvis, v har et barn w med Lavw Nrv. Rotnoden tilfredsstiller alltid det andre kriteriet, så den må behandles spesielt. Merk at vi bare trenger én traversering for å utføre hele algoritmen, så tidsordenen blir O V + E. Eksemplet på neste lysark viser hvordan og hvorfor algoritmen virker. Forelesning 8.11.2004 Ark 22 av 2

$! & % Vi utfører algoritmen og merker hver node v med Nrv/Lavv, -! $ $ $$ * + % &$. // Vi ser på de to tilfellene: Hvis roten har flere barn, kan vi ikke fjerne roten uten å splitte grafen. Vi ser at node D har et barn E med LavE NrD. Det betyr at vi ikke kan komme fra E til noen node v med lavere nummer enn D uten å gå gjennom D. Altså er D en ledd-node. Se også figur 9.64 i MAW. Forelesning 8.11.2004 Ark 2 av 2