Teorema del flusso massimo e taglio minimo

Il teorema del flusso massimo e taglio minimo (conosciuto anche come max-flow min-cut) dice che, in una rete di flusso, il massimo flusso passante dalla sorgente (il nodo iniziale) al pozzo (il nodo finale) è uguale alla somma dei pesi degli archi nel taglio minimo.

Si tratta di una generalizzazione del problema primale standard, tipico della programmazione lineare.

Il teorema fu dimostrato da P. Elias, A. Feinstein, e C.E. Shannon nel 1956, e indipendentemente anche da L.R. Ford Jr. e D.R. Fulkerson nello stesso anno.[1]

Definizioni e formulazione

Sia N = ( V , E ) {\displaystyle N=(V,E)} una rete di flusso, con s e t rispettivamente sorgente e pozzo di N.

Flusso massimo

Lo stesso argomento in dettaglio: Problema del flusso massimo.

Definizione. Un flusso è una funzione f : E R + {\displaystyle f:E\to R^{+}} che assegna ad ogni arco ( u , v ) E {\displaystyle (u,v)\in E} un valore denotato con f u v {\displaystyle f_{uv}} o f ( u , v ) {\displaystyle f(u,v)} . Il flusso è soggetto a due vincoli:

  1. Vincolo di capacità:
    ( u , v ) E : f u v c u v {\displaystyle \forall (u,v)\in E:\qquad f_{uv}\leq c_{uv}}
  2. Conservazione del flusso:
    v V { s , t } : { u : ( u , v ) E } f u v = { u : ( v , u ) E } f v u . {\displaystyle \forall v\in V\setminus \{s,t\}:\qquad \sum \nolimits _{\{u:(u,v)\in E\}}f_{uv}=\sum \nolimits _{\{u:(v,u)\in E\}}f_{vu}.}

Definizione. La capacità è una funzione c : E R + {\displaystyle c:E\to R^{+}} che assegna ad ogni arco ( u , v ) E {\displaystyle (u,v)\in E} un valore denotato con c u v {\displaystyle c_{uv}} o c ( u , v ) {\displaystyle c(u,v)} . Rappresenta il massimo flusso che può passare attraverso un arco.

Definizione. Il valore di flusso è costituito da:

| f | = v V f s v , {\displaystyle |f|=\sum \nolimits _{v\in V}f_{sv},}

e rappresenta l'ammontare di flusso che parte dalla sorgente per arrivare al pozzo.

Taglio minimo

Definizione. Un taglio s-t C = ( S , T ) {\displaystyle C=(S,T)} è la partizione di V tale che s S {\displaystyle s\in S} e t T {\displaystyle t\in T} . L'insieme di taglio di C è:

{ ( u , v ) E   :   u S , v T } . {\displaystyle \{(u,v)\in E\ :\ u\in S,v\in T\}.}

Nota che se gli archi di C venissero rimossi, | f | = 0.

Definizione. La capacità di un taglio s-t è definita come

c ( S , T ) = ( u , v ) S × T c u v = ( i , j ) E c i j d i j , {\displaystyle c(S,T)=\sum \nolimits _{(u,v)\in S\times T}c_{uv}=\sum \nolimits _{(i,j)\in E}c_{ij}d_{ij},}

dove d i j = 1 {\displaystyle d_{ij}=1} se i S {\displaystyle i\in S} e j T {\displaystyle j\in T} , 0 altrimenti.

Minimum s-t Cut Problem. Determinare S e T tali che la capacità del taglio s-t sia minima.

Formulazione del teorema

Il valore massimo di un flusso s-t è uguale alla capacità minima fra tutti i tagli s-t.

Dimostrazione

Si introducono due teoremi fondamentali, chiamati teorema 1 e teorema 2, per semplificare la dimostrazione.

Teorema 1

sia < V s , V t > {\displaystyle <V_{s},V_{t}>} un taglio della rete di flusso N con singola sorgente s e singolo pozzo t. Si ipotizzi un flusso f {\displaystyle f} tale che f ( e ) = c ( e ) {\displaystyle f(e)=c(e)} se e ∈< V s , V t > {\displaystyle e\in <V_{s},V_{t}>} e f ( e ) = 0 {\displaystyle f(e)=0} altrimenti. Dove c ( e ) {\displaystyle c(e)} è il valore della capacità dell'arco e {\displaystyle e} .

Allora f {\displaystyle f} è il flusso di valore massimo in N {\displaystyle N} e < V s , V t > {\displaystyle <V_{s},V_{t}>} è il taglio di N di capacità minima.

Dimostrazione valore massimo:

Il valore di un flusso < V s , V t > {\displaystyle <V_{s},V_{t}>} è calcolato come e ∈< V s , V t > f ( e ) e ∈< V t , V s > f ( e ) {\displaystyle \sum _{e\in <V_{s},V_{t}>}{f(e)}-\sum _{e\in <V_{t},V_{s}>}{f(e)}}

Per un flusso ammissibile questo valore è uguale per ogni taglio < V s , V t > {\displaystyle <V_{s},V_{t}>} della rete N. Se consideriamo il flusso f {\displaystyle f} definito nelle ipotesi abbiamo che il valore del flusso diventa v a l ( f ) = e ∈< V s , V t > f ( e ) {\displaystyle val(f)=\sum _{e\in <V_{s},V_{t}>}{f(e)}} siccome ogni arco entrate in V s {\displaystyle V_{s}} ha flusso azzerato.

