Sommario della lezione Ulteriori applicazioni del Massimo Flusso 1. Connettività di grafi. Selezione di progetti 3. Trasporto in reti 4. Eliminazione in tornei Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 1/3
Connettività di grafi Problema: Dato un grafo diretto G = (V, E) e due nodi s e t, trovare il minimo numero di archi che disconnette t da s. Def. Un insieme di archi F E disconnette s da t se tutti i cammini da s a t usano almeno un arco di F. s 3 6 t 4 7 Il problema trova applicazione nell analisi della tolleranza ai guasti di reti di calcolatori (ed in tante altre situazioni...) Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. /3
Il risultato Il minimo numero di archi che disconnette t da s = massimo numero di cammini arco-disgiunti da s a t. Proviamo innanzitutto il. Sia F E un insieme di cardinalità k minima di archi che disconnette t da s. Ogni cammino da s a t deve usare almeno un arco di F (altrimenti F non disconnetterebbe t da s) pertanto il massimo numero di cammini arco-disgiunti da s a t è al più k s 3 6 t s 3 6 t 4 7 4 7 Nell esempio, abbiamo cammini arco disgiunti da s a t e archi bastano a disconnettere t da s. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 3/3
Proviamo ora la diseguaglianza oppposta Sia k il massimo numero di cammini arco-disgiunti da s a t. Nella lezione scorsa vedemmo che tale numero corrispondeva anche al valore del massimo s-t flusso f nel grafo. Ricordiamo inoltre che la massimalità di f implicava che in G esiste un taglio (A, B) di capacità c(a, B) = v(f) = k. Gli archi che vanno da A a B (ovviamente in numero di k visto che ogni arco ha capacità pari a 1) costituiscono un insieme F che disconnette t da s, per cui la minima cardinalità di un F che disconnette t da s è k. s 3 6 t s 3 6 t A 4 7 B 4 7 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 4/3
Ricordando il risultato provato nella lezione scorsa: Il massimo numero di cammini da s a t in G che sono arco-disgiunti = valore del massimo flusso in G da s a t e quello appena provato: Il minimo numero di archi che disconnette t da s = massimo numero di cammini arco-disgiunti da s a t. otteniamo Risultato: Il minimo numero di archi che disconnette t da s = valore del massimo flusso in G da s a t che ci fornisce anche un algoritmo di complessità O(mn)) per risolvere il problema, dove come al solito n = V, m = E. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. /3
E se volessimo studiare gli stessi problemi relativamente a vertici? ovvero considerare i seguenti problemi: Problema 1: Determinare il massimo numero di cammini tra due vertici di un grafo in modo tale che nessuna coppia di cammini abbiano vertici in comune? (ovvero i cammini siano vertici-disgiunti) Problema : Determinare il minimo numero di vertici che disconnette un vertice t da s? Bisogna rifare tutto da capo? No. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 6/3
Basta considerare grafi con capacità anche sui vertici ovvero, generalizzare il concetto di rete di flusso mediante un grafo diretto G = (V, E) con le seguenti caratteristiche: associato ad ogni arco e E vi è un numero c(e) 0, capacità dell arco e associato ad ogni nodo u V vi è un numero d(u) 0 capacità del nodo u vi è un nodo s chiamato sorgente, senza archi entranti vi è un nodo t chiamato destinazione, senza archi uscenti In tale situazione un flusso f deve soddisfare le seguenti condizioni 1. (Vincoli sulle capacità) e E 0 f(e) c(e) e u V e entranti in u f(e) d(u). (Vincoli sulla conservazione del flusso) v V, s v t, vale e entranti in v f(e) = e uscenti da v f(e) Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 7/3
Il bello di grafi siffatti è che non sono più difficili da trattare di quelli soliti, ovvero di grafi con capacità solo sugli archi. Infatti, dato un grafo con capacità c(e) sugli archi e capacità d(u) sui nodi avremmo una situazione siffatta, in cui la somma dei flussi entranti nel nodo deve essere d(u): c c c c c 3 d(u) c 6 c 3 u d(u) u c 6 c 1 c 4 c 1 c 4 Potremmo trasformarla in una situazione come quella di destra, in cui si introduce un nodo fittizio u, connesso a u con un arco con capacità d(u). Nel grafo risultante dopo la trasformazione sopra delineata (effettuata ovviamente per ogni nodo) vi sono solo capacità su archi (che sappiamo trattare). È altresì ovvio che esiste un flusso di valore k nel grafo di partenza (con capacità anche sui nodi) se e solo se ne esiste uno dello stesso valore nel grafo modificato (con capacità solo sugli archi). Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 8/3
Riassumendo... Le tecniche di flusso introdotte permettono quindi di risolvere anche questioni che coinvolgono condizioni su nodi, ad esempio determinare il massimo numero di cammini nodo-disgiunti tra una coppia di nodo del grafo, o determinare il minimo numero di nodi necessari a disconnettere una coppia di nodi nel grafo, etc. Basterà imporre le opportune limitazioni sia alla capacità sugli archi, che sui nodi. Ad es., per determinare il massimo numero di cammini nodo-disgiunti tra due vertici s e t di un grafo G, basterà calcolare il massimo flusso da s a t in G, dove avremo imposto che la capacità di ciascun nodo è pari a 1, trasformare il grafo come prima descritto e risolvere il problema del massimo flusso nel grafo trasformato per ottenere la risposta. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 9/3
Esempio: Vie di Fuga Supponiamo di avere una griglia, e dei punti in essa. Il problema è di stabilire se esistono cammini vertice-disgiunti da ciascun punto alla frontiera della griglia non ha soluzione Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 10/3
Formulazione del problema in termini di flusso Input: Grafo griglia G = (V, E), consistente di n colonne ed n righe di vertici. Il vertice generico nella riga i e colonna j può essere rappresentato dalla coppia (i, j). Ogni vertice ha quattro vicini, tranne che per i vertici sulla frontiera (che ne hanno o due o tre). In input abbiamo anche m n punti (x 1, y 1 ),...,(x m, y m ) per i quali vogliamo stabilire se ci sono o meno m cammini disgiunti da essi alla frontiera della griglia (non importa dove, purchè si possa raggiungere la frontiera) Definiamo un grafo di flusso G = (V, E ) nel seguente modo: V = V {s, t} E = E {archi da s ad ogni punto (x i, y i )} {archi da ogni punto della frontiera a t} Ogni arco di G ha capacità pari a 1, ogni nodo di G ha capacità pari a 1. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 11/3
Esempio 1 s t Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 1/3
Vale il seguente risultato Il problema delle vie di fuga ha soluzione positiva (ovvero esistono i cammini nodi-disgiunti dagli m punti in input sulla griglia alla frontiera della griglia) se e solo se nel grafo G esiste un massimo flusso di valore m. Prova: per esercizio. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 13/3
Selezione di progetti Input: insieme di progetti P, a ciascun progetto v P è associato un ricavo p(v) che può essere sia positivo (guadagno) che negativo (costo). Ad es., alcuni progetti generano guadagno (creare pagine web interattive per e-commerce, ridisegnare siti web, etc.) altri progetti, che possono essere necessari per la realizzazione di quelli che generano guadagno, richiedono invece spese (acquisire licenze software, aggiornare server, etc.) Input: insieme di prerequisiti E: se (v, w) E, allora prima di eseguire il progetto v occorre necessariamente aver eseguito il progetto w un insieme di progetti A P è fattibile se i progetti prerequisiti di ogni progetto v A appartengono essi stessi ad A Output: un insieme di progetti A fattibile e di profitto profitto(a) = v A p(v) massimo. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 14/3
Es. : Estrazione da cave all aperto Blocchi di materiale vengono estratti dalla superficie per estrarre sostanze Ciascun blocco v ha un valore netto p(v) =(valore della sostanza contenuta in v) (costo dell estrazione del blocco v) Non si può estrarre il blocco v prima di w o prima di x Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 1/3
Introduciamo il grafo G = (V, E) dei prerequisiti V =insieme dei progetti, (v, w) E se prima di eseguire il progetto v occorre necessariamente aver eseguito il progetto w Nel grafo di sotto, l insieme {v, w, x} è un insieme fattibile di progetti, l insieme {v, x} non è un insieme fattibile di progetti. w v x Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 16/3
Formuliamo il problema come un problema di minimo taglio assegniamo capacità a tutti gli archi dei prerequisiti aggiungiamo un arco (s, v) con capacità c(s, v) = p(v) se p(v) > 0 aggiungiamo un arco (v, t) con capacità c(v, t) = p(v) se p(v) < 0 Poniamo inoltre: p(s) = p(t) = 0. u w p(u) p(w) s p(y) y z p(z) t p(v) p(u) v x Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 17/3
Osservazione: Sia A P un sottoinsieme di progetti fattibile. Definiamo il taglio (A, B ) con A = A {s}, B = (P A) {t}. Per definizione di fattibilità nessun arco (i, j) E attraversa il taglio (in quanto se i A dipende da j allora anche j A) Esempio: A = {w, v, x} u w s y z t v x Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 18/3
Per A P fattibile, e per A = A {s}, B = (P A) {t} vale: c(a, B ) = v P:p(v)>0 p(v) v A p(v) Ricordiamo che gli archi del grafo di flusso possono essere divisi in 3 categorie: 1.gli archi di E che descrivono le precedenze,. gli archi che fuoriescono da s e 3. gli archi che entrano in t. Inoltre, gli archi di E non attraversano il taglio (come prima notato) e quindi non contribuiscono alla sua capacità c(a, B ). Gli archi che entrano in t contribuiscono a c(a, B ) per la quantità ( p(v)) v A:p(v)<0 mentre quelli che fuoriescono da s contribuiscono a c(a, B ) per la quantità p(v) = p(v) p(v) v/ A:p(v)>0 v P:p(v)>0 v A:p(v)>0 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 19/3
Per A P fattibile, e per A = A {s}, B = (P A) {t} Otteniamo quindi c(a, B ) = c(e) + c(e) e:e fuoriesce da A e và in t = ( p(v)) + = v A:p(v)<0 p(v) v P:p(v)>0 v A che è quello che volevamo provare. e:e fuoriesce da A e parte da s p(v) v P:p(v)>0 v A:p(v)>0 p(v) p(v) Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 0/3
Posto C = v P:p(v)>0 p(v) e notando che ogni arco (v, w) che definisce precedenze tra progetti ha capacità > C, otteniamo che ogni taglio (A, B ) di capacità c(a, B ) C definisce implicitamente un insieme fattibile A = A {s}, in quanto nessun arco di precedenze può attraversare tale taglio, avrebbe infatti da solo una capacità maggiore della capacità c(a, B ) dell intero taglio. Mettendo tutto insieme, otteniamo che la capacità di tali tagli (A, B ) è uguale a c(a, B ) = v P:p(v)>0 p(v) v A p(v) = C profitto(a) e quindi per trovare un insieme di profitto massimo (che era il nostro obiettivo) basta trovare un taglio (A, B ) di capacità minima ed estrarne s, (e questo lo sappiamo fare, con l algoritmo di Ford e Fulkerson). Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 1/3
Il Problema del Trasporto Input: Grafo diretto G = (V, E) Nodi fornitori s i con quantità di fornitura f i, i = 1,...,p Nodi richiedenti r i con quantità di richiesta g i, i = 1,...,q fi g i funzione capacità c : E R + Output: trovare dei percorsi su cui far viaggiare le cose, in modo che le richieste siano soddisfatte, ed i vincoli sulle capacità degli archi siano rispettati. 11 s 1 4 r 1 17 1 4 16 s 19 9 r 8 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. /3
Risoluzione del Problema del Trasporto mediante Massimo Flusso Il Problema del Trasporto può essere risolto creando e risolvendo un problema collegato di Massimo Flusso Creiamo una supersorgente s. Per ogni nodo fornitore s i, aggiungiamo un arco da s a s i di capacità pari alla quantità di fornitura f i Creiamo una superdestinazione t. Per ogni nodo richiedente r i aggiungiamo un arco da r i a t con capacità pari alla quantità di richiesta g i Trova il massimo flusso da s a t nella rete di flusso così ottenuta Se il massimo flusso = gi alora tale massimo flusso rappresenta una soluzione al Problema del Trasporto originale, altrimenti il Problema del Trasporto non è risolubile con i parametri dati. s 1 4 r 1 11 17 s 1 t 16 4 8 s 19 9 r Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 3/3
Risoluzione del Problema del Trasporto mediante Massimo Flusso Nel nostro esempio, il massimo flusso da s a t è ottenuto mediante l algoritmo di Ford e Fulkerson. Il valore del massimo flusso ottenuto è. I numeri in rosso rappresentano i valori del flusso su ciascun arco Poichè il valore del massimo flusso ==17+8=somma delle richieste, otteniamo che il flusso in questione è una soluzione al problema del Trasporto 11 s 1 4 4 r 1 17 1 1 13 4 16 s 19 18 9 8 r 8 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 4/3
Perchè l algoritmo funziona in generale Per ogni nodo r i che richiedeva una quantità g i abbiamo creato un arco (r i, t) di tale capacità. In tale rete il flusso non può superare il valore g i, in quanto esiste ovviamente il taglio (V {t}, {t}) esattamente di tale capacità Se esiste un flusso (massimo) di valore g i, necessariamente su ogni arco (r i, t) deve viaggiare una quantità di flusso pari a g i, per la legge di conservazione di flusso, la stessa quantità deve entrare in r i il che fornisce una soluzione al Problema del Trasporto 11 s 1 4 r 1 17 11 17 s 1 t 16 4 8 16 s 19 9 r 8 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. /3
Problema delle danze Una scuola vuole organizzare un ballo di fine anno. Ogni coppia di studenti composta da un ragazzo ed una ragazza che intendono danzare insieme devono registrarsi (altrimenti non possono danzare insieme). I regolamenti della scuola impongono che ogni data coppia non possa danzare insieme più di 3 volte. In più, ogni studente non può danzare più di 10 volte in totale. Problema: massimizzare il numero di danze in totale. Esercizio: formalizzare il problema come un problema di massimo flusso. Suggerimento: Definire un nodo per ogni studente ed ogni studentessa. Inserire un arco di opportuna capacità tra le coppie registrate. Definire opportune capacità associate ad ogni nodo. Indi, procedere come nel Problema del Trasporto, introducendo una sorgente connessa ad ogni studente ed una destinazione connessa ad ogni studentessa. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 6/3
Il Problema del Baseball Il campionato americano di baseball è diviso in tornei e passano alla fase successiva le squadre che hanno avuto il maggior numero di vittorie (non vi sono pareggi nel baseball). Ad ogni istante della stagione, i tifosi sono interessati a sapere se la loro squadra può ancora teoricamente passare il torneo, o è già matematicamente eliminata. w(i) g(i) g(i, j) squadra vinte da giocare Y H C B Yale 33 8 1 6 1 Harvard 9 4 1 0 3 Cornell 8 7 6 0 1 Brown 7 1 3 1 Harvard è già eliminata o può ancora arrivare prima nel girone? Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 7/3
Il Problema del Baseball: analisi preliminare Il massimo numero di vittorie cui Harvard può arrivare è W = 9 + 4 = 33 (vincendo i 4 rimanenti incontri) Supponendo che Harvard li vinca, non sarà eliminata se e solo se: Brown ha al più u(b) = W w(b) = 33 7 = 6 vittorie nei rimanenti incontri Cornell ha al più u(c) = W w(c) = 33 8 = vittorie nei rimanenti incontri Yale ha al più u(y ) = W w(y ) = 33 33 = 0 vittorie nei rimanenti incontri Sia P l insieme delle squadre tranne Harvard: P = {Y, C, B} Sia Q l insieme di tutte le possibili coppie di squadre in P : Q = {(Y, C), (Y, B), (C, B)} Il numero totale di incontri da effettuarsi tra squadre in P è G = 6 + 1 + 1 = 8. Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 8/3
Soluzione del Problema del Baseball mediante Flusso Il Problema del Baseball può essere risolto creando e risolvendo un istanza collegata del problema del Massimo Flusso Crea un nodo sorgente O (tutti gli incontri partono da qui) Crea un nodo per ciascuna coppia (X, Y ) di Q; aggiungi un arco da O a ciascuna coppia (X, Y ) con capacità pari al numero di partite da giocare tra X e Y Crea un nodo per ciascuna squadra di P ; per ciascuna coppia (X, Y ) di Q aggiungi un arco da (X, Y ) alla squadra X ed alla squadra Y di P, con capacità pari al numero di partite da giocare tra X e Y Crea un nodo destinazione T (le vittorie di ciascuna squadra sono qui memorizzate ). Aggiungi un arco da ogni squadra X in P al nodo T, la capacità dell arco è pari a u(x) (il massimo numero di vittorie che la squadra X può avere nei rimanenti incontri affinchè Harvard si qualifichi) Y,C 6 Y S 6 1 1 Y,B B,C 6 1 1 1 1 C B 0 6 T Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 9/3
Soluzione del Problema del Baseball mediante Flusso Trova il massimo flusso da O a T nella rete Se il flusso su ciascun arco da O alle squadre è proprio uguale alla capacità dello stesso arco, allora Harvard può ancora sperare di diventare prima nel girone, altrimenti è matematicamente eliminata Infatti ciò vorrebbe dire che è possibile rispettare i vincoli che le squadre Y, C, B non vincano più di u(y ), u(c), u(b) volte, rispettivamente, giocando tutte le partite. Nel nostro esempio i valori del massimo flusso sono espressi in rosso, e poichè l arco da O a {Y, C} non è usato al massimo della sua capacità, ne segue che Harvard è matematicamente eliminata. S 6 1 11 1 Y,C Y,B B,C 6 1 1 1 6 1 1 1 Y C B 0 6 T Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 30/3
Ritornando alla tabella... e ricordando la precedente figura, abbiamo che il valore del massimo flusso compatibile con il fatto che Brown abbia al più u(b) = W w(b) = 33 7 = 6 vittorie nei rimanenti incontri, Cornell ne abbia al più u(c) = W w(c) = 33 8 =, e Yale ne abbia al più u(y ) = W w(y ) = 33 33 = 0, richiede che il massimo numero di partite da giocare tra Yale e Cornell sia. Poichè invece il numero di partite è 6, ne segue invece che se Yale ne vince 1 va a 34 e Harvard non può raggiungere tale punteggio, mentre invece se le perde tutte e 6 allora Cornell necessariamente va a 34 e di nuovo Harvard non può raggiungere tale punteggio w(i) g(i) g(i, j) squadra vinte da giocare Y H C B Yale 33 8 1 6 1 Harvard 9 4 1 0 3 Cornell 8 7 6 0 1 Brown 7 1 3 1 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 31/3
Esercizio: può Detroit ancora vincere il girone? w(i) g(i) g(i, j) squadra vinte da giocare NYY BAL BOS TOR DET New York Yankees 7 8 3 8 7 3 Baltimore Orioles 71 8 3 7 4 Boston Red Sox 69 7 8 0 0 Toronto Blue Jays 63 7 7 7 0 0 Detroit Lions 49 7 3 4 0 0 Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 013/14 p. 3/3