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

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

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

Øvingsforelesning 12 Maks flyt

Øvingsforelesning 9. Flytnettverk, maksimum flyt og maksimum bipartitt matching. Jon Marius Venstad

Algdat - Øvingsforelesning. Maks flyt

Avanserte flytalgoritmer

Maks Flyt og NPkompletthet

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

Algdat Redux. Fjortende forelesning. Repetisjon av utvalgte emner.

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Rundt og rundt og. Trettende forelesning

ALGORITMER OG DATASTRUKTURER

A new study has found that cockroaches are morons in the morning and geniuses in the evening in terms of their learning capacity.

Vann i rør Ford Fulkerson method

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for utvalgte oppgaver fra kapittel 9

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

TMA4140 Diskret Matematikk Høst 2016

All good things. Fjortende forelesning

Online datingtjeneste The Hungarian Algorithm

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4125 Algoritmekonstruksjon, videregående kurs (løsningsforslag)

Fra A til B. Syvende forelesning

ALGORITMER OG DATASTRUKTURER

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet

MAT1030 Diskret matematikk

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori

45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 1992

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Algdat Eksamensforelesning. Nils Barlaug

Notat for oblig 2, INF3/4130 h07

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

MAT1030 Forelesning 24

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

Eksamen i tdt4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

Svarforslag til ukeoppgaver til INF 4130

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

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

UNIVERSITETET I OSLO

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

MAT1140: Kort sammendrag av grafteorien

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Grunnleggende Grafteori

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

Kompleksitetsteori reduksjoner

Kompleksitet og Beregnbarhet

Lineær sortering. Radix sort

Matchinger i ikke-bipartite grafer

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

Dijkstras algoritme Spørsmål

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

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

NP-kompletthet. «Hvordan gjøre noe lett for å vise at noe annet er vanskelig»

MAT1030 Diskret Matematikk

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

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

MAT1030 Forelesning 23

MAT1030 Diskret Matematikk

IN Algoritmer og datastrukturer

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

MAT1030 Diskret Matematikk

MAT1030 Forelesning 22

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

MAT1140: Kort sammendrag av grafteorien

DEL 2 REGELBOK 2P + 2P-Y

MAT1030 Diskret Matematikk

MAT1030 Forelesning 22

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

MAT1030 Diskret matematikk

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

Vektede grafer. MAT1030 Diskret matematikk. En kommunegraf. En kommunegraf. Oppgave

Side om side. Trettende forelesning

ALGORITMER OG DATASTRUKTURER

INF4170 Logikk. Forelesning 12: Automatisk bevissøk IV matriser og koblingskalkyle. Bjarne Holen. Institutt for informatikk, Universitetet i Oslo

Øvingsforelesning Korteste vei: Alle til alle

INF 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.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

MAT1030 Forelesning 25

Sekventkalkyle for utsagnslogikk

LO118D Forelesning 12 (DM)

IN Algoritmer og datastrukturer

Diagnosekart for oblig 2, INF3/4130 h07

INF oktober Stein Krogdahl. Altså: Hva kan ikke gjøres raskt (med mindre P = NP)

Grafteori. MAT1030 Diskret Matematikk. Oppsummering. Oppsummering. Forelesning 24: Grafer og trær. Dag Normann

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

UNIVERSITETET I OSLO

Lineære ligningssystemer og gausseliminasjon

Forelesning 13: Automatisk bevissøk IV matriser og koblingskalkyle Bjarne Holen - 7. mai 2007

Dagens plan. INF3170 Logikk. Redundans i LK-utledninger. Bevissøk med koblinger. Forelesning 13: Automatisk bevissøk IV matriser og koblingskalkyle

PG4200 Algoritmer og datastrukturer Forelesning 10

Transkript:

Go with the Niende forelesning Mye matematikk i boka her ikke så komplisert, men mye å holde styr på. Fokuserer på de viktigste ideene i dagens forelesning, så det forhåpentligvis blir lettere å skjønne bokas forklaring. 1

n doktorer m/tilgjengelighet Hver trår til maks c dager Maks én dag per ferie Finn én doktor per feriedag Mer problematisk: Kan vi finne en elegant, *generell* algoritmemetode som dekker dette problemet? 2

