INF Algoritmer og datastrukturer

Like dokumenter
INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

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

INF1020 Algoritmer og datastrukturer GRAFER

Korteste vei i en vektet graf uten negative kanter

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Minimum Spenntrær - Kruskal & Prim

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

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

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

UNIVERSITETET I OSLO

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

INF Algoritmer og datastrukturer

Grunnleggende Grafteori

IN Algoritmer og datastrukturer

Vi skal se på grafalgoritmer for:

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

PG4200 Algoritmer og datastrukturer Forelesning 10

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

Anvendelser av grafer

INF Algoritmer og datastrukturer

IN2010: Algoritmer og Datastrukturer Series 2

Notater til INF2220 Eksamen

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

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

Vi skal se på grafalgoritmer for:

Pensum: fra boken (H-03)+ forelesninger

Object [] element. array. int [] tall

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

UNIVERSITETET I OSLO

ALGORITMER OG DATASTRUKTURER

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

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

Pensum: fra boken (H-03)+ forelesninger

INF1020 Algoritmer og datastrukturer GRAFER

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

ALGORITMER OG DATASTRUKTURER

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

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.

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

Flerveis søketrær og B-trær

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Trær. En datastruktur (og abstrakt datatype ADT)

Definisjon av binært søketre

Disjunkte mengder ADT

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

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

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

MAT1030 Diskret Matematikk

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

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

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

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

MAT1030 Diskret matematikk

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

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

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

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

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

INF1020 Algoritmer og datastrukturer GRAFER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Grunnleggende Grafalgoritmer III

Uke 5 Disjunkte mengder

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

MAT1030 Forelesning 22

EKSAMEN med løsningsforslag

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

Definisjon: Et sortert tre

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

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

Algdat - øvingsforelesning

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

Grunnleggende Grafalgoritmer

Dijkstras algoritme Spørsmål

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

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

INF Algoritmer og datastrukturer

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

Transkript:

INF0 - Algoritmer og datastrukturer HØSTEN 05 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Dagens plan: Minimale spenntrær Prim Kruskal Dybde-først søk Løkkeleting DFS Spenntre Biconnectivity Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

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 Hvor mange kanter får spenntreet? Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Minimale spenntrær Minimale spenntrær V V 3 V 5 8 V 3 0 7 6 V 6 V 7 V 5 Hvor mange kanter får spenntreet? Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Minimale spenntrær Minimale spenntrær V 3 V 0 V V V 3 5 8 V 7 6 V 5 V 3 V 6 V 5 V 6 V 7 V 6 V 7 Hvor mange kanter får spenntreet? Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Grådige algoritmer Minimale spenntrær 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) INF0.09.05 5 / 8

Prims algoritme Minimale spenntrær Prims algoritme Treet bygges opp trinnvis I hvert trinn: pluss en kant (og dermed en tilhørende node) til treet 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. v v v 3 v v 5 7 5 8 6 v 6 v 7 3 0 Algoritmen begynner med å velge en vilkårlig node Eksempel: La oss velge v Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 6 / 8

Prims algoritme Minimale spenntrær Prims algoritme Treet bygges opp trinnvis I hvert trinn: pluss en kant (og dermed en tilhørende node) til treet 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. v v v 3 v v 5 7 5 8 6 v 6 v 7 3 0 Algoritmen begynner med å velge en vilkårlig node Eksempel: La oss velge v Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 6 / 8

Minimale spenntrær Prim: growing a tree () Prims algoritme v v v 3 v v 5 5 8 v 6 v 7 3 7 0 6 minste kant ut fra v går til v, så vi legger den inn i spenntreet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree () Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Vi har nå to mulige fortsettelser: Kanten fra v til v Kanten fra v til v 3 Samme hvilken vi velger, vil den andre av dem bli neste kant, så vi legger dem begge inn i spenntreet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree (3) Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree () Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Minste kant ut fra spenntreet går nå fra v 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) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree (5) Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree (6) Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær Prim: growing a tree (7) Prims algoritme v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Minimale spenntrær 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 nabolister Kjøretidsanalysen er den samme som for Dijkstras algoritme Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 8 / 8

Hvorfor virker Prim? Minimale spenntrær 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) INF0.09.05 9 / 8

Kruskals algoritme: Minimale spenntrær 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 kanter Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Kruskals algoritme: Minimale spenntrær 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 kanter Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Kruskals algoritme: Minimale spenntrær 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 kanter Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Kruskals algoritme: Minimale spenntrær 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 kanter Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Growing a forest () Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest () Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Vi har to kanter med vekt De blir til to subtrær i spenn-treet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (3) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Vi har to kanter med vekt De blir til to subtrær i spenn-treet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest () Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Vi har to kanter med vekt De blir del av det øverste subtreet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (5) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Vi har to kanter med vekt De blir del av det øverste subtreet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (6) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 kant med vekt 3: Den vil lage en løkke og må forkastes Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (7) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 kanter med vekt hvor den mellom v og v 3 danner en løkke, mens den andre binder de to subtrærne sammen Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (8) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 kanter med vekt hvor den mellom v og v 3 danner en løkke, mens den andre binder de to subtrærne sammen Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (9) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 kant med vekt 5: løkke Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest (0) Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 kant med vekt 6: knytter den siste noden til treet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Growing a forest () Minimale spenntrær Kruskals algoritme Utgangspunkt for Kruskals algoritme: v v 0 3 v 3 v v 5 5 8 v 6 v 7 7 6 Nå har vi lagt inn V kanter i spenn-treet og kan slutte. Hvis vi fortsetter med resten av kantene, vil alle danne løkker og bli forkastet Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Tidsanalyse: Minimale spenntrær 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 ) + O(log V )+O() = O(log V ) (fordi log E < 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) INF0.09.05 / 8

