Algdat Redux. Fjortende forelesning. Repetisjon av utvalgte emner.

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

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

Fra A til B. Syvende forelesning

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

Lineær sortering. Radix sort

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

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

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

Det er lett å gjøre problemet A Enklere B Vanskeligere

All good things. Fjortende forelesning

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

Ninety-nine bottles. Femte forelesning. I dagens forelesning: Mest matematiske verktøy. Først: Asymptotisk notasjon. Så: Rekurrensligninger.

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

Maks Flyt og NPkompletthet

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

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

Dijkstras algoritme Spørsmål

August

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

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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algdat - Øvingsforelesning. Maks flyt

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algdat Eksamensforelesning. Nils Barlaug

ALGORITMER OG DATASTRUKTURER

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

Kompleksitet og Beregnbarhet

ALGORITMER OG DATASTRUKTURER

Minimum Spenntrær - Kruskal & Prim

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Kompleksitet. IN algoritmer og datastrukturer Plenumstime / repetisjon

MAT1030 Diskret Matematikk

MAT1030 Forelesning 25

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Øvingsforelesning Korteste vei: Alle til alle

Eksamen i tdt4120 Algoritmer og datastrukturer

Avanserte flytalgoritmer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for utvalgte oppgaver fra kapittel 9

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

Øvingsforelesning 12 Maks flyt

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

ALGORITMER OG DATASTRUKTURER

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algdat - øvingsforelesning

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag - Korteste vei

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

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

Pensum: fra boken (H-03)+ forelesninger

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

Live life and be merry

Grunnleggende Grafteori

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

ALGORITMER OG DATASTRUKTURER

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

PG4200 Algoritmer og datastrukturer Forelesning 10

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

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

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

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

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

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

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

All good things. Fjortende forelesning

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

MAT1030 Diskret matematikk

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

INF1020 Algoritmer og datastrukturer GRAFER

Rundt og rundt og. Trettende forelesning

MAT1030 Forelesning 24

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

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

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

INF Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

Grunnleggende Grafalgoritmer

Forelesning 28. Grafer og trær, eksempler. Dag Normann - 5. mai Grafer og trær. Grafer og trær. Grafer og trær

Online datingtjeneste The Hungarian Algorithm

Transkript:

Algdat Redux Fjortende forelesning Repetisjon av utvalgte emner. 1

Nå har vi en brukbar (om enn ikke helt intuitiv) definisjon av «alt» og nå ønsker vi å lage oss en liste med de problemene som er «verst av alle». Men hva betyr det? If I can make it there I ll make it anywhere 2

Vi *definerer* verstingene slik: Alt i Kan reduseres til Verstinger i NP Dvs.: Kan du løse *ett* versting-problem i polynomisk tid kan du løse *alle i NP*! Det virker jo for godt til å være sant. (Mange har prøvd, alle har feilet ) Kan løses v.h.a. «kompletthet» 3 NP Denne (definerende) egenskapen kalles altså kompletthet. Vi døper dermed denne verstingmengden

NPC, mengden av NP-komplette problemer. Alt i NP Kan reduseres til Kan løses v.h.a. Alt i NPC Dette er *definisjonen* av NPC. Merk at vi *ikke* i utgangspunktet vet noe om hvorvidt problemer i NPC kan løses i polynomisk tid! Merk at siden alle NPCproblemer ligger i NP så kan de også reduseres til hverandre. Det holder altså å løse *ett* av dem for å ha løst alle. 4 Våre verstinger (SUBSET- SUM, HAM-CYCLE, VERTEX-COVER, TSP) er i NPC (surprise, surprise). Siden ingen har løst disse kan vi altså slutte at ingen har løst noen i NPC.