Nevnt i første forelesning. I dag får vi på plass det siste som trengs! Eksempelanvendelse oppgave på kontinuasjonseksamen, 2013.

En forbrytelse har blitt begått for en viss tid siden. Forbryterne har en maks-hastighet som kan variere med de ulike veiene. Vi skal finne ut hvordan vi kan fordele færrest mulig veisperringer for å hindre dem i å forlate kartet. Et sammensatt problem men dere skal lære dere å løse det. Veisperringsproblemet

Eksempel på den første delen: Hvor langt kan man ha kommet fra Trondheim sentrum på 10 min? Hentet fra Isoscope: http://isoscope.martinvonlupin.de

For spesielt interesserte: En auksjonsbasert algoritme for matching: http://agtb.wordpress.com/2009/07/13/ auction-algorithm-for-bipartitematching/ (Evt. http://hurl.no/cco) Intro til flyt: Et nyttig spesialtilfelle bipartitt matching. Funker også for vektet matching (viktig problem ) Dette er både en anvendelse og en enklere variant Matching 6

7 En bipartitt graf. Vi vil koble alle t.v. med én t.h. en sk. «perfekt bipartitt matching». Vi må da naturligvis ha like mange t.v. som t.h.

8 Vi bygger løsningen gradvis. Er det en ledig kant mellom to ledige noder: Kjør på.

9 Nodene er nå «opptatt» og kan ikke uten videre brukes i nye koblinger.

For å få med den neste noden t.v. må vi *oppheve* den første koblingen, og lage en *ny* for den første noden t.v. Stien vår en «augmenting path» må starte og slutte i en ledig node. (Ser du hvorfor?) Merk: Vi har her en sti som går frem og tilbake. Frem langs ledige kanter, tilbake langs kanter som kan oppheves. 10

Etter å ha oppdatert kantene langs den forøkende stien har løsningen (matchingen) økt med 1 kant. Vi fortsetter å lete etter slike stier til det ikke går lenger. Vi kan f.eks. bruke BFS eller DFS til å finne slike stier. Merk at vi må være nøye med hvilke kanter vi tillater i søket. 11

12 Nok en forøkende sti som består av bare én ledig kant

De to nodene er nå opptatt. For å få med den siste noden t.v. må vi igjen gå i sikk-sakk 13

Vi opphever her den forrige koblingen, og finner en ny kobling til den nest siste noden t.v. Vi starter (til venstre) og avslutter (til høyre) igjen stien vår i ledige noder (som alltid). M.a.o.: En node t.v. kan «få» en opptatt node t.h. (og dermed oppheve en kobling ved å gå «baklengs») så lenge noden t.v. som «hadde» noden får tildelt en annen en og så får vi en domino-effekt (sikk-sakk) langs en forøkende sti. 14

15 De siste to nodene er opptatt, og løsningen er klar. Hvis det ikke hadde vært mulig å finne en løsning, ville vi ikke ha funnet en forøkende sti.

Flyt 16

Et veldig enkelt eksempel på flyt. Hvor mange «uavhengige» stier har vi fra venstre til høyre? Eller: Hvor mange «enheter» kan vi pumpe igjennom, hvis hver kant takler én enhet? 17

18 Som for matching, prøver vi oss. Vi må begynne til venstre (i kildenoden) og ende til høyre (i sluknoden). Her har vi en «augmenting path» med bare ledige kanter.

19 Her fant vi jammen enda en forøkende sti med bare ledige kanter og nå er det fullt.

Matcheproblemet kan også løses så direkte hvis vi har flalks. Men Hva om vi har litt mindre flaks? Da må vi gå i en slags «sikk-sakk» her også. 20

Først en forøkende sti med bare ledige kanter. Men hva gjør vi nå? 21

