Algoritmi per il flusso nelle reti Lezione n°12 Prof.ssa Rossella Petreschi Lezione del 21/11/2013 del Corso di Algoritmica
Metodo delle reti residue Inizialmente si considera associato alla rete R un flusso nullo, f = f0 Idea: data una rete R con assegnato un flusso f (non massimo), si costruisca una rete residua Rf. Trovato un flusso f’ su Rf , si assegni a R il flusso f+f’. Si procede per iterazione finchè a R 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. 2
Correttezza del metodo delle reti residue Lemma: se f è un flusso su R e f’un flusso su Rf, allora (f+f’) è un flusso su R con valore f + f’ = f + f’ . Prova: si deve dimostrare che su R per f+f’ valgono le 3 proprietà del flusso capacità: (f+ f’)(x,y) = f(x,y) + f’(x,y) ≤ f(x,y) +c(x,y)- f(x,y)= c(x,y) conservazione del flusso:∑(f+f’)(x,y) = ∑(f(x,y) + f’(x,y)) = ∑f(x,y) +∑ f’(x,y) = 0 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 3
Massimo flusso-minimo taglio Teorema: Data una rete R e un flusso f in R, i seguenti tre asserti sono equivalenti: esiste un taglio (S,P) con C(S,P) = f; f è un massimo flusso in R; non vi sono cammini aumentanti in R 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 R per f, allora f non sarebbe massimo; da c. a a. sia S l’insieme dei vertici raggiungibili da s nella rete residua Rf e P = V-S. Poiché non vi sono cammini aumentanti in R per f, in Rf non vi sono spigoli da S a P, ovvero in R tutti gli spigoli da S a P sono saturati, ovvero C(S,P) = f. 4
Metodo dei cammini aumentanti Collo di bottiglia di un cammino: cf() = min cf(u,v), con (u,v) arco di sulla rete Rf Metodo:Inizialmente si considera associato alla rete R un flusso nullo, f = f0 Idea: si trovi, se esiste, un cammino aumentante sulla rete Rf . Si scelga f’ su Rf così definito: f’(u,v) = cf() , se (u,v) è un arco di ; f’(u,v) = - cf(), se (v,u) è un arco di ; f’(u,v) = 0, altrimenti. Segue che f’= cf() e il valore del flusso f+f’ su R è pari a f’ + cf( . Si procede per iterazione finchè a R non è assegnato un flusso massimo f*. 5
Algoritmo di Ford e Fulkerson (1956) Algoritmo FF (R(V,E,s,p)) for ogni arco (u,v) E do f(u,v)=0, f(v,u)=0; While un cammino da s a p in Rf do cf () = min cf(u,v), (u,v) in Rf; for ogni arco (u,v) do f(u,v) = f(u,v) + cf () , f(v,u)=- f(u,v) Se le capacità della rete sono intere, l’algoritmo FF richiede tempo O(m f*) nel caso peggiore f* numero di iterazioni dell’algoritmo che incrementa il flusso di almeno una unità ad ogni passo edm tempo richiesto dalla visita ad ogni passo. Esistono: casi di capacità intera che raggiungono il limite temporale superiore: casi di capacità reale non convergenti in tempo finito. 6
Algoritmo di Edmonds e Karp(1972) Algoritmo EK (R(V,E,s,p)) for ogni arco (u,v) E do f(u,v)=0, f(v,u)=0; While un cammino minimo da s a p in Rf do (minimo rispetto alla distanza) cf () = min cf(u,v), (u,v) in Rf; for ogni arco (u,v) do f(u,v) = f(u,v) + cf () , f(v,u)=- f(u,v) Se si considera la rete residua con archi a distanza unitaria e si calcola il cammino minimo con una visita in ampiezza, l’algoritmo EK richiede tempo O (VE2) 7
Lemma delle distanze Lemma Prova Si esegua l’algoritmo EK su una rete di flusso di R (V,E,s,p,C). Per ogni v in V-s,p, la distanza f(s,v) in Rf cresce monotonomamente con ogni aumento di flusso.f(u,v)= lunghezza del cammino minimo da u a v in Rf ) Prova Per assurdo si supponga che esistano dei vertice r tali che f’(s,r) < f(s,r). Sia v quello più vicino alla sorgente in Rf , ovvero f’(s,v) < f’(s,r) < f(s,r). Per gli altri vertici w vale f(s,w) ≤ f’(s,w). Sia u il vertice che precede v sul cammino minimo da s a v, si ha f’(s,u) = f’(s,v)-1. Sia f il flusso in R prima dell’aumento del flusso in Rf ,si ha: se (f(u,v) < c(u,v)), f(s,v) ≤ f(s,u)+1 < f’(s,u)+1 = f’(s,v). se (f(u,v) = c(u,v)), f(s,v) = f(s,u)-1 ≤ f’(s,u)-1 = (f’(s,v)-1)-1< f’(s,v). 8
Complessità dell’algoritmo di EK O(VE2) deriva dalle seguenti due affermazioni: ogni iterazione dell’algoritmo EK può essere realizzata in tempo O(E) se effettuata con visita in ampiezza; l’algoritmo esegue al più O(VE) iterazioni. L’affermazione b) deriva dal fatto che su ogni cammino aumentante c’è un arco critico che sparisce dalla rete residua dopo che è stato aumentato il flusso nella rete. Un arco (u,v) può ritornare critico solo quando l’arco (v,u) appare su un cammino aumentante e quindi quando il flusso su (u,v) decresce. La prima volta si ha df(s,v) = df(s,u) +1 e la seconda si ha df’(s,u) = df’(s,v) +1 Per il Lemma delle distanze vale df(s,v) ≤ df’(s,v), da cui df’(s,u) = df’(s,v) +1 ≥ df(s,v) + 1 = df(s,u) + 2 Fra i due momenti di criticità di (u,v), la distanza di u dalla sorgente aumenta almeno di 2 unità. Quindi tale distanza può variare da 0 a V- 2. L’affermazione b) segue quindi dal fatto che (u,v) può diventare critico al piùVvolte e che ci sono al più Earchi. 9