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

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

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

Litt om grafer og traversering, og om hashing. Jeg gikk en tur i. Tredje forelesning

Evt. forklar på tavla. Diskuter kjøretid (best-/ worst-case). Innsetting og søk. Rekursjon igjen. A C E G

Litt om grafer og traversering, og om hashing. Jeg gikk en tur i. Tredje forelesning

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

INF Algoritmer og datastrukturer

Algdat - øvingsforelesning

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

Algdat Redux. Fjortende forelesning. Repetisjon av utvalgte emner.

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

IN Algoritmer og datastrukturer

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

Grunnleggende Grafalgoritmer II

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

INF1020 Algoritmer og datastrukturer GRAFER

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

Fra A til B. Syvende forelesning

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

Minimum Spenntrær - Kruskal & Prim

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

Dijkstras algoritme Spørsmål

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Algdat Eksamensforelesning. Nils Barlaug

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

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

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

Pensum: fra boken (H-03)+ forelesninger

Korteste vei i en vektet graf uten negative kanter

Pensum: fra boken (H-03)+ forelesninger

All good things. Fjortende forelesning

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Grunnleggende Grafalgoritmer

Løsningsforslag - Korteste vei

PG4200 Algoritmer og datastrukturer Forelesning 10

Lineær sortering. Radix sort

IN Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

All good things. Fjortende forelesning

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

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

Vi skal se på grafalgoritmer for:

Søk i tilstandsrom. Backtracking (Kap. 10) Branch-and-bound (Kap. 10) Iterativ fordypning. Dijkstras korteste sti-algoritme A*-søk (Kap.

Eksamen i tdt4120 Algoritmer og datastrukturer

MAT1030 Forelesning 25

INF Algoritmer og datastrukturer

MAT1030 Diskret Matematikk

INF1020 Algoritmer og datastrukturer GRAFER

Live life and be merry

Innhold. Innledning 1

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

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

Løsningsforslag for utvalgte oppgaver fra kapittel 9

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

ALGORITMER OG DATASTRUKTURER

IN2010: Algoritmer og Datastrukturer Series 2

Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet

Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

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

O(V 2 ) bwfs(v, i=1) λ[v] = i for each neighbor u of v if 0 < λ[u] < i. bwfs(u, i+1) if λ[u] = 0

Øvingsforelesning Korteste vei: Alle til alle

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Algdat - Øvingsforelesning. Maks flyt

MAT1030 Forelesning 22

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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.

INF Algoritmer og datastrukturer

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

Go with the. Niende forelesning. Mye matematikk i boka her ikke så komplisert, men mye å holde styr på.

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

Oppgave 1. Sekvenser (20%)

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

for bare trær Andre forelesning

INF Algoritmer og datastrukturer

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

LO118D Forelesning 12 (DM)

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

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

Transkript:

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

def walk(g, s): # Walk the graph from node s P, Q = dict(), set() # Predecessors + "to do" queue P[s] = None # s has no predecessor Q.add(s) # We plan on starting with s while Q: # Still nodes to visit u = Q.pop() # Pick one, arbitrarily for v in G[u].difference(P): # New nodes? Q.add(v) # We plan to visit them! P[v] = u # Remember where we came from return P # The traversal tree Fra «Python Algorithms». All koden fra boka kan lastes ned gratis (og lovlig ;-) på nett.

def components(g): comp = [] seen = set() for u in G: if u in seen: continue C = walk(g, u) seen.update(c) comp.append(c) return comp # The connected components # Nodes we've already seen # Try every starting point # Seen? Ignore it # Traverse component # Add keys of C to seen # Collect the components Fra «Python Algorithms»

Adventurers always go right Ikke alle grafer ser ut som grafer Men hvordan navigerer vi i grafer? Eksempel: (1) Besøk aldri et sted mer enn én gang; (2) gå alltid til (f.eks.) høyre; (3) snu 180 i blindveier. D.F.S.

Evt. google flood-fill for et viktig eksempel. def dfs(g, s, S=None): if S is None: S = set() S.add(s) for u in G[s]: if u in S: continue dfs(g, u, S) # Initialize the history # We've visited s # Explore neighbors # Already visited: Skip # New: Explore recursively Fra «Python Algorithms»

D.F.S. Foreldre skrives opp før barn Discover-time

D.F.S. Foreldre strykes ut etter barn Backtracking/finish-time

Ikke veldig sentralt pensum beskrives ikke i Kleinberg. Tree edges Traveseringstreet Forward edges Back edges Cross edges Fremover i treet Bakover i treet Andre kanter Kan avgjøres ved hjelp av discover-time og finish-time.

Litt spesielt: I praksis besøker vi hver nabo vi finner direkte (vha. rekursjon), før de andre legges inn i køen. DFS? WTF? Hvilken informasjon ligger egentlig i finish-time? Alle noder er hvite fra starten «Halvferdige» er grå Ferdige er svarte d[v]: discover-time f[v]: finish-time Litt «Cormen-orientert». Besøk alle hvite vi støter på rekursivt En grå node har ikke fått besøkt alle sine naboer ennå (dvs. vi har ikke backtracket over den). Eksempel s. 605 i Cormen (3. utg). 10

Leting i spiralmønster B.F.S. En annen fremgangsmåte: Jobb deg ut fra startpunktet nivå for nivå i spiral. Nye områder du kommer i kontakt med må vente ( stå i kø ) til du er ferdig med nåværende runde (dvs. det som alt står i kø ).

def bfs(g, s): P, Q = {s: None}, deque([s]) # Parents and FIFO queue while Q: u = Q.popleft() # Constant-time for deque for v in G[u]: if v in P: continue # Already has parent P[v] = u # Reached from u: u is parent Q.append(v) return P Fra «Python Algorithms»

Kjekt å vite Korrekthet (rekursjon, induksjon) for korteste vei og to-farging. BFS kan finne én-til-alle korteste vei DFS har andre nyttige egenskaper All traversering kan brukes til to-farging Vi snakker her om *uvektet* korteste vei. Mer om DFS-anvendelser neste gang. En tofargbar graf kalles også *bipartitt*. Nodene kan deles i to mengder uten interne kanter (f.eks. konflikter). Trefarging (etc.) er atskillig vanskeligere ingen kjente metoder.

Besøk noder BFS: Korteste vei Uvektede grafer «Huskeliste» Oppdateres Svært anvendelige Ganske naive O(E+V) BFS og DFS

Oppsummert Q = [startnode] while Q: plukk ut en node u fra Q legg naboene til u inn i Q Vi gjør gjerne noe mer etter hvert som vi legger inn og plukker ut noder, da. F.eks. når vi legger inn: Husk hvor du kom fra (noden u). Det gir oss et traverseringstre. Det kan også hende vi gjør oppdateringer av avstandsestimater e.l. Mer om det siden. Husk også hvor du har vært 15 Husk: For å besøke flere komponenter må vi starte fra hver (ubesøkt) node i grafen. Hvilken node vi plukker ut påvirker atferden. Er Q en FIFO-kø får vi BFS En LIFO-kø gir DFS En helt vilkårlig (eller tilfeldig) kø vil også gi oss en gyldig traversering. (Prim og Dijkstra bruker prioritetskøer med dynamisk oppdatert prioritet men det er fortsatt en traversering som dette.)

Annet perspektiv Vi bygger et tre I hver runde Rundt treet er et snitt Utvid treet med en kant fra snittet Kan være et nyttig perspektiv når vi skal se på hvorfor f.eks. Prims og Dijkstras algoritmer er korrekte. Prim: Vi velger minste kant over snittet (vi har et eget teorem om hva som skjer da). Dijkstra: Vi observerer at det ikke finnes noen snarveier gjennom snittet. Mer om det siden. Snitt: Egentlig fordeling av nodene i to mengder. Her representert ved kantene mellom de to mengdene. 16 Når vi ikke kommer videre har vi (1) enten traversert hele grafen eller (2) truffet et *blokkerende* snitt (tomt for kanter, hvis grafen er usammenhengende, eller med kun rettede baklengskanter ).

O, what a tangled Fjerde forelesning Robot-eksemplet som ikke ble gjennomgått sist blir frivillig selvstudium (ut fra foilene :-) O, what a tangled web we weave / When first we practice to deceive! Sir Walter Scott, *Marmion* 17 Bruk av verktøy som rekursjon, induksjon, etc. er mer implisitt denne gangen. Se om hvor mange du kjenner igjen ;-)

