1 algoritmo di ford-fulkerson ford fulkerson fordfulkerson(g, s, t) g rete di flusso con capacità...
TRANSCRIPT
![Page 1: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/1.jpg)
1
Algoritmo di Ford-Fulkerson
Ford Fulkerson
FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v)
for “ogni uv E[G]” do f(uv) f(vu) 0 while “esiste un cammino p da s a t in Gf” do “calcola c(p) = min{cf(uv) : uv arco di p}” for “ogni arco uv di p” do f(uv) f(uv) + c(p) f(vu) - f(uv) return f
![Page 2: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/2.jpg)
2
Cammino aumentante
u20
12
16
s
yx
v
13
10 74
14
9
4
t
Rete
u20
12
16
s
yx
v
13
10 74
14
9
4
t
44
4
4
4
Nuovo flusso
![Page 3: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/3.jpg)
3
u20
12
16
s
yx
v
13
10 74
14
9
4
t
44
4
4
4Nuovo flusso
u20
8
4s
yx
v
13
10 74
10
54
t
Rete residua12 4
4
4
![Page 4: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/4.jpg)
4
Cammino aumentante
u20
8
4s
yx
v
13
10 74
10
54
t
Rete residua12 4
4
4
u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
4
4
11
Nuovo flusso
7
7
7
![Page 5: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/5.jpg)
5
Nuovo flusso u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
4
4
11 7
7
7
u13
8
11s
yx
v
13
3 711
3
54
t
Rete residua5 4
4
11
7
![Page 6: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/6.jpg)
6
Cammino aumentante
u13
8
11s
yx
v
13
3 711
3
54
t
Rete residua5 4
4
11
7
u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
4
12
11
Nuovo flusso1 7
15
8
![Page 7: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/7.jpg)
7
u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
4
12
11Nuovo flusso
1 7
15
8
u5
11s
yx
v
5
3 711
3
54
t
Rete residua5
12
4
11
15
8
![Page 8: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/8.jpg)
8
Cammino aumentante
u5
11s
yx
v
5
3 711
3
54
t
Rete residua5
12
4
11
15
8
u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
12
11
Nuovo flusso1 7
19
12
![Page 9: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/9.jpg)
9
u20
12
16
s
yx
v
13
10 74
14
9
4
t
411
12
11
Nuovo flusso
1 7
19
12
u1
11s
yx
v
1
3 711
3
94
t
Rete residua5
12
11
19
12
![Page 10: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/10.jpg)
10
Complessità di Ford-Fulkerson.
Il for di inizializzazione: for “ogni uv E[G]” do f(uv) f(vu) 0
richiede tempo O(m).
Complessità di Ford Fulkerson
Il test del ciclo while while “esiste un cammino p da s a t in Gf” do
richiede il calcolo della rete residua (tempo O(m)) e la ricerca di un cammino aumentante (tempo O(n+m) e.g. con BFS).
![Page 11: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/11.jpg)
11
“calcola cf(p) = min{cf(uv) : uv arco di p}” for “ogni arco uv di p” do f(uv) f(uv) + cf(p) f(vu) - f(uv)
Siccome queste istruzioni vengono ripetute per ogni cammino aumentante la complessità è O(m k) dove k è il numero di cammini aumentanti.
Le istruzioni interne al ciclo while
richiedono tempo O(n).
In totale ogni iterazione del ciclo while richiede quindi tempo O(m) (per le ipotesi fatte n = O(m)).
![Page 12: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/12.jpg)
12
La complessità dipende da come si scelgono i cammini aumentanti.
Se vengono scelti male la complessità può essere anche molto elevata e in qualche caso l’algoritmo può anche non terminare.
Vediamo qualche limite superiore per k.
Se le capacità sono intere il flusso aumenta ad ogni passo di almeno una unità e quindi k ≤ | f | e la complessità è O(m | f |).
![Page 13: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/13.jpg)
13
u
s
v
1 t
1000000
1000000
1000000
1000000
Se le capacità sono razionali il flusso aumenta ad ogni passo di almeno 1/d con d minimo comune multiplo dei denominatori. In questo caso la complessità è O(m | f | d).
![Page 14: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/14.jpg)
14
La situazione peggiore si ha quando le capacità sono numeri reali.
In questo caso l’algoritmo può anche non terminare: il flusso può aumentare ad ogni passo di una quantità sempre minore senza mai raggiungere il massimo (e a volte senza neppure convergere al massimo).
Vediamo un esempio:
![Page 15: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/15.jpg)
15
dove è il rapporto aureo che sappiamo soddisfa l’equazione . Il flusso massimo è 20.
251φ φ11- φ
1
u
s
v
t
x
y
z
w
10
10
1010-9
1010
10
10
10 10
10
10
10
10
![Page 16: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/16.jpg)
16
1
u
s
v
t
x
y
z
w
10
10
1010-9
1010
10
10
10 10
10
10
10
10
La somma delle capacità tra due vertici è sempre 10. Indichiamo una sola delle capacità complementari x e 10-x e la omettiamo quando vale 10.
1
u
s
v
t
x
y
z
w
![Page 17: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/17.jpg)
17
1
u
s
v
t
x
y
z
w
1
1/
1
1
1
1
u
s
v
t
x
y
z
w
![Page 18: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/18.jpg)
18
11
1
1
1/
1/
1/
1/
1/2
1/u
s
v
t
x
y
z
w
1
1/
1
1
1
1
u
s
v
t
x
y
z
w
![Page 19: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/19.jpg)
19
11
1
1
1/
1/
1/
1/
1/2
1/u
s
v
t
x
y
z
w
11+1/2
1
1
1/
1/
1/
1/+ 1/2
1/3
1/2
1/2
1/2
u
s
v
t
x
y
z
w
![Page 20: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/20.jpg)
20
Procedendo in questo modo il flusso calcolato tende al limite:
20φφ1φ1lim 2
0
1
0
i
in
i
in
![Page 21: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/21.jpg)
21
Algoritmo di Edmonds-Karp.
Edmonds e Karp hanno scoperto che se si usa la ricerca in ampiezza per trovare il cammino aumentante la complessità dell’algoritmo di Ford-Fulkerson risulta O(m2n).
Per dimostrare il limite O(m2n) cominciamo con dimostrare che la distanza f(s,v) di un vertice v dalla sorgente s nella rete residua non diminuisce quando il flusso viene incrementato con il flusso di un cammino aumentante.
Edmond Karp
![Page 22: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/22.jpg)
22
Assumiamo per assurdo che incrementando f si ottenga un flusso g tale che per qualche vertice v si abbia g(s,v) < f(s,v).
Sia q un cammino minimo da s a v nella rete residua Gg e sia u il vertice che precede v in q (il cammino
deve esistere perché g(s,v) < f(s,v) ).
Di tali vertici prendiamo quello con distanza g(s,v) minima di modo che g(s,u) ≥ f(s,u) per ogni u tale che g(s,u) < g(s,v).
![Page 23: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/23.jpg)
23
Siccome q è un cammino minimo e uv è il suo ultimo arco avremo che g(s,v) = g(s,u) + 1.
Se in Gf vi è l’arco uv allora f(s,v) f(s,u) + 1 per la disuguaglianza triangolare e quindi
assurdo.
),(1),(1),(),( vsususvs ggff
Quindi Gf non conteneva l’arco uv e siccome esso è comparso in Gg il cammino aumentante p doveva contenere l’arco opposto vu.
![Page 24: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/24.jpg)
24
Siccome p è un cammino minimo da s a t in Gf anche i suoi sottocammini sono cammini minimi e quindi f(s,u) = f(s,v) + 1. Quindi
2),(1),(1),(),( vsususvs ggff
assurdo.
Quindi le distanze dalla sorgente nelle reti residue non possono aumentare quando si aumenta il flusso con il flusso di un cammino aumentante.
![Page 25: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/25.jpg)
25
Siamo ora in grado di mostrare che il numero k di cammini aumentanti è minore o uguale di mn e dunque la complessità è O(m k) = O(m2n).
Diciamo che un arco uv della rete residua Gf è critico nel cammino aumentante p se uv è un arco di p e c(uv) = c(p).
![Page 26: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/26.jpg)
26
Ogni cammino aumentante contiene almeno un arco critico e gli archi che possono diventare critici sono gli archi in E più eventualmente gli archi opposti.
Se dimostriamo che uno stesso arco non può diventare critico più di n/2 volte allora il numero totale di archi critici e quindi il numero k di cammini aumentanti è minore o uguale di
2m n/2 = mn
![Page 27: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/27.jpg)
27
Dopo l’aumento del flusso un arco critico uv sparisce dalla rete residua e può riapparire soltanto dopo che sia stato trovato un successivo cammino aumentante contenente l’arco opposto vu.
Quindi prima che l’arco uv possa ridiventare critico bisogna che il suo opposto vu sia apparso come arco di un cammino aumentante.
![Page 28: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/28.jpg)
28
Quando uv è critico f(s,v) = f(s,u) + 1.
Quando, in seguito, l’arco opposto vu compare in un cammino aumentante g(s,u) = g(s,v) + 1 e quando l’arco uv ridiventa critico h(s,v) = h(s,u) + 1.
2),(
2),(
1),(
1),(),(
vs
vs
us
usvs
f
g
g
hh
Ma le distanze non possono diminuire e quindi
![Page 29: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/29.jpg)
29
Siccome le distanze finite sono tutte minori di n e tra due volte successive in cui l’arco uv diventa critico la distanza (s,v) aumenta di 2 l’arco uv può diventare critico al più n/2 volte.
La complessità di Ford-Fulkerson nella versione di Edmonds-Karp è dunque O(m2n).
![Page 30: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/30.jpg)
30
Problema del massimo numero di coppie.
Un grafo non orientato G = (V,E) si dice bipartito se i suoi vertici si possono ripartire in due sottoinsiemi S e D tali che ogni arco abbia estremi appartenenti a sottoinsiemi distinti (E SD).
Se xy è un arco diciamo che x e y si possono accoppiare.
Il problema chiede di trovare un insieme massimo di coppie distinte.
Massimo numero di coppie
![Page 31: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/31.jpg)
31
![Page 32: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/32.jpg)
32
Soluzione: trasformarlo in un problema di flusso!!
s t
1
1
1 11
11
1
1
1
1
1
11
1
1
1
![Page 33: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/33.jpg)
33
Cammino aumentante nella rete residua
1
1
1 11
11
1
1
1
1
1
11
1
1
1
1
1 1
Nuovo flusso
1
1
1 11
11
1
1
1
1
1
11
1
1
1
![Page 34: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/34.jpg)
34
Cammino aumentante nella rete residua
1 1
1
Nuovo flusso
1
1
1 11
11
1
1
1
1
1
11
1
1
1
1
1
1 11
11
1
1
1
1
1
11
1
1
1
111
![Page 35: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/35.jpg)
35
Cammino aumentante nella rete residua
1 1
1
Nuovo flusso
1
1
1 11
11
1
1
1
1
1
11
1
1
1
1
1
1 11
11
1
1
1
1
1
11
1
1
1
111
1
1
1
![Page 36: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/36.jpg)
36
Rete residua Vertici raggiungibili da s nella rete residua e archi che intersecano il taglio
1
1
1 11
11
1
1
1
1
1
11
1
1
1
1 1
1
1
1
1 11
11
1
1
1
1
1
11
1
1
1
111
1
1
1
![Page 37: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/37.jpg)
37
Esercizio Descrivere un algoritmo che dato un grafo orientato aciclico pesato sugli archi ed un vertice s calcola i cammini massimi da s ad ogni altro vertice.
esercizio 50
![Page 38: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/38.jpg)
38
Esercizio Descrivere un algoritmo che dato un grafo orientato aciclico pesato sugli archi ed un vertice s calcola i cammini massimi da s ad ogni altro vertice.
Soluzione Un qualunque algoritmo che calcola i cammini minimi del grafo G’ con w’(u,v)=-w(u,v) e calcola
esercizio 50
![Page 39: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/39.jpg)
39
Esercizio Sono date n task a1,...,an con tempi di esecuzione t1,...,tn. Tali task si possono eseguire in parallelo utilizzando un numero sufficiente di processori.L’esecuzione deve però rispettare dei vincoli di propedeuticità rappresentati mediante coppie aiaj il cui significato è “ai deve essere finita prima di iniziare l’esecuzione di aj”.Descrivere un algoritmo efficiente che calcola il tempo minimo necessario per eseguire tutte le task.
esercizio 51*
![Page 40: 1 Algoritmo di Ford-Fulkerson Ford Fulkerson FordFulkerson(G, s, t) G rete di flusso con capacità c(u,v) for ogni uv E[G] do f(uv) f(vu) 0 while esiste](https://reader035.vdocuments.mx/reader035/viewer/2022062701/5542eb4f497959361e8bf2de/html5/thumbnails/40.jpg)
• MinMakespan(G)
a1,…,an Topological_Sort(G)
for i=1 to n
fiti
for i=2 to n
for j=1 to i-1
if (aj,ai) in E and fi<fj+ai
fifj+ai
return maxi(fi)
40