Massimizzare il # di PC prodotti Massimo Flusso Laboratorio di algoritmi e strutture dati Descrizione del problema n n n n Ulteriori vincoli Una fabbrica (sorgente) di PC deve stabilire il numero di PC da assemblare giornalmente. Tutti i PC prodotti verranno venduti in un negozio (destinazione). La fabbrica ed il negozio sono collegati attraverso una rete di comunicazione. Su di ogni tratto della rete è in servizio un furgone che può trasportare un numero fissato di PC (numero che dipende dalla grandezza del furgone). Laboratorio di algoritmi e strutture dati Esistono due nodi particolari Ad ogni arco (u,v)∈E è assegnato un valore c(u,v)>=0 detto capacità Per ogni v∈V esistono: • s à v (cammino da s a v) • v à t (cammino da v a t) Laboratorio di algoritmi e strutture dati n n n Non è possibile produrre PC Non è possibile stoccare PC In altre parole … il numero di PC che entra in un nodo è uguale al numero di PC che esce dal nodo. GOAL: Quale è il maggior numero di PC che può essere trasportato dalla sorgente alla destinazione senza violare i vincoli del problema? Laboratorio di algoritmi e strutture dati 4 È una funzione f:VxVàR n È definita per ogni coppia di vertici n Indica le unità di “bene” (e.g., # di PC) che “viaggia” tra ogni coppia di nodi n f(u,v) indica il flusso della rete dal nodo u al nodo v • s∈ V detto sorgente n n n • t∈ V detto destinazione/pozzo n In ogni nodo della rete di comunicazione: Flusso in G È un grafo orientato e pesato G(V,E) con delle proprietà aggiuntive n n 3 Rete di flusso n 2 5 Laboratorio di algoritmi e strutture dati 6 1 Flusso in G n Vincolo sulla capacità La funzione f:VxVàR soddisfa le seguenti proprietà n Vincolo sulla capacità n Simmetria obliqua n Conservazione del flusso n • f(u,v) <= c(u,v), per ogni u,v∈V Il flusso da un nodo ad un altro non può superare la capacità dell’arco che congiunge i due nodi n • f(u,v) = - f(v,u), per ogni u,v∈V Ovvio, da un nodo all’altro, non si possono trasportare più PC di quelli che entrano in un furgone… • ∑v∈ V f(u,v) = 0, per ogni u∈V-{s,t} Laboratorio di algoritmi e strutture dati Simmetria obliqua n Laboratorio di algoritmi e strutture dati 7 Conservazione del flusso Il flusso da un nodo ad un altro è l’opposto del flusso nella direzione inversa n 8 12 In particolare f(u,u)=0, dato che • f(u,u) = - f(u,u) 4 5 v 5 6 Laboratorio di algoritmi e strutture dati Ulteriori proprietà n Se (u,v),(v,u)∉E, allora non flusso tra il nodo u ed il nodo v. 10 In altre parole … c’è n (u,v),(v,u)∉E implica c(u,v)=c(v,u)=0 Dal vincolo sulla capacità n Dato che f(u,v) = -f(v,u), allora n Quindi, f(u,v)=0 n Laboratorio di algoritmi e strutture dati 9 n Se vi è flusso tra il nodo u ed il nodo v allora: n (u,v)∈V oppure (v,u)∈V o entrambi • f(u,v)<=0 e f(v,u)<=0 • -f(u,v)<=0 implica f(u,v)>=0 Laboratorio di algoritmi e strutture dati 11 Laboratorio di algoritmi e strutture dati 12 2 Valore del flusso n Notazione Dato un flusso f di G, il valore del flusso è definito come: 13 u v • 13 è la capacità |f| = ∑v∈ ∈ V f(s,v) n Proveremo che vale anche • 10 è il flusso n • |f| = ∑v∈ V f(v,t) n Problema: n 10/13 u v Dato G, determinare il flusso di valore massimo Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati 13 Equivalenza 14 Esempio 10 u v v1 4 v2 20 16 8/10 u 5/10 v u 3/4 4 v 10 9 s t 7 0/4 f(u,v)=5 13 f(u,v)=5 Laboratorio di algoritmi e strutture dati v1 v4 Laboratorio di algoritmi e strutture dati 15 12/12 v2 16 s1 15/20 4/9 s s2 t 7/7 8/13 11/14 t2 s4 v4 Laboratorio di algoritmi e strutture dati t1 s3 4/4 v3 14 Sorgenti e destinazioni multiple 11/16 0/10 4 v3 Esempio 1/4 12 s5 17 Laboratorio di algoritmi e strutture dati 18 3 Sorgenti e destinazioni multiple Notazione implicita per il flusso n s1 ∞ S ∞ ∞ ∞ ∞ s2 t1 n ∞ T s3 t2 s4 n ∞ n Laboratorio di algoritmi e strutture dati Per X⊆V, vale f(X,X)=0 Per X,Y⊆V, vale f(X,Y) = -f(Y,X) n Per X,Y,Z⊆V, con X∩Y=∅, vale n n n • f(X∪Y,Z)= f(X,Z)+f(Y,Z) • f(Z,X∪Y)= f(Z,X)+f(Z,Y) Laboratorio di algoritmi e strutture dati Dal precedente dedurre che: n n possiamo |f| = f(V,t) Laboratorio di algoritmi e strutture dati 22 Metodo di Ford-Fulkerson Sia G una rete di flusso e siano f1 e f2 due funzioni flusso su G. Sia g: VxV à R tale che g(u,v) = f1(u,v) + f2(u,v). provare che g è un flusso su G. n n È un metodo per risolvere il problema del massimo flusso È basato su tre idee: n n Sia G una rete di flusso e siano f1 e f2 due funzioni flusso su G e α una costante. Sia g: VxV à R tale che g(u,v) = αf1(u,v) + (1- α)f2(u,v). n lemma Ciò significa che il flusso uscente da s è uguale al flusso entrante in t, poiché, per la conservazione del flusso, il flusso in qualunque altro nodo è uguale a zero 21 Esercizi n 20 Flusso entrante in t Sia G=(V,E) una rete di flusso e sia f un flusso per G. Allora: n f(u,V) = 0, infatti f(u,V) = ∑v∈V f(u,v) 19 Lemma 1 n f(X,Y) = ∑x∈X ∑y∈Y f(x,y) Come conseguenza, la conservazione del flusso può essere scritta come: s5 Laboratorio di algoritmi e strutture dati n Dati due insiemi di vertici X ed Y definiamo: n n Reti residue Percorsi aumentanti ( augmenting Tagli (cut) path) Non è un algoritmo in quanto da esso si possono derivare vari algoritmi provare che g è un flusso su G. Laboratorio di algoritmi e strutture dati 23 Laboratorio di algoritmi e strutture dati 24 4 Metodo di Ford-Fulkerson Reti residue Intuitivamente, una rete residua è costituita dagli archi che permettono il “passaggio” di ulteriore flusso n Dato G=(V,E), s, t ed un flusso f in G la capacità residua di (u,v) è data da: FORD-FULKERSON-METHOD(G,s,t) inizializza il flusso f a zero while esiste un augmenting path p do n aumenta il flusso f lungo p endwhile return f n n Laboratorio di algoritmi e strutture dati cf(u,v) = c(u,v) – f(u,v) Quantità di flusso, da u a v, che può essere aggiunto ad f senza superare la il vincolo sulla capacità Laboratorio di algoritmi e strutture dati 25 Esempio 26 Rete residua indotta da f n È definita come Gf(V,Ef), dove Ef={(u,v)∈VxV : cf(u,v)>0} Gli archi in Ef sono detti archi residui n È la rete costituita da tutti gli archi che possono ammettere ancora flusso n Se almeno un arco tra (u,v) e (v,u) è in G, può accadere che (u,v) è in Gf , quindi: |Ef| <= 2|E| n c(u,v)=10, f(u,v)=8 ⇒ cf(u,v)=2 c(u,v)=0, f(v,u)=7 ⇒ cf(u,v)=7 c(u,v)=16, f(u,v)=-4 ⇒ cf(u,v)=20 Laboratorio di algoritmi e strutture dati n Laboratorio di algoritmi e strutture dati 27 Rete residua indotta da f Esempio di rete di flusso La rete residua è essa stessa una rete di flusso con capacità cf n Possiamo avere cf(u,v)>0 se n c(u,v)>0 e f(u,v)<c(u,v), oppure se n c(u,v)=0 e f(v,u)>0 n n v1 12/12 29 v2 15/20 11/16 1/4 0/10 4/9 s Esiste una relazione tra il flusso in una rete di flusso ed il flusso in una rete residua Laboratorio di algoritmi e strutture dati 28 t 7/7 8/13 4/4 v3 11/14 v4 Laboratorio di algoritmi e strutture dati 30 5 Esempio di rete residua v1 5 Sia G=(V,E) una rete di flusso e sia f un flusso in G. Sia Gf la rete residua indotta da f in G e sia f’ il flusso in Gf. Allora la funzione v2 5 11 s 12 Lemma 2 3 5 11 15 7 4 t F(u,v)=f(u,v)+ f’(u,v) è un flusso in G con valore |F|=|f|+|f’| 5 4 8 v3 3 11 v4 Laboratorio di algoritmi e strutture dati Prova Lemma 2 n 32 Prova Lemma 2 (cont.) Vincolo simmetria n (f+f')(u,v)= f(u,v)+f'(u,v) = -(f(v,u)+f'(v,u) = -(f+f')(v,u) n Laboratorio di algoritmi e strutture dati 31 Valore del flusso |f+f'| = Σ v(f+f')(s,v) = Σ vf(s,v) + Σ vf'(s,v) = |f| + |f'| Vincolo capacità (f+f')(u,v)= f(u,v)+f'(u,v) <=f(u,v)+c(u,v)-f(u,v) = c(u,v) n Vincolo conservazione del flusso Σ v(f+f')(u,v)= Σ vf(u,v) + Σ vf'(u,v) = 0 Laboratorio di algoritmi e strutture dati Augmentig path n n Data una rete di flusso G=(V,E) ed un flusso f, un augmenting path p è un cammino semplice da s a t nella rete residua Gf Data una augmenting path p definiamo la capacità residua di p come v1 5 s 35 12 v2 5 11 3 5 11 4 15 7 t 5 4 8 La capacità residua rappresenta la massima quantità di flusso che si può trasportare lungo gli archi di p Laboratorio di algoritmi e strutture dati 34 Esempio di augmentig path cf(p) = min{cf(u,v) : (u,v) è un arco in p} n Laboratorio di algoritmi e strutture dati 33 v3 3 11 v4 c(p)=4 p=(s,v1 )(v1 ,v3 )(v3 ,v2 )(v2 ,t) Laboratorio di algoritmi e strutture dati 36 6 Lemma 3 Corollario 1 Sia G=(V,E) una rete di flusso e sia f un flusso in G. Sia p una augmentig path nella rete residua Gf . Definiamo la funzione fp :VxV→R come cf(p) se (u,v)∈p fp (u,v) = -cf(p) se (v,u)∈p 0 altrimenti La funzione fp è un flusso in Gf con valore |fp |= cf(p) >0 Laboratorio di algoritmi e strutture dati Sia G=(V,E) una rete di flusso e sia f un flusso in G. Sia p una augmentig path nella rete residua Gf. Sia fp definita come nel Lemma 3. Definiamo la funzione f’:VxV→R come f’=f+fp. Allora f’ è un flusso in G con valore |f’|=|f|+|fp|>|f| Laboratorio di algoritmi e strutture dati 37 Taglio di una rete di flusso Esempio di taglio Un taglio (cut) di una rete di flusso G=(V,E), indicato con cut(S,T), è una partizione dei vertici V in S e T=V-S con s∈S e t∈T n Il flusso lungo il taglio è definito come n f(S,T)=∑u∈S ∑v∈T f(u,v) n La capacità del taglio è definita come v1 v2 15/20 1/4 0/10 4/9 s t 7/7 8/13 4/4 v3 T={t,v2 ,v4 } 11/14 v4 f(S,T)=12+(-4)+11=19 c(S,T)=12+14=26 Laboratorio di algoritmi e strutture dati 39 Osservazioni 12/12 11/16 S={s,v1 ,v3 } c(S,T)= ∑u∈S ∑v∈T c(u,v) Laboratorio di algoritmi e strutture dati 38 40 Lemma 4 Notiamo che il flusso attraverso un taglio può includere valori di flusso negativi, mentre la capacità di un taglio è composta solo da valori positivi n Il prossimo lemma mostra che il valore del flusso in una rete di flusso è pari al flusso lungo un qualsiasi taglio della rete n Laboratorio di algoritmi e strutture dati 41 Sia f un flusso in una rete di flusso G con sorgente s e destinazione t e sia (S,T) un taglio di G. Allora il flusso lungo il taglio (S,T) è f(S,T)=|f|. Laboratorio di algoritmi e strutture dati 42 7 Corollario 2 Teorema (max-flow min-cut) Se f è un flusso in una rete di flusso G con sorgente s e destinazione t, allora le seguenti condizioni sono equivalenti: 1. f è un massimo flusso in G 2. Gf non contiene augmenting path 3. |f|= c(S,T) per un taglio (S,T) Il valore di un qualsiasi flusso f in una rete di flusso G è limitato superiormente dalla capacità di un qualsiasi taglio di G |f|<= c(S,T) per ogni taglio (S,T) Laboratorio di algoritmi e strutture dati Determinare il taglio minimo Se non esiste una augmenting path in Gf, definendo S={v∈V:esiste un percorso da s a v} e T=V-S abbiamo ottenuto il taglio di costo minimo Laboratorio di algoritmi e strutture dati n n n Laboratorio di algoritmi e strutture dati 46 Max-flow con capacità intere Il running-time dell’algoritmo di FF dipende da come si determina l’AP Quando la capacità assume valori reali, se l’AP non è scelta con cura FF potrebbe non convergere mai Se l’AP è scelta usando la BFS, l’algoritmo ha un running-time polinomiale Spesso il problema del massimo flusso si presenta con capacità intere Laboratorio di algoritmi e strutture dati 44 Ford-Fulkerson(G,s,t) foreach (u,v)∈E(G) do f(u,v)=f(v,u)=0 endfor while (esiste p da s a t in Gf) do cf(p) = min{cf(u,v) : (u,v) ∈ p} foreach (u,v)∈ p do f(u,v)=f(u,v)+ cf(p) f(v,u)=-f(u,v) endfor endwhile 45 Analisi di Ford-Fulkerson n Laboratorio di algoritmi e strutture dati 43 47 n Un’implementazione “banale” ha tempo di esecuzione O(E|f*|), dove f* è il valore del massimo flusso n n n Il primo foreach prende tempo Θ(E) Il while è eseguito al più |f* | volte dato che il flusso aumenta di almeno una unità ad ogni iterazione Il lavoro all’interno del while può essere reso efficiente, O(E), a seconda della struttura dati utilizzata (vedi pp. 595 e 596 del libro di testo) Laboratorio di algoritmi e strutture dati 48 8 Esempio 0 1.0 0.0 00 Algoritmo di Edmonds-Karp u s 1.0 00. 00 .00 0 v n t 1 1.0 1.0 00 n f* =2.000.000 000 RT= O(E|f*|) 0 .00 Usa come base l’algoritmo di FF La AP è selezionata usando la BFS n RT=O(10.000.000) n Il percorso da s a t è quello minimo considerando ogni arco con peso uno Il running-time è O(VE2) AP1 =(s,u)(u,v)(v,t) AP2 =(s,v)(v,u)(u,t) Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati 49 Massimo-matching MM in grafi bipartiti G=(V,E) è un grafo non direzionato n Un insieme M⊆V è un matching se Un grafo non direzionato G=(V,E) è bipartito se V può essere partizionato in due insiemi L ed R tali che se (u,v)∈E, allora o u∈L e v∈R oppure u∈R e v∈L n n n Per ogni v∈V al più un arco in M è incidente su v, in tal caso v è matched M⊆V è un massimo-matching se n V=L ∪ R L ∩ R=∅ gli archi sono solo tra L ed R M è di cardinalità massima, cioè per ogni matching M’ si ha |M| >= |M’| Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati 51 Esempio 52 A cosa serve MM? n n n n n matching 50 n massimo matching Laboratorio di algoritmi e strutture dati 53 Ha molte applicazioni pratiche L rappresenta un insieme di processori R rappresenta un insieme di task che devono essere eseguiti simultaneamente Ogni processore esegue un task per volta Un arco indica che un processore è in grado di eseguire un determinato task Si vuole massimizzare il numero di task eseguiti contemporaneamente Laboratorio di algoritmi e strutture dati 54 9 Trovare MM con FF n Teorema del MM A partire da un grafo bipartito non direzionato G=(V,E), dove V=L ∪ R, definiamo la rete di flusso G’=(V’,E’) dove n n n V’=V ∪ {s,t} E’={(s,u) : u∈L} ∪ {(u,v) : u∈L, v∈R e (u,v)∈E} ∪ {(v,t) : v∈R} Ogni arco sulla rete di flusso G’ avrà capacità unitaria Laboratorio di algoritmi e strutture dati Esempio 55 Sia G=(V,E) un grafo bipartito con partizione dei vertici V=L ∪ R, e sia G’=(V’,E’) la corrispondente rete di flusso. Se M è un matching in G, allora esiste un flusso a valori interi in G’ con valore |f|=|M|. D’altra parte, se f è un flusso a valori interi in G’, allora esiste un matching in G con cardinalità |M|=|f|. Laboratorio di algoritmi e strutture dati 56 Tutti gli archi da L ad R con flusso positivo fanno parte del MM flusso = 1 s t flusso = 0 Laboratorio di algoritmi e strutture dati 57 10