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

Avanserte flytalgoritmer

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

Vann i rør Ford Fulkerson method

Maks Flyt og NPkompletthet

Algdat - Øvingsforelesning. Maks flyt

MAT1140: Kort sammendrag av grafteorien

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

Diagnosekart for oblig 2, INF3/4130 h07

Løsningsforslag - Korteste vei

Løsningsforslag for utvalgte oppgaver fra kapittel 9

: subs x = 2, f n x end do

Korteste vei problemet (seksjon 15.3)

Korteste vei i en vektet graf uten negative kanter

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

ADDISJON FRA A TIL Å

Løsningsforslag Øving 5 TMA4140 Diskret matematikk Høsten 2010

Tallinjen FRA A TIL Å

LØSNINGSFORSLAG SIF5015 DISKRET MATEMATIKK Onsdag 18. desember 2002

Algdat Redux. Fjortende forelesning. Repetisjon av utvalgte emner.

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Kanter, kanter, mange mangekanter

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

Billige arboresenser og matchinger

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Legg merke til at summen av sannsynlighetene for den gunstige hendelsen og sannsynligheten for en ikke gunstig hendelse, er lik 1.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Et eksempel: Åtterspillet

Enarmet banditt Nybegynner Scratch Lærerveiledning

PEDAGOGISK TILBAKEBLIKK. Sverdet - August 2014

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

Heuristiske søkemetoder III

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

Posisjonsystemet FRA A TIL Å

Bruk av oppgaver og grupper i

Spøkelsesjakten. Introduksjon

Rundt og rundt og. Trettende forelesning

Avdeling for lærerutdanning - En regnende organisasjon!

MAT1030 Forelesning 30

Kapittel 3: Litt om representasjon av tall

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

TMA4140 Diskret Matematikk Høst 2016

Funksjoner og andregradsuttrykk

En eksplosjon av følelser Del 2 Av Ole Johannes Ferkingstad

sunn sterk frisk 24 timers livsstil

MAT 100a - LAB 3. Vi skal først illustrerere hvordan Newtons metode kan brukes til å approksimere n-te roten av et positivt tall.

Straffespark Introduksjon Scratch Lærerveiledning

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Svarforslag til ukeoppgaver til INF 4130

MAT1030 Diskret matematikk

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

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

Hva er trening? Melges mai 2007

Korteste Vei I. Lars Vidar Magnusson Kapittel 24 Hvordan finne korteste vei Egenskaper ved korteste vei

Anvendelser av grafer

Øvingsforelesning TDT4105

Forslag til opplegg for en foreldrekveld om matematikk (varighet: 2 timer) v/ Ingvill M. Stedøy-Johansen, 2007

Kompleksitetsteori reduksjoner

INF109 - Uke 1b

Tall og algebra Matematikk Side 1 av 6

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

PG4200 Algoritmer og datastrukturer forelesning 10. Lars Sydnes 21. november 2014

Løsningsforslag - Floyd-Warshall

e) Styret i en ungdomsklubb består av to jenter og fire gutter. To fra styret er invitert til et møte i kommunen for å legge fram klubbens ønsker.

Hva er en algoritme? Har allerede sett på mange algoritmer til nå i IT1101. Forholdet mellom en algoritme og et program. Algoritme program prosess

INFO122 Innføring i databaser. Oblig 2. av Frode H. Pedersen, Kjartan B. Michalsen og Kristin Breivik

Online datingtjeneste The Hungarian Algorithm

Kort norsk manual Hvordan komme i gang:

PCK Håndterminal. Brukerveiledning

Hvordan behandle Lipo

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

Avsluttende eksamen i TDT4125 Algoritmekonstruksjon, videregående kurs

Spørreundersøkelse om informasjon fra Arkitektbedriftene

7.4 Eksempler på misoppfatninger/mistolkinger

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

Hva du skal kunne: «Prisoverveltning», «Skatteoverveltning» («tax incidence»)

Steg for steg. Sånn tar du backup av Macen din

Brukermanual for statistikk på Asset on web: Statistikk salg pr dag, uke eller måned fordelt på alle avdelinger:

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Undring provoserer ikke til vold

ter». Men det er et problem med denne påstanden, for hvis den er absolutt sann, så må den være absolutt usann.

Kompleksitetsanalyse Helge Hafting Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LO117D Algoritmiske metoder

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Skilpadder hele veien ned

Fra A til B. Syvende forelesning

Forelesning nr.4 INF 1410

Brukerveiledning til MAKS 2010

Oppgave 1 (vekt 20 %) Oppgave 2 (vekt 50 %)

Kristen homofil Av Ole Johannes Ferkingstad

MAT1030 Forelesning 24

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Niels Henrik Abels matematikkonkurranse Løsninger

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

Tallregning og algebra

Når man skal velge en tørrkjøler er det mange faktorer som spiller inn.

Løsningsforslag, Ukeoppgaver 10 INF2310, våren 2011 kompresjon og koding del II

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Institutt for lærerutdanning og skoleutvikling Universitetet i Oslo. 4. klasse

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

Mange effektive algoritmer er ganske spesialiserte 2

Av og til trenger vi kraftigere skyts 3

n doktorer m/tilgjengelighet Hver trår til c dager Maks 1 dag/ferie Finn en doktor per feriedag Mer problematisk: Kan vi finne en elegant, *generell* algoritmemetode som dekker dette problemet? Kombinatorisk optimalisering kan bli hårete 4

Vi ønsker en mellomting mellom overspesialisering og overkill Vi kan løse omtrent alt ganske direkte med f.eks. s.k. heltallsprogrammering, men vi har ingen god generell algoritme for det. 5

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

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

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: 29 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. 30

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

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

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

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 s 2/2 0/1 2/3 0/1 2/2 2/2 t y z Blant forover-kantene er minste ledige kapasitet 3. Blant bakover-kantene er minste flyt 2. Minimum blir altså 2. 34

Eksempel w 2/2 x 2/3 2/3 s 2/2 0/1 0/1 0/2 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. 35

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

Eksempel w 2/2 x 2/3 2/3 s 2/2 0/1 0/1 0/2 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. 37

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

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 39

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

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? 41

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 42

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

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 44

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

Maks-flyt: Akkurat passe komplisert 46