O, what a tangled Fjerde forelesning O, what a tangled web we weave / When first we practice to deceive! Sir Walter Scott, *Marmion* 1 Bruk av verktøy som rekursjon, induksjon, etc. er mer implisitt denne gangen. Se om hvor mange du kjenner igjen ;-)
I dag BFS Topologisk sortering Minimale spenntrær Kruskals algoritme Prims algoritme Litt om problemløsning 2
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.
reduksjon rekursjon dekomp. Egenskaper vi vil bevise: At vi besøker alle noder (gjelder bare hver sammenhengende komponent) At vi får til tofarging At BFS finner korteste vei - At gjenbruk unngår eksponentiell kjøretid induksjon travers. gjenbruk BFS og DFS
Kan vi bruke BFS på noe vis her? (Reduksjon )
4
1 1 1 1
«Vent 4» Dijkstras algoritme Nesten, i hvert fall
Besøk noder BFS: Korteste vei Uvektede grafer «Huskeliste» Oppdateres Svært anvendelige Ganske naive O(E+V) BFS og DFS
En litt annen måte å forklare traversering på Traversering 12
Forrige gang 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 13 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. 14 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 ).
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 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). 15
Topologisk sortering 16
DAG Directed Acyclic Graph Rettet asyklisk graf Dvs:Vi kan ikke gå i ring! Naturlig representasjon av avhengigheter 17
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 18 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
Vi har en delvis ordning Hvis a > b og b > c så a > c Det kan være at verken a > b eller b > a 19
20
21 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 < 22
23 men maske og susp kan vi ta på i vilkårlig rekkefølge. Hvordan velge?
24 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 25
Vanlig sortering kan (konseptuelt) ses på som et spesialtilfelle. DAG-en er da *komplett*. 1 7 6 2 5 3 4 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.
socks shorts hose t-shirt 7/ 14 osv pants chest pad 8/ 13 skates sweater 9/ 12 10/11 leg pads mask batting glove 1/ 6 catch glove 2/ 5 blocker 3/4 31
Alle piler går til høyre (tenk deg at alle var på samme linje ) socks shorts hose pants skates leg pads t-shirt chest pad sweater mask batting glove catch glove blocker 32
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 33
34
35
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 36
Eksempel: Et sett med hus og veier. Hver vei forbinder to (og bare to) hus. Hver vei har en reparasjonskostnad. Mål: Reparer nok veier (men ikke fler) til at 1. Alle hus kan nå hverandre (urettet graf), og 2. Totale kostnader minimeres Annet eksempel: Elektroniske kretser; bruk minst mulig metall. Annet eksempel: Elektrisk nettverk for et sett med byer. 37 Hvorfor må det bli et tre? Hvis vi har én sykel, hva kan/må vi gjøre?
Hvordan finne spenntrær http://www.wired.com/dangerroom/2010/09/revealed-pentagons-craziest-powerpoint-slide-ever/ 38
Spenntrær Har V 1 kanter Har ingen sykler Er ikke nødvendigvis unike 39
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. 40
«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 41
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? 42
A er en skog Hver trygg kant slår sammen to trær Vi trenger V 1 iterasjoner 43
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 hy! 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. 44
Finn MST Sorter kanter Bruk lovlige O(E lg V) Kruskals algoritme 45
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 46
Her er snittet «rundt» treet. 47
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 48
Så 49
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. 50
Litt om problemløsning (igjen) 51
Fra Wikipedia: «A graph with 23 1-vertex cliques (its vertices), 42 2- vertex cliques (its edges), 19 3-vertex cliques (the light blue triangles), and 2 4-vertex cliques (dark blue). Six of the edges and 11 of the triangles form maximal cliques. The two dark blue 4-cliques are both maximum and maximal, and the clique number of the graph is 4.» <http://en.wikipedia.org/wiki/clique_(graph_theory)> Bakgrunn Å avgjøre om en graf har en klikk av størrelse k (for en vilkårlig k) er vanskelig (NP-komplett). 52 Bakgrunnsstoff for neste eksempel
Basert på eksamensoppgaver (opprinnelig fra «Python Algorithms»). Du har n venner og vil invitere noen på fest. Alle som inviteres må kjenne minst k av de andre. Storparty Intimparty Inviter flest mulig. Inviter færrest mulig. La oss se på storpartyet først 53
quod est necessarium est licitum Må du så må du! Det som er nødvendig er lovlig. 54 Vi vil løse problemet trinnvis, som alltid (induksjon/rekursjon ). Hvis et trinn er *nødvendig* så må det være OK å bruke! (Hvis du ikke får det til, så er det selvfølgelig ingen løsning.)
Finn ett trinn Om du tenker induktivt eller rekursivt blir det samme (bare litt «speilvendt»). Det er uansett snakk om ett trinn som tar oss fra én partiell løsning til en større en eller som reduserer det fulle problemet til en mindre instans av det samme generelle problemet. Vi kan fortsette sånn til det ikke går lenger. Da kjenner naturligvis alle k av de andre (det var det som gjorde at vi stoppet). (Dette kan være den tomme mengden, da ) Hvorfor er det rett? Tenk på den første: han/hun fyller ikke kriteriene og vil uansett ikke kunne være med i noen som helst løsning. Å ekskludere ham/henne ødelegger ikke for løsningen. Vi sitter da igjen med et ekvivalent problem, og det samme resonnementet gjelder igjen og igjen. Quod et necessarium est licitum! 55 La én som ikke kjenner k andre slippe invitasjon
Vanskelig Enten Da kunne du jo Motsatt Ukjent Eller Det er jo bare å Enkelt 56
Vanskelig Ukjent 57
Hvorfor vil det å finne den minste mengden der alle kjenner minst k andre kunne brukes til å løse CLIQUE? CLIQUE Fordi hvis og bare hvis denne gruppen har akkurat k+1 personer så inneholder grafen en klikk av størrelse k+1. INTIMPARTY Bonusspørsmål: Hvorfor er MAX-CLIQUE (finn den største klikken i grafen) minst like vanskelig som CLIQUE? (Reduser fra CLIQUE ) 58