28
10/11/00 1 Rev. 1.2, 10/00 Teoria dei Grafi: Parte II, Problemi di flusso Daniele Vigo D.E.I.S. – Università di Bologna [email protected] rev. 1.2 Ottobre 2000 Flussi.2 D. Vigo Problemi di flusso Rete (Network): grafo orientato G=(V, A), ogni arco (i, j)A ha: • capacità q ij > 0 (eventualmente) costo c ij 0 Archi immaginati come “condotte” lungo le quali può “fluire” del materiale q ij = massimo flusso da v i a v j Due vertici speciali s, t V : s = sorgente, (origine del flusso) t = terminale, (destinazione del flusso)

Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

1

Rev. 1.2, 10/00

Teoria dei Grafi:Parte II,

Problemi di flussoDaniele Vigo

D.E.I.S. – Università di Bologna

[email protected]

rev. 1.2 – Ottobre 2000

Flussi.2D. Vigo

Problemi di flusso

• Rete (Network): grafo orientato G=(V, A), ogniarco (i, j)∈A ha:• capacità qij > 0

• (eventualmente) costo cij ≥ 0

• Archi immaginati come “condotte” lungo le qualipuò “fluire” del materiale

qij = massimo flusso da vi a vj

• Due vertici speciali s, t ∈V :• s = sorgente, (origine del flusso)• t = terminale, (destinazione del flusso)

Page 2: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

2

Flussi.3D. Vigo

Problema MAX–FLOW

Data una rete inviare il massimo flusso da s a t

• Esempio – Rete stradale:• qij espresse in numero di veicoli/ora

• determinare la massima quantità di traffico possibile tradue località (s e t)

• individuare tratti di strada saturati (“colli di bottiglia”)

Flussi.4D. Vigo

Problemi di flusso (2)

• Dato G=(V, A) con capacità qij , un insieme di valori

ξij (= flusso da vi a vj ), (vi, vj)∈A

è un flusso ammissibile da s a t di valore z se:

0 ≤ ξij ≤ qij , ∀ (vi, vj)∈A (a)

(b)Σ ξijvj ∈Γ+(vi )

– Σ ξki =vk∈Γ– (vi )

+ z se vi = s

– z se vi = t

0 se vi ∈V, vi ≠s,t{

Flusso uscente Flusso entrante

Page 3: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

3

Flussi.5D. Vigo

Problemi di flusso (3)

Modello LP di max–flow:

max z

subject to

capacità: 0 ≤ ξij ≤ qij ∀ (vi, vj) ∈ A (a)

bilanciamento di flusso:

(b)Σ ξijvj ∈Γ+(vi )

– Σ ξki =vk∈Γ– (vi )

+ z se vi = s

– z se vi = t

0 se vi ∈V, vi ≠s,t{

Flussi.6D. Vigo

Taglio s–t

• Taglio s–t = partizione di V in (V1, V2) :

s∈V1 , t∈V2

• Valore di un taglio s–t :

v1

s t

v2 v4

v3

s

v1

v2

v3

v4

t1

3

1

5

2

1

2

9

1

Valore del taglio = 7

Σ qij(vi , vj): vi∈V1, vj ∈V2

Page 4: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

4

Flussi.7D. Vigo

Tagli s–t e flusso

• Dato un flusso ammissibile ξ di valore z il flussoche attraversa ogni Taglio s–t vale z

• Valore del flusso s–t :

v1

s t

v2 v4

v3

s

v1

v2

v3

v4

t1

3

1

5

2

1

2

9

1

Valore del flusso = 4

Σ ξij(vi , vj): vi∈V1, vj ∈V2

3

1

1

2

2

0

1

3

1

– Σ ξji(vj , vi): vi∈V1, vj ∈V2

flusso uscente flusso entrante

Flussi.8D. Vigo

Teorema fondamentale del flusso(Ford–Fulkerson, 1956)

Th. Il valore z del massimo flusso da s a t è ugualeal minimo valore di un taglio s–t.

DIM. (costruttiva):

• z non può ovviamente essere maggiore delvalore del minimo taglio s–t (collo di bottiglia)

⇒ dimostriamo che esiste un flusso di tale valore(ottimo)

Page 5: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

5

Flussi.9D. Vigo

Dimostrazione

• Dato un flusso ammissibile ξij , determinare untaglio mediante:

V1 := {s};

while ∃ vi ∈V1 , vj ∉V1 : ξij < qij or ξji > 0 do V1 := V1 ∪{vj };

v1

s t

v2 v4

v3

s

v1

v2

5

3

1

2

2

1

2

9

1

Valore del taglio = 4

3

1

1

2

2

0

1

3

1

v3

v4

t

Flussi.10D. Vigo

Dimostrazione – Caso 1 (1)

• t∈V1 :

tale che: ξij < qij ∀ arco avanti (vi , vj)

ξkl > 0 ∀ arco indietro (vk , vl)

vi vj vls vk t

∃ una catena (sequenza di archi) da s a t

v1

s t

v2 v4

v3

s

v1

v2

5

3

1

2

2

1

2

9

1

2

1

1

1

2

0

1

2

1

v3

t

arco avanti arco indietro

Page 6: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

6

Flussi.11D. Vigo

Dimostrazione – Caso 1 (2)

• La sequenza è detta catena aumentante.δ1 = min { (qij –ξij ) : (vi , vj) è avanti}δ2 = min { ξkl : (vk , vl) è indietro}aggiungendo δ al flusso di ogni arco avanti esottraendo δ dal flusso di ogni arco indietro

si ha un nuovo flusso che:• soddisfa (a) ⇐ definizione di δ

δ = min (δ1 , δ2 )

• soddisfa (b) ⇐• ha valore maggiore di δ unità

–δ +δ–δ –δ+δ +δ +δ –δ

Nuovo flusso → nuovo taglio… fino a quando:

Flussi.12D. Vigo

Dimostrazione – Caso 2

• t∉V1 : ⇒

Valore del flusso =

= valore del taglio s–t

• Ad ogni iterazione sul Caso 1 il flusso aumentaalmeno di 1 ⇒ convergenza

• ξij = qij ∀(vi , vj) : vi ∈V1 , vj∈V2

ξkl = 0 ∀(vk , vl) : vk ∈V2 , vl∈V1

⇓=0=qij

⇒ ottimo

Σ ξij(vi , vj): vi∈V1, vj ∈V2

– Σ ξji(vj , vi): vi∈V1, vj ∈V2

Page 7: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

7

Flussi.13D. Vigo

Complessità

• Il numero di iterazioni non è definibile ma èlimitato da:

U = upper bound su z

• Esempio:

• Tempo: O(T U)

T = tempo per ciascuna iterazione

U = Σ qijvj ∈Γ+(s)

Flussi.14D. Vigo

Algoritmo

• Si inizia con un flusso ammissibile

ad esempio: ξij = 0 ∀i,j

• lo si incrementa mediante catene aumentanti

• quando non esistono catene aumentanti il flusso è massimo

Per trovare le catene aumentanti si ricorre ad unalgoritmo di etichettamento sui vertici.

Page 8: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

8

Flussi.15D. Vigo

Etichette

• Un vertice può essere:• non etichettato;

• etichettato (⇔∈ V1) e non esplorato;

• etichettato ed esplorato (⇔usato per estendere V1).

• Etichetta di un vertice vi :

[+vk ,δ] ⇔ etichettato in avanti

[–vk ,δ] ⇔ etichettato all’indietro

δ = massimo flusso addizionale che si può inviareda s a vi

Flussi.16D. Vigo

Procedure MAX_FLOWbeginfor i:=1 to n do

for j:=1 to n do ξij := 0;

comment ξij = flusso lungo l’arco (vi , vj);

opt := false;

while opt = false do begin

etichetta s con [+s,+∞];

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

if t non è etichettato

then opt := true

elsebegin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ; (i.e. [–y , δ (x)] )

x = y;

until x = s;

cancella tutte le etichette;

end;

end;

comment taglio minimo: V1 ={vi etich} V2 = V \V1

end.

Page 9: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

9

Flussi.17D. Vigo

Procedure MAX_FLOW

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

• tempo O(n2)

⇓• totale O(n2 U)

Flussi.18D. Vigo

Esempio

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

Ad ogni iterazione si sceglie il vi

etichettato e non esplorato di indice minimo

Page 10: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

10

Flussi.19D. Vigo

Inizializzazione

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

for i:=1 to n do

for j:=1 to n do ξij := 0;

comment ξij = flusso lungo l’arco (vi , vj);

opt := false;

Flussi.20D. Vigo

Prima iterazione (1)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

v1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v1,2]

[+v1,2]

[+v1,2]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

Page 11: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

11

Flussi.21D. Vigo

Prima iterazione (2)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

v2

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v1,2]

[+v1,2]

[+v1,2]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v2,2]

[+v2,2]

Flussi.22D. Vigo

Prima iterazione (3)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

v3

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v1,2]

[+v1,2]

[+v1,2]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v2,2]

[+v2,2]

[+v3,2]

Page 12: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

12

Flussi.23D. Vigo

Prima iterazione (4)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

[+s,∞]

[+v1,2]

[+v1,2]

[+v1,2]

[+v2,2]

[+v2,2]

[+v3,2]

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

δ* = 2

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

2

2

2

2

2

2

flusso = 2

Flussi.24D. Vigo

Prima iterazione (5)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

δ* = 2

2

2

2

flusso = 2

Page 13: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

13

Flussi.25D. Vigo

Seconda iterazione (1)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

v1

[+v1,2]

[+v1,2]

2 2

2

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Flussi.26D. Vigo

Seconda iterazione (2)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

2 2

2

[+v1,2]

[+v1,2]

v4

[+v4,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Page 14: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

14

Flussi.27D. Vigo

Seconda iterazione (3)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

2 2

2

[+v1,2]

[+v1,2]

v3

[+v4,1]

[–v3,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Flussi.28D. Vigo

Seconda iterazione (4)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

2 2

2v2

[+v1,2]

[+v1,2]

[+v4,1]

[–v3,1]

[+v2,1]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Page 15: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

15

Flussi.29D. Vigo

Seconda iterazione (5)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

2 2

2

v5

[+v1,2]

[+v1,2]

[+v4,1]

[–v3,1]

[+v2,1]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Flussi.30D. Vigo

Seconda iterazione (6)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

2 2

2

v6

[+v1,2]

[+v1,2]

[+v4,1]

[–v3,1]

[+v2,1]

[+v6,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

δ* = 2

flusso = 2

Page 16: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

16

Flussi.31D. Vigo

Seconda iterazione (7)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 0 0 0 00 0 2 0 0 0 00 0 0 0 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0

[+s,∞]

2 2

2

[+v1,2]

[+v1,2]

[+v4,1]

[–v3,1]

[+v2,1]

[+v6,1]

δ* = 1

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

1

1

1

1

1

1

1111

flusso = 2+1

Flussi.32D. Vigo

Seconda iterazione (8)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

1

1

1

1

flusso = 3

Page 17: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

17

Flussi.33D. Vigo

Terza iterazione (1)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v1

[+v1,2]

[+v1,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

flusso = 3

Flussi.34D. Vigo

Terza iterazione (2)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v4

[+v1,2]

[+v1,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

flusso = 3

Page 18: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

18

Flussi.35D. Vigo

Terza iterazione (3)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v5

[+v1,2]

[+v1,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;[+v5,1]

[+v5,1]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+s,∞]

flusso = 3

Flussi.36D. Vigo

Terza iterazione (4)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v2

[+v1,2]

[+v1,1]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;[+v5,1]

[+v5,1]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v2,1][+s,∞]

flusso = 3

Page 19: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

19

Flussi.37D. Vigo

Terza iterazione (5)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v3

[+v1,2]

[+v1,1]

[+v5,1]

[+v5,2]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v2,1][+s,∞]

flusso = 3

Flussi.38D. Vigo

Terza iterazione (6)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 1

1

1

1

1

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v6

[+v1,2]

[+v1,1]

[+v5,1]

[+v5,2]repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

[+v2,1][+s,∞] [+v6,2]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

flusso = 3

Page 20: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

20

Flussi.39D. Vigo

Terza iterazione (7)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 0 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 0 0

2 2

1

δ* = 2

1

1

1

1

[+v1,2]

[+v1,1]

[+v5,1]

[+v5,2]

[+v2,1][+s,∞] [+v6,2]

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

3

2

2

32

3

flusso = 3+2

Flussi.40D. Vigo

Terza iterazione (8)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 3 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 2 00 0 0 0 0 0 30 0 0 0 0 0 0

2 2

1

δ* = 2

3

1

1

1

if t non è etichettato

then opt := true

else begin

δ* := δ ( t ); x := t;

repeat

if etichetta di x è [+y , δ (x)]

then ξyx := ξyx + δ*

else ξxy := ξxy – δ* ;x = y;

until x = s;

cancella tutte le etichette;

end;

2

2

flusso = 5

Page 21: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

21

Flussi.41D. Vigo

Quarta iterazione

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 3 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 2 00 0 0 0 0 0 30 0 0 0 0 0 0

2 2

1

δ* = 2

3

1

1

1

2

2

[+s,∞]

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

repeat

sia vi etich [± vk , δ (vi)] e non esplorato;

for each vj ∈Γ+(vi) : vj non et e ξij < qij doetich vj con [+vi , min(δ (vi) , qij – ξij )];

for each vj ∈Γ–(vi) : vj non et e ξji > 0 doetich vj con [–vi , min(δ (vi) , ξji )];

marca vi come esplorato;

until t etichettato o nessun vertice può essere etichettato;

v1

[+v1,1]

flusso = 5

Flussi.42D. Vigo

Soluzione (1)

v1

v5

v2 v3

v4

s

v6

v7

2 1

1

2

2

2

21

2

2

41

t

ξ ij =

0 2 0 1 3 0 00 0 1 0 0 1 00 0 0 1 0 0 20 0 0 0 0 0 00 0 0 0 0 2 00 0 0 0 0 0 30 0 0 0 0 0 0

2 2

1

δ* = 2

2

2

[+s,∞]

comment taglio minimo:

V1 ={vi etich} V2 = V \V1

end.

[+v1,1]

flusso = 5

V1 ={v1 , v4 }

V2 ={v2 , v3 , v5 , v6 , v7 }v1

v4

v5

v2

v6

v3 v7

Gli archi del taglio sono saturi!

2

1

2

taglio

Page 22: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

22

Flussi.43D. Vigo

Esempio

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t

Flussi.44D. Vigo

Iterazione 1

[+s,∞]

[+v2,9]

[+v1,5][+s,9]

[+s,9] [+v1,6]

[+v3,5]

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

tv1

s

v2

v3

δ* = 5

flusso = 5

55

5

Page 23: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

23

Flussi.45D. Vigo

Iterazione 2

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t55

5

flusso = 5

[+s,∞]

s

[+s,4]

[+s,9]

v1

[+v1,4]

v2

[+v2,9]

v4

[+v4,4]

v3

[+v3,2]

δ* = 2

+ 2

7

2

22

Flussi.46D. Vigo

Iterazione 3

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t75

5

flusso = 7

[+s,∞]

s

2

22

[+s,4]

[+s,7]

v1

[+v1,4]

v2

[+v2,7]

v4

[+v4,2]

v3

v5

[+v5,4]

δ* = 4

+ 44

4

9

Page 24: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

24

Flussi.47D. Vigo

Iterazione 4

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t

flusso = 11

[+s,∞]

s

2

22

75

9

4

4

[+s,7]

v2

[+v2,7]

v4

[+v4, 3]

[+v4,2]

v3

[–v3,2]

v1

v5

[+v5,3]

δ* = 3

+ 3

7

355

Flussi.48D. Vigo

Iterazione 5

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t

flusso = 14

[+s,∞]

s

2

55

75

9

7

4

3

[+s,4]

v2

[+v2,4]

v4

[+v4,2]

v3

[–v3,2]

v1

[+v1,2]

v5

[+v5,2]

δ* = 2

+2

96

3

4

77

Page 25: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

25

Flussi.49D. Vigo

Iterazione 6

s

v1

9

v2

v3

v4

v6

v5

9

5

9

7

3

96 4

t

flusso = 16

[+s,∞]

s

4

77

73

9

9

6

3v2 v4

[+s,2] [+v2,2]

4

9

3

Taglio minimo

Archi saturi!

Flussi.50D. Vigo

Altri problemi di flusso (1)

A) Sorgenti e terminali multipli

• Dati:

G=(V, A) con capacità qij

S, T ⊂ V S ∩ T = ∅trasmettere il massimo flusso dalla totalità deivertici di S alla totalità dei vertici di T

Page 26: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

26

Flussi.51D. Vigo

S

T

Soluzione (1)

• Nuovo grafo G’=(V’, A’) :

V’ := V ∪ { vs , vt }

vs vt

G

A’ := A ∪ { (vs , vi) : vi ∈ S } ∪ { (vj , vt) : vj ∈ T }

Flussi.52D. Vigo

Soluzione (2)

• Si trova il flusso massimo da vs a vt

• Se non ci sono altri vincoli:

qsi = qjt = + ∞ ∀ i, j

altrimenti:

qsi = limite di produzione per sorgente vi

qjt = limite di produzione per terminale vj

Page 27: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

27

Flussi.53D. Vigo

Altri problemi di flusso (2)

B) Capacità anche sui vertici

• Dati:

G=(V, A) con qij = capacità arco (vi , vj)

pi = capacità vertice vi

s, t ∈ V

trasmettere il massimo flusso da s a t

• flusso totale entrante in vi ≤ pi , ∀ vi ∈ V :

Σ ξij ≤ pi ∀ vi ∈ Vvk∈Γ–(vi)

Flussi.54D. Vigo

Soluzione (1)

• Nuovo grafo G’=(V’, A’ ∪ A” ) :

V’ := { vi+ : vi ∈ V } ∪ { vi

– : vi ∈ V }A’ := { (vi

– , vj

+ ) : (vi , vj) ∈ A } con capacità di (vi– , vj

+ ) = qij

A” := { (vi+

, vi– ) : vi ∈ V } con capacità di (vi

+ , vi

– ) = pi

s

v2

v3

t

p2

p3

p4

p1

q24q12

q23

q34q13

p2

p3

p4p1

q24q12

q23

q34q13

s+ s –

v2+ v2

v3+ v3

t+ t –

Page 28: Teoria dei Grafi: Parte II, Problemi di flusso · 2001. 10. 3. · Problema MAX–FLOW Data una rete inviare il massimo flusso da s a t • Esempio – Rete stradale: • qij espresse

10/11/00

28

Flussi.55D. Vigo

Soluzione (2)

• Si trova il flusso massimo da s+ a t –

• Il flusso totale entrante in un vertice vi+ deve

viaggiare lungo l’arco (vi+

, vi– )

rispetta il vincolo :

Σ ξij ≤ pi ∀ vi ∈ Vvk∈Γ–(vi)