Og så var det optimaliseringsproblemer, da Alt i NP Kan reduseres til Kan løses v.h.a. Verstinger i/utenfor NP Optimaliseringsproblemer som SHORTEST-PATH har også beslutnings-ekvivalenter som PATH. (Optimaliseringsvariantene er «minst like vanskelige», men med litt binærsøking etter beslutningsparameteren kan man ofte redusere optimaliseringsvarianten til beslutningsvarianten også. 5 «hardness»

Alt i NP Kan reduseres til Kan løses v.h.a. Alt i NP-hard Så: Hvis du kan redusere et NP-hardt problem (som TSP) til problemet ditt så sliter du uansett. 6

Her er noen velkjente NPkomplette (og NP-harde ) problemer (pensum), og noen naturlige reduksjons-retninger (men alle kan selvfølgelig reduseres til alle). CIRCUIT-SAT SAT 3-CNF-SAT CLIQUE SUBSET-SUM VERTEX-COVER HAM-CYCLE TSP 7

NP Slik *tror* vi det er. Vi *vet* ikke om det finnes noe i NP som ligger utenfor P/ NPC, men tror at kanskje faktorisering og/eller graf-isomorfisme ligger der. (De er ikke vist å ligge i P eller NPC, i hvert fall.) P NPC 8

(Merk at det her er en animasjon der P etter hvert overlapper med NPC uten at P = NP. Det er det som er umulig.) NP Umulig! P NPC Dette er umulig for hvis bare *ett* NPCproblem også ligger i P, så vil *alle* gjøre det og det gjelder faktisk alle problemer i NP! Det vil si P=NP i så fall. 9

P = NP = NPC Dette er altså «den andre» mulige verden der NPkomplette problemer kan løses i polynomisk tid. De fleste tror ikke dette er tilfelle. Det vil i så fall ha drastiske konsekvenser. 10

klarer du minesveiper, klarer du alt i NP Men NP er en *svær* mengde. 11

CIRCUIT- SAT Og En litt spesiell variant av minesveiper («infinite minesweeper») er vist å være Turingkomplett og så snubler vi borti The Halting Problem igjen...... U 1 1 1 1 2 2 1 1 1 1 1 1 1 1 u 1 2 3 2 3 2 1 2 3 2 1 1 u 1 1 2 4 s a 1 a 2 a 3 t 3 t t 3 2 1 2 2 1 1 4 3 2 3 2 1 1 2 t 2 2 u 2 2 4 s 3 1 1 0 1 1 1 0 0 1 2 2 1 T 2 3 u u s 2 1 1 1 1 1 1 1 1 1 t 1 1 1 1 1 2 4 5 4 4 t t 1 t t 1 t t 1 t 2 t 1 t t 1 2 3 v v r 2 1 1 1 1 1 1 1 1 1 t 1 1 1 1 1 2 v 2 2 4 r 3 1 1 0 1 1 1 0 0 1 2 2 1 1 2 2 1 1 4 3 2 3 2 1 1 2 t 2 1 v 1 1 2 4 r b 1 b 2 b 3 t 3 t t 3 2 V 1 v 1 2 3 2 3 2 1 2 3 2 1 1. 1. 1. 1 2 2 1 1 1 1 1 1 1... Figure 9: An and gate. 12 For mer: http://for.mat.bham.ac.uk/r.w.kaye/minesw/

Hvis vi reduserer et NPkomplett problem til vårt problem så er vårt også NP-komplett. Greit nok. Men hvor begynte man i sin tid? Men, men 13

Cook og Levin satt på hver sin side av jernteppet under den kalde krigen og begge viste (ved helt *andre* metoder) at (CIRCUIT-)SAT var NP-komplett. CIRCUIT SAT Vi ser ikke på deres bevis her, men antar bare at enkelte problemer (spesifikt CIRCUIT-SAT) er bevist NP-komplette. Erkeproblemet 14

Eksempel på NPC-bevis 15

Kan reduseres til SAT CLIQUE Kan løses v.h.a. Eller, i vårt tilfelle, 3-CNF-SAT (litt lettere å ha med å gjøre). Vi får en logisk formel på 3-CNF-form (konjunktiv normalform der alle leddene har 3 variable) og skal avgjøre om vi kan gi variablene en tilordning slik at formelen blir sann. Vi antar altså at vi vet at dette er i NPC. 16 Her gjelder det å finne en komplett subgraf av en viss størrelse (dvs. et sett med k noder som alle er koblet til hverandre). MAX-CLIQUE er optimaliseringsvarianten

Vi lager en «SAT-løse-maskin» med «CLIQUE-byggeklosser». For å få til en klikk av størrelse 3 må minst én variabel være sann i hver del av formelen og dermed også hele formelen. X Y Z Så: Hvis vi klarer å løse CLIQUE i polynomisk tid kan vi bruke denne teknikken for også å løse SAT. Ergo, siden SAT er i NPC må også CLIQUE være det. X X Y Y Z Z (X or not Y or not Z) and (not X or Y or Z) and (X or Y or Z) 17

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 18

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

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

«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 21

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

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

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

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

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 26

Her er snittet «rundt» treet. 27

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 28

Substitusjon 29

«Gjett» en løsning Bevis korrekthet med induksjon 30

Induksjon Vil vise P(n) for vilkårlig n Bevis grunntilfelle, P(1) Anta P(k) for k < n Vis at dette medfører P(n) Vi har da P(1), og vet at det medfører P(2), som medfører P(3), osv. 31

T (n) = 1 if n = 1 T (n 1) + 1 if n > 1 Vil vise: T (n) = n Basis: T (1) = 1 Induksjonshypotese: T (k) = k, k < n 32

T (n) = T (n 1) + 1 IH: T (k) = k, der k = n 1 = n 1 + 1 = n QED 33

T (n) = T (n 1) + 1 IH: T (k) = k, der k = n 1 = n 1 + 1 = n QED 34

T (n) = 1 if n = 1 2T (n/2) + n if n > 1 Vil vise: T (n) = n lg n + n Basis: T (n) = 1 = 1 lg 1 + 1 Hypotese: T (k) = k lg k + k, k < n 35

T (n) = 2T ( n 2 ) + n = 2 n 2 lg n 2 + n 2 + n (IH.) = n lg n 2 + n + n = n(lg n lg 2) + n + n = n lg n n + n + n = n lg n + n QED Finurligheter og detaljer på tavla. 36

T (n) = 2T ( n 2 ) + n = 2 n 2 lg n 2 + n 2 + n (IH.) = n lg n 2 + n + n = n(lg n lg 2) + n + n = n lg n n + n + n = n lg n + n QED Finurligheter og detaljer på tavla. 37

Den eksakte formen må bevises! Hvis du ender opp med noe som er nesten det samme (f.eks. ved bruk av asymptotisk notasjon) er ikke beviset gyldig! 38

Variabelskifte 39

Flytter oss til «en enklere verden» Skift funksjon og variabel; går «opp i opp» T(n) = S(m) F.eks. m = lg n, S(m) = T(2m ) 40

T (n) = 2T ( n) + lg n [m = lg n] T (2 m ) = 2T (2 m/2 ) + m [S(m) = T (2 m )] S(m) = 2S(m/2) + m = O(m lg m) T (n) = O(lg n lg lg n) 41

T (n) = 2T ( n) + lg n [m = lg n] T (2 m ) = 2T (2 m/2 ) + m [S(m) = T (2 m )] S(m) = 2S(m/2) + m = O(m lg m) T (n) = O(lg n lg lg n) Legg merke til at alle venstresidene (og høyresidene, for den saks skyld) er like. 42

Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert. Tenk vann som sprer seg i rør: Vi behandler krysningspunktene i den rekkefølgen de fylles. Det må gi oss riktige svar. Altså litt som DAG-SP, men ikke topologisk sortert vi ordner (på magisk vis) etter faktisk avstand. (Hvis vi bare tar med kanter i de korteste stiene så er grafen topologisk sortert ) Dijkstras algoritme 43

I stedet for topologisk rekkefølge: Etter stigende avstand fra s Som BFS men prioritetskø (med d[v]) i stedet for FIFO-kø Takler ikke negative kanter! 44

For spinkle grafer: Bruker binær haug som prioritetskø Må kunne endre nøkler (dvs. d[v]) underveis Må ha kobling mellom mellom noder og haug-innslag Kan evt. legge inn noder flere ganger i stedet 45

Initialiser grafen Så lenge det finnes uferdige noder: Velg u med lavest d[u] For alle kanter (u, v): Relax(u, v) 46

Hvis nodene besøkes etter stigende avstand: Kantene i korteste veier bli relaxet i riktig rekkefølge Topologisk sortering av kantene som «teller» Men Hvordan vet vi at lavest d[v] faktisk er nærmest? 47

Bokas variant av korrekthetsbeviset. Merk: Det er snakk om nok et bevis ved kontradiksjon. Vi antar at d[u] ikke er korrekt i det en node u legges til, og viser at vi får en selvmotsigelse. Den neste er kanskje forelesningens vanskeligste slide. 48

Anta at u er den første som ikke har riktig d- verdi når den legges til. Da må x ha hatt riktig d- verdi, og siden (x, y) er relaxet, så må y også ha riktig d-verdi i det u legges til. d[y] = (s, y) (s, u) d[u] Vi vet her at y forekommer før u på den korteste stien (Merk at x og y godt kan sammenfalle med s her.) Husk også at d er et overestimat av δ. Dette virker bare hvis vi ikke har negative kanter; ellers kan vi ta «snarveier» og vi vet ikke lenger hvilken node som er nærmest. 49 d[u] Men Siden u ble valgt før y så vet vi at d[u] d[y]. d[y] d[y] = (s, y) = (s, u) = d[u] Sandwitch!

Underliggende antagelse: u er den første med galt men minimalt avstandsestimat (blant de hittil ubesøkte). Vi har y med korrekt d d[y] = δ(s, y) Dette viste vi ved å se at det må finnes en y med en forgjenger x rett innenfor og som altså har fått kjørt relax på sin forgjengerkant i den korteste stien, og dermed har korrekt d. u ligger senere på korteste vei δ(s, y) δ(s, u) d[u] men besøkes likevel (feilaktig) Det er denne ulikheten som ikke gjelder hvis vi har negative kanter. Da kan en node tidligere på den korteste stien likevel ligge lenger unna startnoden. d[u] d[y] 50 Vi får altså både d[y] d[u] og d[u] d[y], dvs. d[y] = d[u], med de faktiske avstandene klemt imellom. Med andre ord: Begge avstandene er korrekte likevel og vi har en selvmotsigelse.

(Min egen variant av korrekthetsbeviset litt enklere (IMO) enn det i boka.) Hypotetisk: Vi ordner noder etter faktisk avstand. Vi har positive kanter, så bakoverkantene vil være irrelevante (selv om vi jo ikke vet hvilke de er). Med andre ord har vi en (skjult, ukjent) DAG. Vi ønsker å besøke nodene i avstandsrekkefølge *uten å kjenne til* denne rekkefølgen (eller DAG-en). Induksjon to the rescue Dette beviset antar unike/ forskjellige vekter! 0 3 7??? Vi har besøkt de k 1 første nodene, og relaxet kantene ut. Disse nodene har nå riktig avstandsestimat og det har også den neste i rekka (selv om vi ikke vet hvilken det er ennå). Det er akkurat som i DAG-shortest-path. 51 Betrakt den neste i sortert rekkefølge. Den har korrekt estimat. Alle de gjenværende har større avstand, og minst like store estimater. Dermed må den med lavest estimat være den neste, og vi har løst problemet for k.

Kjøretid avhengig av prioritetskøen. Hver Relax (det vil si, hver kant) kan måtte bruke Decrease-Key som koster O(lg V). Hver Extract-Min (dvs. for hver node) koster også O(lg V). Vi har altså: O(E lg V) + O(V lg V). Hvis alle kan nås fra starten vil E dominere, og vi får O((E+V) lg V) = O(E lg V). Kjøretid: O(E lg V) * * Hvis alle noder kan nås fra s 52

Korteste vei Én til alle Ingen neg. kanter Besøk nærmeste Relax til alle naboer Effektiv Spes. på spinkle G Kravstor O(E lg V) Dette er jo en gjenganger. Jo sterkere krav vi stiller, jo mer effektive er algoritmene. Dijkstras algoritme 53

Floyd-Warshall 54

k er muligens med Delproblem med parameter k: Kan kun gå via de k første nodene. En slik sti kan deles i to mindre delproblemer (med lavere parameter). Alle mellomliggende noder i {1 k 1} 55

! w =, ( ) " ( ) ( ) = ( ) #. +, ( ) ( ) = w " ( ) # = 56

Kubisk kjøretid, naturligvis (, ) ( ) ( ) ( ) ( ( ) 57, ( ) + ( ) ) Transitiv closure: Egentlig akkurat det samme men sjekker om det *finnes* en sti, i stedet for å beregne hvor *lang* den er. (Bruker logiske i stedet for aritmetiske operasjoner.)

k = 0 0 8 5 3 0 2 0 58

k = 1 0 8 5 3 0 8 2 0 59 0 8 5 3 0 2 0

k = 2 0 8 5 3 0 8 5 2 0 60 0 8 5 3 0 8 2 0

k = 3 0 7 5 3 0 8 5 2 0 61 0 8 5 3 0 8 5 2 0

Flyt 62

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

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

65 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å. 66

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

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». 68

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

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

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 71

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

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 73

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

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

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

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