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 ≤ 2Eperché (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