Vi kan gå *baklengs* over opptatte kanter og oppheve dem akkurat som i matcheproblemet. En slik «bakover-oppheving» tilsvarer en slags krysskobling: Vi lager en ny start og en ny slutt, og spleiser dem sammen med en eksisterende sti (intuitivt). Logikken er egentlig akkurat som for matching. Vi kan fjerne (oppheve/gå baklengs gjennom) en innkommende «full» kant, men da må flyten til den kanten sendes et annet sted nemlig i fremover i en annen kant. Matematisk er det ekvivalent å *øke* flyten *fremover* eller å *redusere* flyten *bakover*. I en flytforøkende sti må hver kant gjøre én av delene. Merk at vi kan gå flere bakoverskritt eller fremoverskritt i rekkefølge (dvs. ikke strengt annenhver, som i «sikk-sakk». 22

23 Svaret blir det samme. Antallet enheter vi får igjennom tilsvarer antall opptatte kanter ut fra kilden (eller inn til sluket).

4 10 4 10 10 24 Dette er sånn det gjøres i den nye læreboka. I den gamle jobber de direkte med antiparallelle kanter. Ikke så stor forskjell, egentlig.

Flere kilder og sluk kan lett konverteres til én kilde og ett sluk, ved å legge på kanter fra kilden og til sluket med uendelig stor kapasitet. Flytproblemet Vi ser foreløpig bare på positiv flyt. Boka bruker også negativ flyt (i motsatt retning) vi kommer til det. Rettet graf med kilde s og sluk t og en flyt 0 f(i, j) c(i, j) Flyten inn i en node (unntatt s og t) = flyten ut Hver kant (i, j) har en kapasitet, c(i, j) Hvor stor total flyt kan vi få igjennom? 25 Hvis flyten involverer folk, kan ting bli litt merkelig: http://en.wikipedia.org/wiki/braess_paradox http://features.csmonitor.com/environment/2008/10/06/ does-closing-roads-cut-delays/ http://scienceoftheweb.org/15-396/lectures/lecture10.pdf

Snitt 26

Snitt: Todeling av grafen. s i den ene delen, t i den andre. Kapasiteten til snittet = summen til kapasiteten til kantene som går «til høyre» over det. Et «minimalt snitt» er et snitt med minimal kapasitet. Det vil etter hvert bli fullt og «stenge for» flyten. All flyt må gjennom ethvert snitt. Man kan ikke få mer flyt gjennom et snitt enn kapasiteten til snittet. Ergo: Maksimal flyt er lik kapasiteten til et minimalt snitt. Man kan bruke maks-flytalgoritmer til å finne minimale snitt. Dette kalles «max-flow mincut»-teoremet. 27

Eksempelanvendelser 28

Eksempler Bipartitt matching kan løses ganske direkte. Legg til s her Legg til t her 29

Eksempler Fluktproblemet og disjunkte stier generelt. Vi prøver å finne disjunkte fluktruter fra de markerte nodene til periferien. 30

Eksempler Bildesegmentering. Minimalt snitt gir oss segmentering med lavest mulig kostnad. 31

Først, den abstrakte beskrivelsen av Ford-Fulkerson (og Edmonds-Karp) Level 1 32

Finnes det en sti med ledig kapasitet fra s til t? Hver kant: Enten og f < c eller og f > 0 Øk flyt langs denne stien Bruk f.eks. BFS til å finne stien (E K) Ford-Fulkerson: 33 Generell metode. Ikke nødvendigvis polynomisk. Velger vi BFS får vi Edmonds-Karp, som har kjøretid på O(VE^2). (Det går an å gjøre det bedre.)

Det er to mulige tolkninger av dette: Vi «opphever» 5 av de 7 som går mot venstre ved å sende 5 til mot høyre. De 7 mot venstre tilsvarer 7 mot høyre, som kan økes opp mot 0. 4/9 7/8 Vi kan øke med 5 fra venstre til høyre Hva foregår «egentlig»? Ved å øke flyten inn i midt-noden fra venstre og å redusere flyten inn i noden fra høyre med samme mengde har noden samme flyt-sum, så vi ødelegger ingenting. 34

Eksempel Bruker ikke BFS her w 0/2 x 0/3 0/3 s 0/2 0/1 0/3 0/1 0/2 0/3 0/2 t y 0/3 z 35

Eksempel w 0/2 x 0/3 0/3 s 0/2 0/1 0/3 0/1 0/2 0/3 0/2 t y 0/3 z Alle kanter i stien går fremover, og minimums-kapasiteten er 2. 36

Eksempel Her er flyten økt med den maksimale ledige kapasiteten. w 2/2 x 0/3 0/3 s 2/2 0/1 2/3 0/1 2/2 0/3 2/2 t y 0/3 z 37

Eksempel Ny sti denne gangen med noen baklengskanter. I disse ser vi ikke etter ledig kapasitet, men flyt som kan kanselleres. w 2/2 x 0/3 0/3 s 2/2 0/1 2/3 0/1 2/2 0/3 2/2 t y 0/3 z Blant forover-kantene er minste ledige kapasitet 3. Blant bakover-kantene er minste flyt 2. Minimum blir altså 2. 38

Eksempel w 2/2 x 2/3 2/3 s 2/2 0/1 0/3 0/1 0/2 0/3 2/2 t y 2/3 z Igjen er flyten langs stien økt med det maksimale mulige (2). Flyt i fremoverkanter økes flyt i bakover-kanter reduseres. Totalt økes flyten fra s til t uten at vi bryter noen regler. 39

Eksempel w 2/2 x 2/3 2/3 s 2/2 0/1 0/3 0/1 0/2 0/3 2/2 t y 2/3 z Ikke mulig å finne noen flere flytforøkende stier, så vi er ferdige. 40

Eksempel w 2/2 x 2/3 2/3 s 2/2 0/1 0/3 0/1 0/2 0/3 2/2 t y 2/3 z Her er et minimalt snitt, med kapasitet lik maksflyten (4). Det er ikke mulig å presse mer flyt igjennom dette snittet. 41

Bokas implementasjon (veldig utbredt): Residualnettverk. Level 2a 42

I stedet for å tenke forover og bakover hver for seg så setter vi bare negativt fortegn på bakoverflyt. I boka opererer de med et eksplisitt «residualnett verk». Hvis det går flyt f går det flyt f Vi har bare kanter der vi kan få mer flyt Enten ved å øke f til c for eller ved å øke f til 0 for 43

En annen konkret implementasjon (den originale, mer eller mindre): «Merkelappmetoden» Level 2b 44

Under én iterasjon (BFS) I hver node vil vi huske hvor mye flyt vi har klart å transportere så langt og hvor den kom fra (og evt. om det var en «oppheving» av flyt som gikk ut). Y Flyt inn eller ut? +/X/8 Hvor mye? Hvor fra? 45

Kjør BFS Langs kanter der f < c Mot kanter der f > 0 Forgjengertabell bruker vi jo allerede i BFS (π). I tillegg trenger vi altså bare lagre hvor mye flyt vi får ført til noden (inkludert fortegn/retning). For hver node, lagre Hvor kom vi fra? Går flyten inn eller ut? Hvor mye flyt kan vi få hit? Hvis vi kom til slutten Oppdater flyten og begynn på nytt 46

Maks flyt I graf m kapasiteter Forøkende stier Bruk BFS Heltallsvekter: Gir oss heltallsflyt. (Selv om heltallsprogrammering generelt er NP-komplett.) Hvis vi kan bruke vilkårlig søk (og ikke BFS) så kan vi få eksponentiell kjøretid. Den generelle metoden (uten at vi bestemmer traverserings-metoden) heter Ford-Fulkerson. Edmonds Karp 47 O(VE 2 ) Hver sti: O(E). Fyller minst én av E kanter. Hver kant kan fylles flere ganger (ulike retninger), men avstanden til starten langs stien må øke. Kan maks øke V ganger.

48

Og så var det legeproblemet vårt, da. Sett på passende kapasiteter. Fridager Vi får likevel ikke begrenset oss til én dag per lege per ferieperiode Leger Kilde Sluk 49

Fridager Gadgets Leger Kilde Sluk Vi lager os ekstra-noder for å begrense flyten fra hver lege til hver ferie-periode! 50 Denne typen konstruksjoner er med på å gjøre maks-flyt til et svært allsidig verktøy.

Veisperringsproblemet