Il problema del flusso nelle reti
Lezione n°10
Prof.ssa Rossella Petreschi
Lezione del 21 /11/ 2011 del
Corso di Algoritmi e Strutture Dati
Riferimenti:
capitolo 16 del testo M.H.Alsuwaiyel “Algorithms: design tecniques and analysis”
Edizioni: World Scientific
capitolo 27 del testo Cormen,Leiserson, Rivest “Introduzione agli algoritmi” Edizioni:
Jackson libri
capitolo 14 del testo Demetrescu,Finocchi, Italiano “Algoritmi e strutture dati”
Edizioni: McGraw Hill
ASD 2011/2012
Rete di flusso
Una rete di flusso è un grafo orientato e pesato G (V, E, s, p, C),
tale che:
•  s vertice sorgente (da s escono solo archi e non ne entra alcuno);
•  p vertice pozzo (in p entrano solo archi e non ne esce alcuno);
•  C (C funzione da V2 a R+) che associa ad ogni arco (u,v) una
capacità c(u,v) ≥ 0, ovvero c(u,v) > 0 se (u,v)  E, c(u,v) = 0 se
(u,v)  E;
•  v  V,  un cammino da s a p passante per v
Notare che G è connesso e che |E| ≥ |V| -1
ASD 2011/2012
Flusso nella rete
Un (assegnamento) di flusso in una rete G(V, E, s, p, C), è una
funzione f tale che:
f: V xV R+ 0
• vale il vincolo di capacità : f (u,v) ≤ c(u,v),  u,v  V xV;
• vale il vincolo di conservazione del flusso :
∑f (u,v) = 0,  u  V -s,p e v  V ;
• vale il vincolo di antisimmetria : f (u,v) = - f (v,u),  u,v  V xV;
Notare che f (u,u) = 0  u  V
ASD 2011/2012
Quantità di flusso nella rete
Dato un flusso f in una rete G, si definisce:
• valore di un flusso:
la quantità di flusso che esce dalla sorgente (f = f(s, V) = ∑f (s,v));
• flusso nullo: la funzione f0 tale che f0(x,y) = 0,  (x,y)  E;
• flusso massimo: un flusso f* tale che f*= maxf f ;
• somme di flussi: (f1+ f2)(x,y) = f1(x,y) + f2(x,y) ;
• differenze di flussi: (f1- f2)(x,y) = f1(x,y) - f2(x,y) .
ASD 2011/2012
Tagli in reti di flusso
Un taglio (S,P) di una rete di flusso G è una partizione dei vertici di G tale che S
contenga la sorgente s e P = V-S contenga il pozzo p.
Capacità del taglio: c(S,P)= ∑c(x,y), x in S e y in P.
Flusso attraverso il taglio: f(S,P)= ∑f(x,y), x in S e y in P.
Lemma: Data una rete di flusso, un flusso f e un taglio (S,P), la quantità di flusso
f(S,P) che attraversa il taglio è uguale al valore del flusso nella rete f = ∑f (s,v), (s,v) in E.
Prova
f (S,P) = ∑f (x,y), x in S e y in P = (∑f (x,y), x in S e y in V) - (∑f (x,y),x in S e y in S) =
= (∑f (s,y), y in V+ ∑f (x,y), x in (S-s) e y in V ) - (∑f (x,y), x in S e y in S) =
= ∑f (s,y), y in V= f 
dato che
∑f (x,y), x in (S-s) e y in V = 0 per la conservazione del flusso
∑f (x,y), x in S e y in S = 0 per l’antisimmetria
ASD 2011/2012
Reti residue
residua di un arco* : quantità di flusso che si può mandare sull’arco senza
eccederne la capacità (r(u,v)= c(u,v)- f(u,v), r(u,v)= c(u,v) + f(v,u))
*rispetto ad una data assegnazione di flusso
• Capacità
• Rete residua: data una rete di flusso G (V, E, s, p, C) e un flusso f su G, si definisce
rete residua la rete di flusso Gf (V, Ef, s, p, R) in cui (u,v)  Ef se e solo se r(u,v) > 0.
Notare che
• Ef  ≤ 2Eperché (u,v) e (v,u) sono entrambi presenti in Gf se f(u,v) < c(u,v)
• Gf = G, se f è un flusso nullo.
ASD 2011/2012
Metodo delle reti residue
Inizialmente si considera associato alla rete G un flusso nullo, f = f0
Idea: data una rete G con assegnato un flusso f (non massimo), si costruisca
una rete residua Gf. Trovato un flusso f’ su Gf , si assegni a G il flusso f+f’.
Si procede per iterazione finchè a G non è assegnato un flusso massimo.
Se le capacità degli archi sono intere, l’algoritmo trova sempre un flusso
massimo in tempo finito e la velocità di convergenza del metodo dipende
da come viene calcolato f’.
Se le capacità degli archi sono reali, l’algoritmo potrebbe avvicinarsi
asintoticamente all’ottimo senza raggiungerlo mai.
ASD 2011/2012
Correttezza del metodo delle reti residue
Lemma: se f è un flusso su G e f’un flusso su Gf, allora (f+f’) è un flusso su G
con valore f + f’ = f  +  f’ .
Prova: si deve dimostrare che su G per f+f’ valgono le 3 proprietà del flusso
1. capacità: (f+ f’)(x,y) = f(x,y) + f’(x,y) ≤ f(x,y) +c(x,y)- f(x,y)= c(x,y)
2. conservazione del flusso:∑(f+f’)(x,y) = ∑(f(x,y) + f’(x,y)) = ∑f(x,y) +∑
f’(x,y) = 0
3. antisimmetria: (f+ f’)(x,y) = f(x,y) + f’(x,y) = -f(y,x) - f’(y,x) = - (f(y,x) +
f’(y,x)) = - (f+ f’)(y,x)
e, per il valore:
f + f’= ∑(f+f’)(s,y) = ∑(f(s,y) +f’(s,y)) = ∑f(s,y) + ∑f’(s,y)= f  + f’
y in E
y in E y in Ef
y in E
y in Ef
ASD 2011/2012
Cammini aumentanti
Data una rete G e un flusso f, definiamo
•
capacità di un cammino cc (c cammino semplice in G dalla sorgente s al pozzo p) la
minima fra tutte le capacità degli archi su c.
•
flusso su un cammino fc è così definito:
fc(u,v) = cc, se (u,v) è un arco di c 
fc(u,v) = - cc, se (v,u) è un arco di c 
fc(u,v) = 0, altrimenti.
•
cammino aumentante p un cammino semplice dalla sorgente s al pozzo p nella rete
residua Gf sul quale esista un flusso fp > 0
Fatto: Se esiste un cammino aumentante p sulla rete Gf , segue che il valore del flusso su
G può essere incrementato da f a f  fp.
ASD 2011/2012
Massimo flusso-minimo taglio
Teorema:
Data una rete G e un flusso f in G, i seguenti tre asserti sono equivalenti:
a. esiste un taglio (S,P) con C(S,P) = f;
b. f è un massimo flusso in G;
c. non vi sono cammini aumentanti in G per f.
Prova:
da a. a b.
f ≤ C(A,B) per ogni taglio, quindi f = C(S,P) implica f massimo;
da b. a c.
se ci fosse un cammino aumentante in G per f, allora f non sarebbe
massimo;
da c. a a.
sia S l’insieme dei vertici raggiungibili da s nella rete residua Gf e P =
V-S. Poiché non vi sono cammini aumentanti in G per f, in Gf non vi
sono spigoli da S a P, ovvero in G tutti gli spigoli da S a P sono
saturati, ovvero C(S,P) = f.
ASD 2011/2012