Reti di flusso
Lezione n°14
Prof.ssa Rossella Petreschi
Lezione del 21/11/2012 del Corso di Algoritmi e Strutture Dati
Riferimenti:
•Capitolo 26 del testo Cormen, Leiserson, Rivest, Stein “Introduzione agli algoritmi”
Edizioni: Jackson Libri
•Capitolo 14 del testo Demetrescu, Finocchi, Italiano “Algoritmi e strutture dati”
Edizioni: McGraw-Hill
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
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
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) .
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.
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.
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