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

Like dokumenter
Øvingsforelesning Korteste vei: Alle til alle

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algdat - Øvingsforelesning. Maks flyt

Øvingsforelesning 12 Maks flyt

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Dijkstras algoritme Spørsmål

Fra A til B. Syvende forelesning

ALGORITMER OG DATASTRUKTURER

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

Algdat Eksamensforelesning. Nils Barlaug

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

Lineær sortering. Radix sort

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag - Korteste vei

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

Avanserte flytalgoritmer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Minimum Spenntrær - Kruskal & Prim

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

Grafalgoritmer: Korteste vei

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag for utvalgte oppgaver fra kapittel 9

ALGORITMER OG DATASTRUKTURER

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

IN Algoritmer og datastrukturer

Øvingsforelesning 7. Dijkstras algoritme. Foiler: Fredrik Ludvigsen Foreleser: Jon Marius Venstad 10/4/09 1

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Vi skal se på grafalgoritmer for:

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

Grunnleggende Grafalgoritmer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

Rundt og rundt og. Trettende forelesning

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Eksamen i tdt4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

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

Algdat Redux. Fjortende forelesning. Repetisjon av utvalgte emner.

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Maks Flyt og NPkompletthet

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

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

All good things. Fjortende forelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Vi skal se på grafalgoritmer for:

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

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

SIF8010 ALGORITMER OG DATASTRUKTURER

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

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

Grunnleggende Grafteori

ALGORITMER OG DATASTRUKTURER

Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

All good things. Fjortende forelesning

Innhold. Innledning 1

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Faglærer går normalt én runde gjennom lokalet. Ha evt. spørsmål klare!

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 10

Vann i rør Ford Fulkerson method

INF Algoritmer og datastrukturer

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

Algdat - øvingsforelesning

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

IN Algoritmer og datastrukturer

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

Pensum: fra boken (H-03)+ forelesninger

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Pensum: fra boken (H-03)+ forelesninger

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

Grunnleggende Grafalgoritmer II

ALGORITMER OG DATASTRUKTURER

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

ALGORITMER OG DATASTRUKTURER

Rettede, ikke-sykliske grafer (DAG)

for bare trær Andre forelesning

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

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Løsningsforslag - Floyd-Warshall

Korteste vei i en vektet graf uten negative kanter

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Transkript:

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

Oppgave 1 a s 7 t 3 x 4 2 2 8 2 u 6 v 3 w Bruk DIJKSTRA eller BELLMAN-FORD og finn minste avstand fra s til de andre nodene. Svar/utregning (DIJKSTRA): s t u v w x 0 7 4 8 7 10 8 9 8 10 9 10 10 1

Oppgave 1 b I hvilken rekkefølge vil nodene bli plukket ut dersom man bruker Dijkstras algoritme? Svar: s, u, t, w, v, x 2

Oppgave 1 c s 7 t 3 x 4 8 2 8 4 u 6 v 3 w Bruk en algoritme og finn ut minste avstand fra s til de andre nodene. Bruk f.eks. BELLMAN-FORD, som takler negative vekter. Grafen har ingen negative sykler. Svar: d = [0, 7, 4, 9, 6, 2] 3

Oppgave 2 a Hvilket problem løser DIIKSTRA og BELLMAN-FORD slik de blir presentert i pensum? løser hvilket problem? Svar: Korteste vei fra én startnode til alle andre. 4

Oppgave 2 b Hvilket problem løser FLOYD-WARSHALL slik den blir presentert i pensum? Svar: Korteste vei fra alle noder til alle andre. 5

Oppgave 2 c hvilken algoritme bruker man da for å finne korteste vei fra en node til en annen hvis grafe inneholder negative sykler? Dijkstra, BELLMAN-FORD, FLOYD-WARSHALL eller ingen av delene? Svar: I utgangspunktet er ikke problemet veldefinert når vi har negative sykler. Dermed kan ingen av algoritmene gi oss noe svar. Livekel: Hvis vi kun er interessert i veien fra én node til en annen vil vi i enkelte tilfeller kunne finne en slik vei, dersom det er umulig å gå via den negative løkken. (Vi kan bruke BELLMAN-FORD og håpe det beste... ) 6

Oppgave 2 d Hvilken kjøretid har Dijkstras algoritme (Q implementert som en lineær array)? Svar: O(V 2 ) For hver node vi tar ut av Q er kjøretiden O( Q ) for å finne minimum. Dette gir V i=1 i = O(V2 ). Vi må i tillegg kjøre RELAX på alle kanter, så svaret blir O(V 2 + E) = O(V 2 ). 7

Oppgave 2 e Hvilken kjøretid har BELLMAN-FORD? Svar: O(VE) Vi kjører RELAX på alle kanter V 1 ganger for å sikre at alle korteste veier (maks. V 1 kanter) har fått kjørt RELAX på alle sine kanter i riktig rekkefølge. 8