Topologisk sortering 18

DAG Directed Acyclic Graph Rettet asyklisk graf Dvs:Vi kan ikke gå i ring! Naturlig representasjon av avhengigheter 19

Dance Grade 10, Open Dramatic Arts Grade 9, Open Dramatic Arts Grade 10, Open Music Grade 9, Open Music Grade 10, Open Dramatic Arts Grade 11, University/College Dramatic Arts Grade 11, Open Music Grade 11, University/College Music Grade 11, Open Grade 12, U Dramatic Arts Grade 12, Open Music Grade 12, University/College Exploring the Arts Grade 12, Open Any Grade 9 or 10 arts course Media Arts Grade 10, Open Any Grade 11 arts course Media Arts Grade 11, Open 20 Visual Arts Grade 11, University/College For å ta et fag må du ta alle de forutsatte fagene, og deres forutsatte fag etc. For å finne ut hva som trengs for et bestemt fag kan du kjøre en baklengs traversering fra noden. Media Arts Grade 12, Open Visual Arts Grade 12, University/Col

21

22 Et eksempel fra sportsverden (ikke min sterke side): Hvordan kle på seg før man står i mål i hockey

Vi må nesten ta på strømper før skøyter < 23

24 men maske og susp kan vi ta på i vilkårlig rekkefølge. Hvordan velge?

25 Kanskje her?

socks hose pants shorts t-shirt chest pad Vår oppgave: Finn en *total* ordning som respekterer den *partielle* ordningen. Det flere muligheter. skates sweater leg pads mask batting glove catch glove blocker 26

