INF Algoritmer og datastrukturer

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

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

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

Minimum Spenntrær - Kruskal & Prim

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

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 10

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

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Vi skal se på grafalgoritmer for:

INF Algoritmer og datastrukturer

Anvendelser av grafer

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

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

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

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

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

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

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

Rettede, ikke-sykliske grafer (DAG)

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

Dijkstras algoritme Spørsmål

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

Pensum: fra boken (H-03)+ forelesninger

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

Innhold. Innledning 1

Notater til INF2220 Eksamen

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

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

Grunnleggende Grafalgoritmer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

Algdat - øvingsforelesning

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

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

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

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

MAT1030 Forelesning 22

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

Oppgave 1. Sekvenser (20%)

All good things. Fjortende forelesning

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

Definisjon av binært søketre

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

MAT1030 Diskret Matematikk

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

Algdat Eksamensforelesning. Nils Barlaug

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

INF1020 Algoritmer og datastrukturer GRAFER

ALGORITMER OG DATASTRUKTURER

Løsningsforslag for utvalgte oppgaver fra kapittel 9

INF2220: Forelesning 1

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

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

Grunnleggende Grafalgoritmer II

Transkript:

INF2220 - Algoritmer og datastrukturer HØSTEN 2016 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 1 / 30

Dagens plan: Dijkstra fort. Minimale spenntrær Prim Kruskal Dybde-først søk Løkkeleting DFS Spenntre Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 2 / 30

Dijkstra (fort.)

6Ingrid SåChieh lenge Yu (Ifi, detuio) finnes ukjente noder, INF2220 gå til punkt 3 28.09.2016 4 / 30 Dijkstras algoritme Dijkstra (fort.) 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

Oppgave Dijkstra (fort.) 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 28.09.2016 5 / 30

Dijkstra (fort.) 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 28.09.2016 6 / 30

Dijkstra (fort.) X V X s y z v* w* Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 7 / 30

Tidsforbruk Dijkstra (fort.) 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 V ) 28.09.2016 8 / 30

Dijkstra (fort.) 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 28.09.2016 9 / 30

Dijkstra (fort.) 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 28.09.2016 10 / 30

Minimale spenntrær

Minimale spenntrær Minimale spenntrær Definition Et minimalt spenntre for en urettet graf G er et tre med kanter fra grafen, slik at alle nodene i G er forbundet til lavest mulig kostnad eksisterer bare for sammenhengende grafer Generelt: flere minimale spenntrær for samme graf 4 V 1 1 2 3 V 2 10 V 1 1 2 V 2 V 3 5 2 8 V 4 7 4 6 V 5 V 3 2 V 4 4 6 V 5 1 V 6 V 7 1 V 6 V 7 Hvor mange kanter får spenntreet? Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 12 / 30

Grådige algoritmer

Grådige algoritmer 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 Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 14 / 30

Prims algoritme Grådige algoritmer Prims algoritme Treet bygges opp trinnvis I hvert trinn: pluss en kant (og dermed en tilhørende node) til treet 2 typer noder: Noder som er med i treet Noder som ikke er med i treet Nye noder: velge en kant (u, v) med minst vekt slik at u er med i treet, og v ikke er det. 4 2 v 1 v 2 1 v 3 v 4 v 5 2 7 5 4 8 6 v 6 v 7 1 3 10 Algoritmen begynner med å velge en vilkårlig node Eksempel: La oss velge v 1 Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 15 / 30

Grådige algoritmer Prim: growing a tree (1) Prims algoritme minste kant ut fra v 1 går til v 4, så vi legger den inn i spenntreet Vi har nå to mulige fortsettelser: 2 v 1 v 2 1 10 4 3 v 3 v 4 v 5 5 2 4 8 v 6 v 7 1 7 6 Kanten fra v 1 til v 2 Kanten fra v 4 til v 3 Samme hvilken vi velger, vil den andre av dem bli neste kant, så vi legger dem begge inn i spenntreet 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 Til slutt får vi kanten fra v 7 til v 5 Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 16 / 30

Grådige algoritmer Prims algoritme Prims algoritme: essensielt lik Dijkstras algo for korteste vei! I Prims algoritme er avstanden til en ukjent node v den minste vekten til en kant som forbinder v med en kjent node Husk: vi har urettede grafer, så hver kant befinner seg i 2 nabolister Kjøretidsanalysen er den samme som for Dijkstras algoritme Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 17 / 30