Oppgave 2 f Hva gjør INITIALIZE-SINGLE-SOURCE(G, S)? Svar: Den sørger for at estimatet d er et gyldig overestimat og at foreldre-treet (π) er tomt. Med andre ord: d[v] =, π[v] = nil, d[s] = 0 9

Oppgave 3 a Hva skjer dersom man bytter ut while Q = med while Q > 1 i linje 4 i DIJKSTRA? INITIALIZE-SINGLE-SOURCE(G, s) S Q V[G] while Q = u EXTRACT-MIN(Q) S S {u} foreach v Adj[u] RELAX(u, v, w) Svar: DIJKSTRA vil gi rett svar da siste element i køen umulig kan være forbedre den foreløpige løsningen. (Se f.eks. utregning i 1a.) 10

Oppgave 4 a Hva gjør DIJKSTRA dersom man forandrer RELAX til det følgende? if d[v] > max{d[u], w(u, v)} d[v] max{d[u], w(u, v)} π[v] u Svar: Finner veien fra en node til en annen der maksimalavstanden mellom to noder er minimal. Med denne nye RELAX vil d[u] ta vare på den maksimale vekten mellom to noder, og sørge for at denne er så liten som mulig. Kan man bruke det samme korrekthetsbeviset her? 11

Oppgave 4 b Hva er kjøretiden for algoritmen i a hvis Q implementeres som en binær heap? (Du kan her anta at det er mulig å finne en vei fra source til alle noder i grafen.) Svar: O(E log V) Nå tar det O(log V) tid å hente ut minimum, så dette koster O(V log V). I tillegg tar RELAX nå O(log V) tid, og gjøre én gang per kant. Totalt blir kjøretiden altså O((E + V) log V) som er O(E log V) hvis alle noder kan nås fra start-noden. 12

Oppgave 4 c Hva er forholdet mellom kjøretidene A: Θ(E log V) og B: Θ(V 2 ) Svar: A vil gå fortere for enkle grafer uten mange forbindelser. Grunnen til dette er at E da vil være nærmere V enn V 2. 13

Flyt-regler Kapasitet: Flyten i en kant kan ikke overgå kapasiteten. Symmetri: Flyt i motsatt retning har motsatt fortegn. Konservering: Ingen noder (unntatt kilde og sluk) konsumerer eller produserer flyt; inn = ut. Symmetrien er et kinking punkt. For å sitere Bart Simpson: I didn t think it was physically possible, but this sucks and blows! 14

Maks-flyt En opplagt måte å finne maksimal flyt på er følgende: 1. Start uten flyt 2. Finn en vei fra kilde til sluk der du kan dytte igjennom mer flyt 3. Hvis en slik vei ikke finnes så er vi ferdige; ellers, dytt flyten igjennom og gå til punkt 2. Dette er den generelle FORD-FULKERSON-metoden. Hvis vi bruker bredde-først-søk for å finne veien fra kilde til sluk får vi en algoritme med polynomisk kjøretid (EDMONDS-KARP). 15

Hvordan finne en vei Det er her vi kommer borti symmetrien ( this sucks and blows ). Den flytforøkende veien kan gå mot pilenes retning! u 4/10 v Flyten fra u til v er positiv, og kan økes med 6 eller reduseres med 4. Flyten fra v til u er negativ, og kan økes med 4 eller reduseres med 6. Vi vil kun øke flyten, men ved å øke den negative flyten reduserer vi den positive (og omvendt)! Vi leter etter en vei fra s til t der vi kan øke flyten i alle kantene, i veiens retning, ikke nødvendigvis kantenes. 16

Et eksempel Er dette en flytforøkende vei (vi ser bort fra resten av grafen)? Hvor mye kan flyten økes med? s 1/6 u 4/7 v 2/8 t Ja, det er en flytforøkende vei; flyten kan økes med 5 fra s til u, med 4 fra u til v, og med 6 fra v til t. Totalt altså med 4. Hvordan kan dette være riktig? Hva kan vi si om flyt i andre kanter tilknyttet u og v? Hvis vi øker flyten fra s til u og flyten fra u til v med samme mengde, hva skjer med flyt-konserveringen i u? Vil det samme skje enten kanten går fra u til v eller fra v til u? 17

Tips Glem residualnettverk (i første omgang); de er ment som et pedagogisk virkemiddel, men kan virke forvirrende Ikke få angst av at flyten går motstrøms Lær deg flyt-reglene Tenk igjennom hvordan du finner en flytforøkende vei (med f.eks. DFS eller BFS) uten å bruke residualnettverk Tenk igjennom hvordan du vil oppdatere flyten når du har funnet en flytforøkende vei 18