Hvorfor må dette bli riktig? Tenk selection sort Hvordan kan man sikre en kjøretid på Θ(V + E)? 1. «Klipp av» noder uten innkanter 2. Legg løse noder bakerst i lista 3. Hvis grafen ikke er tom, start på nytt Litt «Kleinberg-orientert». 27

Cormen-varianten (basert på DFS). Lemma 22.11: G er asyklisk hvis og bare hvis DFS ikke finner bakover-kanter. (Hvorfor?) Vi har altså ingen bakover-kanter 28

Kjernen i beviset Ingen bakoverkanter Møter kun hvite/svarte Hvit: Etterkommer lavere Svart Ferdig lavere f[u] > f[v] u v Hvis vi sorterer omvendt etter f[v] vil alle kanter dermed gå samme vei. 29

Altså: Sortér i synkende finished -tid. Topological-Sort(G): Hvorfor må det bli riktig? Kall DFS(G) for å beregne f[v] Etter hvert som nodene er ferdige: Legg dem i starten av en liste Dette går an å forstå helt intuitivt, uten å tenke på discover- og finish-tid. En veldig enkel måte å sortere topologisk på og akkurat som man ville ha gjort det i virkeligheten Returner den lenkede listen 30 Du vil gjøre A? Da må du først gjøre B. Du vil gjøre B? Gjør først C. (Etc.) Slike avhengigheter avdekkes med DFS, og legges foran i køen. (Tenk f.eks. pakkesystemer som installerer programvarepakker; de trenger bare følge avhengighetene i noe som i praksis er DFS.

Kant-ensretting Ingen sykler Sorter etter f Underveis Evt. «plukk noder uten innkanter og legg dem sist». (DFS-varianten finner egentlig noder uten utkanter og legger dem først; blir jo det samme.) O(E + V) Topologisk sortering 31

Eksempel på grådighet: Velg det som er optimalt sett helt med lokale øyne. Det viktigste er da å vise at det blir korrekt (med induksjon og/eller bevis ved selvmotsigelse). Minimale spenntrær 32

Spenntrær Har V 1 kanter Har ingen sykler Er ikke nødvendigvis unike 33

Vi bygger oss et sett med kanter. Begynner med en tom mengde, og legger til én og én kant. Invariant: Foreløpig løsning er et subsett av et MST. Trenger ikke være sammenhengende. Når vi har V-1 kanter *må* det jo være riktig. 34

«Trygg» betyr bare at vi ikke bryter invarianten. Så A er et ekte subsett av et MST helt til det faktisk *er* et MST. 1. A er en tom mengde Hvordan finner vi trygge kanter? 2. Så lenge A ikke er et spenntre: a) Finn en kant som er trygg for A b) Legg kanten til i A Induksjon 35

Viktig! Anta at A ikke har noen kanter over «snittet» på figuren. Den letteste kanten er da trygg. (Vi kan ha flere.) Vises lett ved selvmotsigelse. Hvorfor kan det bli galt hvis A allerede krysser snittet? 36

A er en skog Hver trygg kant slår sammen to trær Vi trenger V 1 iterasjoner 37

Trivia: Union-find-strukturen er *supereffektiv*. Den er et eksempel på en av de få kjøretidene i pensum som er raskere enn logaritmisk, men likevel (i teorien) langsommere enn konstant. ( I teorien, fordi det vil være omtrent fysisk umulig for den å komme over 4 ) Se etter Inverse Ackermann i boka eller på nett :-) «I hytt og vær» Se på dekomponering/ reduksjon/rekursjon/ induksjon som perspektiver her Går igjennom kantene i sortert rekkefølge (etter vekt), og hopper over ulovlige kanter (de som gir sykler). Liten ekstra vanskelighet: Hvordan avgjør vi om en kant skaper en sykel? Vi må ha en lur datastruktur som tar vare på trærne i skogen så langt. Kruskals algoritme Union-find: Beskrevet mer i detalj i læreboka. Hovedprinsipp: Alle trær har en peker til sitt «super-tre»/union. 38

Finn MST Sorter kanter Bruk lovlige O(E lg V) Kruskals algoritme 39

Minner om DFS/BFS, men har en annen type «kø»/ valgmekanisme: «Jevnt og fint» Ta alltid noden som det er billigst å koble til treet du har så langt. Her har vi altså hele tiden bare ett tre i A. Traversering Prims algoritme 40

Her er snittet «rundt» treet. 41

Finn MST Traversering Neste: Kortest Raskest i praksis O(V lg V + E) Akkurat det er ikke pensum, men jeg har sett studier som tyder på det :-) (Med vanlig binær heap.) Prims algoritme 42

Så 43

Topsort: DFS; legg ferdige noder først i liste Kruskal: Kanter sortert; unngå sykler O(E lg V) Prim: Koble til billigste node O(V lg V + E) Ikke helt klart hvilken som er «best» av Prim og Kruskal. Empirisk (i virkelige implementasjoner) vinner Prims algoritme også over mer avanserte algoritmer. 44