Hvorfor virker Prim? Grådige algoritmer Prims algoritme Lemma (Løkke-lemma for spenntrær) Anta at U er et spenntre for en graf, og at kanten e ikke er med i treet U Hvis vi legger kanten e til treet U, dannes en entydig bestemt enkel løkke. Hvis vi fjerner en vilkårlig kant i denne løkken, vil vi igjen ha et spenntre for grafen Invariant 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 Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 18 / 30

Kruskals algoritme: Grådige algoritmer Kruskals algoritme Se på kantene en etter en, sortert etter minst vekt Kanten aksepteres hvis, og bare hvis, den ikke fører til noen løkke Algoritmen implementeres vha. en prioritetskø og disjunkte mengder: Initielt plasseres kantene i en prioritetskø og nodene i hver sin disjunkte mengde (slik at find(v) gir mengden til (v)). Invariant: De disjunkte mengdene er subtrær av det endelige spenntreet deletemin gir neste kant (u, v) som skal testes Hvis find(u)! = find(v), har vi en ny kant i treet og gjør union(u, v) Hvis ikke, ville (u, v) ha dannet en løkke, så kanten forkastes Algoritmen terminerer når prioritetskøen er tom, eventuelt når vi har lagt inn V 1 kanter Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 19 / 30

Growing a forest (1) Grådige algoritmer Kruskals algoritme Utgangspunkt for Kruskals algoritme: 4 v 1 v 2 1 v 3 v 4 v 5 5 2 8 2 v 6 v 7 1 3 4 7 10 6 Vi har to kanter med vekt 1 De blir til to subtrær i spenn-treet Vi har to kanter med vekt 2 De blir del av det øverste subtreet kant med vekt 3: Den vil lage en løkke og må forkastes 2 kanter med vekt 4 hvor den mellom v 1 og v 3 danner en løkke, mens den andre binder de to subtrærne sammen kant med vekt 5: løkke kant med vekt 6: knytter den siste noden til treet Nå har vi lagt inn V 1 kanter i spenn-treet og Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 20 / 30

Tidsanalyse: Grådige algoritmer Kruskals algoritme Hovedløkken går E ganger I hver iterasjon gjøres en deletemin, to find og en union, med samlet tidsforbruk O(log E ) + 2 O(log V )+O(1) = O(log V ) (fordi log E < 2 log V ) Totalt tidsforbruk er O( E log V ) Prim vs. Kruskal Prims algoritme er noe mer effektiv enn Kruskals, spesielt for tette grafer Prims algoritme virker bare i sammenhengende grafer Kruskas algoritme gir et minimalt spenn-tre i hver sammenhengskomponent i grafen Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 21 / 30

Dybde-først søk

Dybde-først søk Dybde-først søk klassisk graf traversering generalisering av prefiks traversering for trær gitt: start node v: rekursivt traverserer alle nabonodene rekursjon 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 vilkårlige grafer: pass på å terminerer rekursjon! unvisited visited nodes. DFS Initialize: all nodes unvisited. Recur: when visited: return immidiately when unvisited set to visited recur on all neighbors Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 23 / 30

Dybde-først søk A v o i d dybdeførstsøk ( Node v ) { v. merke = t r u e ; f o r < h v e r nabo w t i l v > { i f (! w. merke ) { dybdeførstsøk (w ) ; } } } G C B E D F Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 24 / 30

Løkkeleting Dybde-først søk Løkkeleting Vi kan bruke dybde-først søk til å sjekke om en graf har løkker 3 verdier til tilstandsvariablen: usett, igang og ferdig (besøkt) v o i d l økkelet ( Node v ) { i f ( v. t i l s t a n d == i g a n g ) { < Løkke e r f u n n e t > } e l s e i f ( v. t i l s t a n d == u s e t t ) { v. t i l s t a n d = i g a n g ; f o r < h v e r nabo w t i l v > { l økkelet (w ) ; } v. t i l s t a n d = f e r d i g ; } } Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 25 / 30

Dybde-først søk Er grafen sammenhengende? Løkkeleting urettet graf & DFS 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 rettet graf & DFS En rettet graf er sterkt sammenhengende hvis og bare hvis vi fra hver eneste node v klarer å besøke alle de andre nodene i grafen ved et dybde-først søk fra v 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 Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 26 / 30

Urettet grafer

Urettet grafer Dybde-først-spenntre for urettet sammenhengende grafer ikke sammenhengende grafer: dfs spanning forest huske back-pointers Ulike type kanter gitt en bestemt kjøring av dfs 1 tree edges 2 back edges Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 28 / 30

Urettet grafer DFS, urettet graf (1) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 29 / 30

Urettet grafer Biconnectivity Stongly connected components Neste forelesning: 5. oktober Grafer III: Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 30 / 30