Tidsanalyse: Minimale spenntrær 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 ) + O(log V )+O() = O(log V ) (fordi log E < 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) INF0.09.05 / 8

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) INF0.09.05 / 8

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) INF0.09.05 / 8

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) INF0.09.05 5 / 8

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) INF0.09.05 6 / 8

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) INF0.09.05 7 / 8

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) INF0.09.05 7 / 8

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 tree edges back edges Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 9 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (3) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (5) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (6) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (7) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (8) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (9) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (0) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (3) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS, urettet graf (5) B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 0 / 8

Urettet grafer DFS: adding visiting time () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time () B A F C D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (3) B A F C 3 D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time () B A F C 3 D G E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (5) B A F C 3 D G E 5 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (6) B A F 6 C 3 D G E 5 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (7) B A F 6 C 3 D G E 5 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (8) B A F 6 C 3 D G E 5 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer DFS: adding visiting time (9) B A F 6 C 3 D G 7 E 5 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Biconnectivity Urettet grafer Definition En sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. Egenskapen ved biconnectede grafer: Det er to disjunkte stier mellom hvilke to noder som helst. F.eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. B C G A D F E Viktig å identifisere disse nodene. Single point to failure! Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Biconnectivity Urettet grafer Definition En sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. Egenskapen ved biconnectede grafer: Det er to disjunkte stier mellom hvilke to noder som helst. F.eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. B C G A D F E Viktig å identifisere disse nodene. Single point to failure! Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Biconnectivity Urettet grafer Definition En sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. Egenskapen ved biconnectede grafer: Det er to disjunkte stier mellom hvilke to noder som helst. F.eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. B C G A D F E Viktig å identifisere disse nodene. Single point to failure! Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Urettet grafer Er grafen bi-connected?. DFS-spenntre Konstruer et dfs spenntre fra en node v av G B A Alle kantene (v, w) i G er representert i treet som enten en tree edge eller som en back edge C 3 D Nummerer nodene når vi besøker dem G 7 E 5 F 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 3 / 8

Urettet grafer Er grafen bi-connected?. Low-number for hver node i treet: beregn low-nummeret B A laveste noden som kan nås ved å ta 0 eller flere tree edge etterfulgt av 0 eller back edge Dette gjør vi like før vi trekker oss tilbake (idet vi er ferdig med kallet) note: på dette tidspunktet har funnet low for alle barna til noden G 7 7 C 3 E 5 D F 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 3 / 8

Urettet grafer Er grafen bi-connected? 3. Cut-vertex En node v er en cutvertex i G hvis: v er rotnoden av DFS G -treet og har to eller flere tree edges v ikke er rotnoden av DFS G og det finnes en tree edge (v, w) slik at low(w) num(v) G 7 7 C 3 B E 5 A D F 6 Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 3 / 8

Rot Urettet grafer B root A E C D F Roten av DFS-treet er en cutvertex hvis den har to eller flere utgående tree edges. tilbaketrekking må gå gjennom rooten for å komme fra den ene til den andre sub-treet. Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Rot Urettet grafer root A C E B D F Roten av DFS-treet er en cutvertex hvis den har to eller flere utgående tree edges. tilbaketrekking må gå gjennom rooten for å komme fra den ene til den andre sub-treet. Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8

Ikke-rot node Urettet grafer Et ikke-rot node v er en cutvertex hvis den har et barn w slik at ingen back edge som starter i subtreet av w når en predesessornode til v. C B D A F root E Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 5 / 8

Ikke-rot node Urettet grafer Et ikke-rot node v er en cutvertex hvis den har et barn w slik at ingen back edge som starter i subtreet av w når en predesessornode til v. w C v A root E B D F Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 5 / 8

Urettet grafer v o i d d f s ( v ) { v. num = c o u n t e r ++; // v. s t a t u s = v i s i t e d ; // I am v i s i t i n g now f o r each w a d j a c e n t to v i f w. s t a t u s v i s i t e d w. p a r e n t = v ; // remember p a r e n t d f s (w) // r e c u r } Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 6 / 8

Urettet grafer v o i d a s s i g n l o w ( Node v ) { v. low = v. num ; // at l e a s t num f o r each w a d j a c e n t to v { // n e i g h b o r s i n G! i f (w. num > v. num) // f o r w a r d edge { a s s i g n l o w (w ) ; i f (w. low v. num) system. out. p r i n t l n ( v + an a r t i c u l a t i o n p o i n t! ) ; v. low = min ( v. low, w. low ) ; } } } e l s e // w. num v. num i f ( v. p a r e n t w) // back edge v. low = min ( v. low, w. num ) ; test for root not shown the two traversals (dfs + assignlow) can be combined into pass. Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 7 / 8

Urettet grafer Neste forelesning:. oktober Kombinatorisk søk og rekursjon 8. oktober: Grafer III: Stongly connected components Gjesteforelesning: Torbjørn Morland Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 8 / 8