Ipotizziamo, per assurdo, che esista un flusso di valore superiore e chiamiamolo f {\displaystyle f^{*}} . Ora consideriamo il taglio < V s , V t > {\displaystyle <V_{s},V_{t}>} su cui è stata costruita l'ipotesi.

v a l ( f ) = e ∈< V s , V t > f ( e ) e ∈< V t , V s > f ( e ) > v a l ( f ) {\displaystyle val(f^{*})=\sum _{e\in <V_{s},V_{t}>}{f(e)}-\sum _{e\in <V_{t},V_{s}>}{f(e)}>val(f)} . Ma questo è chiaramente impossibile poiché la prima sommatoria ha valore massimo in f {\displaystyle f} (e quindi anche in f {\displaystyle f^{*}} ) e la seconda sommatoria può soltanto peggiorare il valore del flusso. Quindi otteniamo v a l ( f ) = v a l ( f ) {\displaystyle val(f^{*})=val(f)} .

Dimostrazione taglio di capacità minima:

Per definizione di valore di un flusso abbiamo v a l ( f ) c a p ( T ) {\displaystyle val(f)\leq cap(T)} dove c a p ( T ) {\displaystyle cap(T)} è la capacità di qualsiasi taglio T {\displaystyle T} in una rete di flusso.

Per ipotesi il valore del flusso f {\displaystyle f} è v a l ( f ) = e ∈< V s , V t > f ( e ) = c a p ( < V s , V k > ) {\displaystyle val(f)=\sum _{e\in <V_{s},V_{t}>}{f(e)}=cap(<V_{s},V_{k}>)} .

Per ogni altro taglio < V s , V t > {\displaystyle <V_{s}',V_{t}'>} di capacità diversa il valore del flusso è e ∈< V s , V t > f ( e ) e ∈< V t , V s > f ( e ) {\displaystyle \sum _{e\in <V_{s}',V_{t}'>}{f(e)}-\sum _{e\in <V_{t}',V_{s}'>}{f(e)}} .

Ma f {\displaystyle f} è un flusso ammissibile e ∈< V s , V t > f ( e ) e ∈< V t , V s > f ( e ) = e ∈< V s , V t > f ( e ) e ∈< V s , V t > f ( e ) > e ∈< V s , V t > f ( e ) e ∈< V s , V t > f ( e ) > c a p ( < V s , V t > ) {\displaystyle \sum _{e\in <V_{s}',V_{t}'>}{f(e)}-\sum _{e\in <V_{t}',V_{s}'>}{f(e)}=\sum _{e\in <V_{s},V_{t}>}{f(e)}\implies \sum _{e\in <V_{s}',V_{t}'>}{f(e)}>\sum _{e\in <V_{s},V_{t}>}{f(e)}\implies \sum _{e\in <V_{s}',V_{t}'>}{f(e)}>cap(<V_{s},V_{t}>)}

Teorema 2

sia f {\displaystyle f} un flusso in una rete di flusso s-t N {\displaystyle N} , allora f {\displaystyle f} è il flusso di valore massimo se e solo[2] se il grafo residuo N {\displaystyle N'} relativo al flusso f {\displaystyle f} non contiene un percorso da s a t e quindi non contiene un cammino aumentante.

Dimostrazione

Dimostrazione {\displaystyle \Leftarrow } :

Consideriamo ogni percorso in N {\displaystyle N'} che inizia da s {\displaystyle s} e creiamo un insieme V s {\displaystyle V_{s}} composto da tutti i vertici che appartengono a questi percorsi.

Siccome non esiste cammino aumentante: t V s {\displaystyle t\notin V_{s}} . Quindi consideriamo il taglio < V s , V t > V t = V V s {\displaystyle <V_{s},V_{t}>\;V_{t}=V\setminus V_{s}} .

Ogni arco ( w , j ) ∈< V s , V t > {\displaystyle (w,j)\in <V_{s},V_{t}>} ha come valore di flusso f ( w , j ) = c a p ( w , j ) {\displaystyle f(w,j)=cap(w,j)} oppure f ( w , j ) = 0 {\displaystyle f(w,j)=0} per costruzione del grafo residuo.

Quindi il taglio < V s , V t > {\displaystyle <V_{s},V_{t}>} soddisfa le ipotesi del teorema 1 e quindi f {\displaystyle f} è il flusso di massimo valore.

Teorema del flusso massimo e del taglio minimo

Il valore massimo di un flusso s-t è uguale alla capacità minima fra tutti i tagli s-t.

Dimostrazione

Il taglio elaborato nella dimostrazione del teorema 2 ha capacità pari al flusso di massimo valore.

Applicazioni

Sezione vuotaQuesta sezione sull'argomento matematica è ancora vuota. Aiutaci a scriverla!

Note

  1. ^ P. Elias, A. Feinstein, and C. E. Shannon, A note on the maximum flow through a network, IRE. Transactions on Information Theory, 2, 4 (1956), 117–119
  2. ^ manca l'altra dimostrazione, che non è necessaria ai fini del teorema

Bibliografia

  • (EN) Jon Kleinberg, Éva Tardos, Algorithm Design, Addison-Wesley, 2005, ISBN 978-0-321-29535-4.

Voci correlate

  • Algoritmo di Ford-Fulkerson
  • Problema del flusso massimo
  • Programmazione lineare
  • Quadratic pseudo-Boolean optimisation
  • Rete di flusso
  • Taglio (teoria dei grafi)
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica