Flujo en Redes Algoritmos y Estructuras de Datos III

Anuncio
Flujo en Redes
Algoritmos y Estructuras de Datos III
Flujo en Redes
Definiciones:
I
Una red N = (V , X ) es un grafo orientado conexo que tiene
dos nodos distinguidos una fuente s, con grado de salida
positivo y un sumidero t, con grado de entrada positivo.
I
Una función de capacidades en la red es una función
c : X → R ≥0 .
Flujo en Redes
s
2
5
3
6
4
7
t
Flujo en Redes
9
2
10
s
5
4
15
8
3
4
15
5
15
6
6
10
10
15
10
4
30
7
t
Flujo en Redes
Definiciones:
I
Un flujo factible en una red N = (V , X ) con función de
capacidad c, es una función f : X → R ≥0 que verifica:
1. 0 ≤ f (e) ≤ c(e) para todo arco e ∈ X .
2. Ley de conservación de flujo:
X
X
f (e) =
f (e)
e∈In(v )
e∈Out(v )
para todo nodo v ∈ V \ {s, t}, donde
In(v ) = {e ∈ X , e = (w → v ), w ∈ V }
Out(v ) = {e ∈ X , e = (v → w ), w ∈ V }
I
El valor del flujo es F =
P
e∈In(t) f (e)
−
P
e∈Out(t) f (e).
Flujo en Redes
F =4
(9,0)
2
(10,4)
s
(5,0)
(4,4)
(4,0)
(15,0)
4
(15,0)
(8,4)
3
5
(15,0)
(30,0)
(10,4)
6
(6,0)
(15,0)
7
(10,0)
(10,0)
t
Flujo en Redes
Problema: Determinar el flujo de valor máximo F que se puede
definir en una red N = (V , X ).
Definiciones:
I
Un corte en la red N = (V , X ) es un subconjunto
S ⊆ V \ {t}, tal que s ∈ S.
I
Dados S, T ⊆ V , ST = {(u → v ) ∈ X : u ∈ S y v ∈ T }
Proposición: Sea f un flujo definido en una red N = (V , X ) y sea
S un corte, entonces
X
X
F =
f (e) −
f (e)
e∈S S̄
donde S̄ = V \ S.
e∈S̄S
Flujo en Redes
F =4
(9,0)
2
(10,4)
s
(5,0)
(4,4)
(4,0)
(15,0)
4
(15,0)
(8,4)
3
5
(15,0)
(30,0)
(10,4)
6
(6,0)
(15,0)
7
(10,0)
(10,0)
t
Flujo en Redes
F =4
(9,0)
2
(10,4)
s
(5,0)
(4,4)
(4,0)
(15,0)
4
(15,0)
(8,4)
3
5
(15,0)
(30,0)
(10,4)
6
(6,0)
(15,0)
7
(10,0)
(10,0)
t
Flujo en Redes
F =4
(9,0)
2
(10,4)
s
(5,0)
(4,4)
(4,0)
(15,0)
4
(15,0)
(8,4)
3
5
(15,0)
(30,0)
(10,4)
6
(6,0)
(15,0)
7
(10,0)
(10,0)
t
Flujo en Redes
Definición: La capacidad de un corte S se define como
X
c(S) =
c(e).
e∈S S̄
Lema: Si f es una función de flujo con valor F y S es un corte en
N, entonces
F ≤ c(S).
Corolario (certificado de optimalidad): Si F es el valor de un
flujo f y S un corte en N tal que F = c(S) entonces f define un
flujo máximo y S un corte de capacidad mı́nima.
Flujo en Redes
C = 30
9
2
10
s
5
4
15
8
3
4
15
30
15
7
10
10
6
6
4
15
5
10
t
Flujo en Redes
C = 62
9
2
10
s
5
4
15
8
3
4
15
30
15
7
10
10
6
6
4
15
5
10
t
Flujo en Redes
C = 28
9
2
10
s
5
4
15
8
3
4
15
30
15
7
10
10
6
6
4
15
5
10
t
Flujo en Redes
C = 28
F = 24
(9,6)
2
(10,10)
s
(5,4)
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(15,0)
7
(10,6)
(10,10)
t
Flujo en Redes
C = 28
F = 28
(9,9)
2
(10,10)
s
(5,3)
(4,0)
(4,0)
(15,15)
4
(15,1)
(8,8)
3
5
(15,0)
(30,15)
(10,9)
6
(6,5)
(15,0)
7
(10,9)
(10,10)
t
Flujo en Redes - Camino de Aumento
Definiciones: Dada una red N = (V , X ) con función de capacidad
c y un flujo factible f ,
I
Definimos la red residual, R(N, f ) = (V , XR ) donde
∀(v → w ) ∈ X ,
I
I
(v → w ) ∈ XR
si
f ((v → w )) < c((v → w ))
I
(w → v ) ∈ XR
si
f ((v → w )) > 0.
Un camino de aumento es un camino orientado P de s a t
en R(N, f ).
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
Definiciones: Dada una red N = (V , X ) con función de capacidad
c y un flujo factible f ,
I
Para cada arco (v → w ) en el camino de aumento P,
definimos
(
∆((v → w )) =
I
c((v → w )) − f ((v → w ))
f ((w → v ))
si (v → w ) ∈ X
si (w → v ) ∈ X
Y
∆(P) = mı́n{∆(e)}
e∈P
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(5,4)
s
(4,4)
(4,0)
(15,10)
4
(15,0)
(8,8)
3
5
(15,0)
(30,10)
(10,8)
6
(6,0)
(10,6)
(15,0)
t
(10,10)
7
R(N, f )
2
5
s
3
6
4
7
t
Flujo en Redes - Camino de Aumento
(9,6)
2
N
(10,10)
(4,4)
(5,4)
s
(15,0)
(8,8)
3
4
R(N, f )
(15,0)
(30,10)
2
(10,6)
(10,8)
6
(6,0)
(4,0)
(15,10)
5
(15,0)
t
(10,10)
7
∆(P) = 1
5
3
4
4
s
3
6
4
7
1
t
Flujo en Redes - Algoritmo de camino de aumento
Entrada: Dada una red N con función de flujo f , la red residual
R(N, f ) = (V , XR ).
S := {s}
mientras t ∈
/ S y ∃(v → w ) ∈ XR y v ∈ S y w ∈
/ S hacer
ant(w ) := v
S := S ∪ {w }
fin mientras
si t ∈
/ S entonces
retornar S corte de V
si no
reconstruir P entre s y t usando ant a partir de t
retornar P camino de aumento
fin si
Flujo en Redes - Algoritmo de camino de aumento
Proposición: El algoritmo de camino de aumento determina un
camino de aumento si existe, y si no llega a incorporar a t en S es
porque no hay camino de aumento.
El algoritmo de camino de aumento no dice en que orden deben
incorporarse los nodos a S.
Flujo en Redes
Proposición: Sea f un flujo definido sobre una red N con valor F
y sea P un camino de aumento en R(N, f ). Entonces el flujo f¯,
definido por


si (v → w ) ∈
/P
f ((v → w ))
¯
f ((v → w )) = f ((v → w )) + ∆(P) si (v → w ) ∈ P


f ((v → w )) − ∆(P) si (w → v ) ∈ P
es un flujo factible sobre N con valor F̄ = F + ∆(P).
Teorema: Sea f un flujo definido sobre una red N. Entonces f es
un flujo máximo ⇐⇒ no existe camino de aumento en R(N, f ).
Teorema: Dada una red N, el valor del flujo máximo es igual a la
capacidad del corte mı́nimo.
Flujo en Redes - Algoritmo de Ford y Fulkerson
Entrada: Red N = (X , V ) con función de capacidad c : X → R + .
definir un flujo inicial en N
(por ejemplo f (e) := 0 para todo e ∈ X )
mientras exista P := camino de aumento en R(N, f ) hacer
para cada arco (v → w ) de P hacer
si (v → w ) ∈ X entonces
f ((v → w )) := f ((v → w )) + ∆(P)
si no ((w → v ) ∈ X )
f ((w → v )) := f ((w → v )) − ∆(P)
fin si
fin para
fin mientras
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,0)
s
(3,0)
5
4
(1,0)
3
(1,0)
(2,0)
(2,0)
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,0)
s
(3,0)
5
4
(1,0)
(1,0)
(2,0)
t
(2,0)
3
4
2
3
R(N, f )
1
1
2
s
3
5
4
1
3
1
2
2
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,0)
s
(3,0)
5
4
(1,0)
(1,0)
(2,0)
t
(2,0)
3
4
2
3
R(N, f )
1
1
2
s
3
5
4
1
3
1
2
2
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,0)
s
(3,1)
5
4
(1,1)
(1,0)
(2,1)
t
(2,0)
3
4
2
3
R(N, f )
1
1
1
1
2
s
5
t
4
1
2
1
1
3
2
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,0)
s
(3,1)
5
4
(1,1)
(1,0)
(2,1)
t
(2,0)
3
4
2
3
R(N, f )
1
1
1
1
2
s
5
t
4
1
2
1
1
3
2
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,1)
s
(3,1)
5
4
(1,0)
(1,0)
(2,1)
t
(2,1)
3
4
2
3
5
1
1
1
1
R(N, f )
1
s
t
4
1
2
1
1
1
1
1
3
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,1)
s
(3,1)
5
4
(1,0)
(1,0)
(2,1)
t
(2,1)
3
4
2
3
5
1
1
1
1
R(N, f )
1
s
t
4
1
2
1
1
1
1
1
3
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,2)
s
(3,1)
5
4
(1,0)
(1,0)
(2,2)
t
(2,1)
3
4
2
3
R(N, f )
1
1
2
s
2
5
1
2
4
1
1
1
1
3
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,2)
s
(3,1)
5
4
(1,0)
(1,0)
(2,2)
t
(2,1)
3
4
2
3
R(N, f )
1
1
2
s
2
5
1
2
4
1
1
1
1
3
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,2)
s
(3,2)
5
4
(1,0)
(1,0)
(2,2)
t
(2,2)
3
4
2
3
R(N, f )
1
1
2
s
1
5
1
2
4
1
2
3
1
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,0)
2
(3,0)
(1,0)
(1,0)
(2,2)
s
(3,2)
5
4
(1,0)
(1,0)
(2,2)
t
(2,2)
3
4
2
3
R(N, f )
1
1
2
s
1
5
1
2
4
1
2
3
1
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,1)
2
(3,1)
(1,0)
(1,0)
(2,2)
s
(3,2)
5
4
(1,0)
(1,1)
(2,2)
t
(2,2)
1
3
3
2
5
2
1
R(N, f )
1
1
2
s
1
1
2
4
1
2
3
1
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
(4,1)
2
(3,1)
(1,0)
(1,0)
(2,2)
s
(3,2)
5
4
(1,0)
(1,1)
(2,2)
t
(2,2)
1
3
3
2
5
2
1
R(N, f )
1
1
2
s
1
1
2
4
1
2
3
1
t
Flujo en Redes - Algoritmo de Ford y Fulkerson
Teorema: Si las capacidades de los arcos de la red son enteras el
problema de flujo máximo tiene un flujo máximo entero.
Teorema: Si los valores del flujo inicial y las capacidades de los
arcos de la red son enteras el método de Ford y Fulkerson realiza a
lo sumo nU iteraciones, siendo entonces O(nmU), donde U es una
cota superior finita para el valor de las capacidades.
Si las capacidades o el flujo inicial son números irracionales, el
método de Ford y Fulkerson puede no parar (realizar un número
infinito de pasos).
Si no se especifica el orden en el que se eligen los arcos y nodos a
marcar en el algoritmo de camino de aumento, el número de
iteraciones puede ser no polinomial respecto del tamaño del
problema.
Flujo en Redes - Algoritmo de Ford y Fulkerson
√
σ = ( 5 − 1)/2
1
1+σ
3
Camino de aumento
6k + 1
s, 1, 2, 3, 6, t
6k + 2
s, 2, 1, 3, 6, 5, t
6k + 3
s, 1, 2, 4, 6, t
6k + 4
s, 2, 1, 4, 6, 3, t
6k + 5
s, 1, 2, 5, 6, t
6k + 6
s, 2, 1, 5, 6, 4, t
1
1+σ
1+σ
Iteración
1+σ
σ
6
1+σ
s
σ
1+σ
4
1+σ
1+σ
1+σ
1+σ
1+σ
2
1+σ
t
1+σ
5
Flujo en Redes - Modificación de Edmonds y Karp
I
Usa BFS en el algoritmo de camino de aumento para marcar
nodos.
I
La complejidad del algoritmo es O(m2 n).
I
Hay otros algoritmos más eficientes (más complicados).
Descargar