Está en la página 1de 64

PAII-13: redes de flujo y aplicaciones

Dr. J.B. Hayet


EN MATEMATICAS
CENTRO DE INVESTIGACION

Marzo 2008

,
J.B. Hayet

Programacion, Marzo 2008

1 / 46

Outline

Flujo maximo: una alternativa

Problemas reducibles a flujos maximos

,
J.B. Hayet

Programacion, Marzo 2008

2 / 46

Flujo m
aximo: una alternativa

Outline

Flujo maximo: una alternativa

Problemas reducibles a flujos maximos

,
J.B. Hayet

Programacion, Marzo 2008

3 / 46

Flujo m
aximo: una alternativa

Caminos aumentadores
La idea basica del metodo de Ford-Fulkerson es ir mejorando un
flujo positivo (admisible) por iteraciones, buscando cada vez un
nuevo camino aumentador que incluya arcos no saturados que se
pueda aumentar o arcos de flujo no nulo que se pueda bajar
Ahora, que tal si trabajaramos sobre flujos que no sean
necesariamente admisibles, pero que se puedan hacer admisibles
empujando flujo en unos vertices?
Algoritmos basados en preflujos: idea de Goldberg y Tarjan en
los 80s

,
J.B. Hayet

Programacion, Marzo 2008

4 / 46

Flujo m
aximo: una alternativa

Preflujos
Un preflujo es un conjunto de arcos con flujo positivo tales que:
el flujo en cada arco no excede la capacidad del arco
el flujo entrante en cada vertice interno es superior al flujo
saliente

O sea un flujo que no verifica la restriccion de conservacion por


exceso.
Un vertice es activo cuando es un vertice interno cuyo flujo
entrante es superior a su flujo saliente (flujo neto positivo)
Ese flujo neto positivo en vertices internos se llama en este
contexto exceso

,
J.B. Hayet

Programacion, Marzo 2008

5 / 46

Flujo m
aximo: una alternativa

Preflujos
p :V V R
satisfaciendo:
1

condicion de capacidad
0 p(v , w ) c(v , w )

para todos los vertices diferentes de s y t:


X
X
p(v , w ) <
p(w , v )
w V

w V

Se busca una solucion a partir de un problema mas facil


,
J.B. Hayet

Programacion, Marzo 2008

6 / 46

Flujo m
aximo: una alternativa

Preflujos
1
9 /10

8 /10

3 /10
2 /15

Exceso en 0: 4
Exceso en 5: 3
Activos: 0 y 5
,
J.B. Hayet

Programacion, Marzo 2008

7 / 46

Flujo m
aximo: una alternativa

Preflujos

Remarcar que:
flujo positivo admisible no hay vertices activos
Vamos a intentar partir de una situacion con vertices activos y ir
apagandoles poco a poco

,
J.B. Hayet

Programacion, Marzo 2008

8 / 46

Flujo m
aximo: una alternativa

Preflujos
Idea de los algoritmos basados en preflujos, iterativamente:
elegir un vertice con exceso (activo)
se supone que s y t no son de los activos
empujar este exceso, si se puede, a lo largo de un arco no
saturado
si no se puede, hacerlo regresar por arcos entrantes (si tienen
flujo positivo)
cada vez, podran aparecer nuevos vertices; esos vertices estan
manejados por cola generalizada
al final te sale un flujo maximo
Poco a poco queremos llegar a un flujo admisible
,
J.B. Hayet

Programacion, Marzo 2008

9 / 46

Flujo m
aximo: una alternativa

Preflujos
1
9 /10

10/10

+2

-2

1 /10
2 /15

Exceso en 0: 0
Exceso en 5: 7
Activos: 5
,
J.B. Hayet

Programacion, Marzo 2008

10 / 46

Flujo m
aximo: una alternativa

Preflujos
1
9 /10

10/10

1 /10
9 /15

+7

Exceso en 0: 0
Exceso en 5: 0
Activos: ya no hay
Casi el flujo maximo. . . Que hubieramos hecho para tener el maximo ?
,
J.B. Hayet

Programacion, Marzo 2008

11 / 46

Flujo m
aximo: una alternativa

Preflujos
Observaciones a partir del ejemplo:
Se va a necesitar empezar por rellenar los arcos saliendo de la
fuente a plena capacidad
Empujar necesita definir una poltica para determinar cuales son
los arcos en los que empuja
Se usa otra vez la capacidad residual para saber si un arco es
aceptable como arco donde empujar flujo: flujo que aumentar
para saturar un arco o flujo que disminuir para aprovechar de
una desviacion favorable

,
J.B. Hayet

Programacion, Marzo 2008

12 / 46

Flujo m
aximo: una alternativa

Preflujos

Observaciones a partir del ejemplo:


Se usa otro criterio para elegir cual(es) arco(s) considerar: una
funcion de altura (que va a encodificar la poltica elegida)
Este criterio tiene que hacer en particular que la opcion de
regresar flujo por atras venga en ultimo recurso

,
J.B. Hayet

Programacion, Marzo 2008

13 / 46

Flujo m
aximo: una alternativa

Funci
on de altura
Una funcion de altura h, para un flujo dado en una red de flujo,
es un conjunto de valores h(i) para 1 i |V | asociadas a
cada vertice, tal que:


h(t) =
0
h(u) h(v ) + 1

si u-v es un arco del grafo residual

Un arco es elegible ssi h(u) = h(v ) + 1.


Ejemplo: h(i) = 0 para 1 i |V | y h(s) = 1, los arcos
elegibles son los arcos conectados a la fuente

,
J.B. Hayet

Programacion, Marzo 2008

14 / 46

Flujo m
aximo: una alternativa

Funci
on de altura
Una funcion mas interesante:
h(i) = di donde di es la distancia mnima en arcos hasta t
Verificamos que:
h(t) = 0
si u y v estan en el grafo residual, tenemos o h(u) = h(v ), o
h(u) = h(v ) 1, o h(u) = h(v ) + 1, o sea
h(u) h(v ) + 1
Es otra funcion extrema: la altura de cada vertice es la maxima
que se puede definir

,
J.B. Hayet

Programacion, Marzo 2008

15 / 46

Flujo m
aximo: una alternativa

Funci
on de altura
Propiedad: para todo flujo y una funcion de altura asociada, la altura
de cualquier vertice es inferior al tamano del camino mas corto de
este vertice al pozo en la red residual
La prueba es inmediata: para todo vertice u, se puede seguir el
camino mas corto de u a t
h(u) = h(u1 )

...

h(u2 ) + 1
h(u3 ) + 2
h(ud ) + d 1

Como h(ud ) = h(t) = 0, sacamos la propiedad

,
J.B. Hayet

Programacion, Marzo 2008

16 / 46

Flujo m
aximo: una alternativa

Funci
on de altura
Funcion extrema:
t es de altura 0
luego, los vertices v conectados por arcos v t en el grafo
residual podran ser de altura 0 o 1 y estan con la altura
maxima, 1
luego, los vertices v conectados a vertices conectados a t
podran ser de altura 1 o 2 y estan con la altura maxima, 2
O sea, los vertices estan ubicados por la funcion de altura lo mas
lejos posible

,
J.B. Hayet

Programacion, Marzo 2008

17 / 46

Flujo m
aximo: una alternativa

Funci
on de altura
Propiedad: si la altura de un vertice es superior a |V |, entonces no
existe camino desde este vertice hasta el pozo en la red residual
Si hay un camino (simple) del vertice hasta t, la propiedad previa dice
que este camino es de tamano superior a |V |, lo que no sera posible
Por que funciones de altura? Si la altura de un vertice activo esta
inferior a la altura de la fuente, es posible que podamos empujar
flujo de este vertice al pozo
superior a la altura de la fuente, el exceso de este vertice tiene
que estar empujado de regreso

,
J.B. Hayet

Programacion, Marzo 2008

18 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
De aqu el algoritmo preflow-push:
Inicializar con flujo cero, cualquier funcion de altura
Rellenar a plena capacidad los arcos conectados a la fuente
Luego iterar, mientras hay vertices activos:
elegir un vertice activo
empujar flujo adentro de un arco elegible (por la funcion de
altura)
si no hay de esos arcos, aumentar la altura de 1

,
J.B. Hayet

Programacion, Marzo 2008

19 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Como en el caso de Ford-Fulkerson, es un algoritmo generico, que
tiene luego variantes que van a diferir de:
la funcion de altura inicial
la manera de elegir cual vertice activo
la manera de elegir el arco elegible
las cantidades de flujo que empujar en los arcos elegibles
O sea puede haber muchas variaciones alrededor de este cuadro!
Idea: empujar lo maximo de flujo a partir de la fuente hacia el pozo;
cuando no se puede, regresarlo a la fuente

,
J.B. Hayet

Programacion, Marzo 2008

20 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

Propiedad: el algoritmo generico conserva la funcion de altura como


tal (o sea sigue siendo funcion de altura)
La funcion se modifica solo si no hay arco u elegible. O sea, en el
vertice elegido, para todos los arcos u v presentes en la red
residual, tenemos h(u) < h(v ) + 1. Ya que aumentamos h(u) de solo
1, tenemos al final para todos esos arcos u v , h(u) h(v ) + 1.
Para los arcos entrantes, es obvio que se mantiene. Ninguna otra
desigualdad esta involucrada.

,
J.B. Hayet

Programacion, Marzo 2008

21 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Propiedad: durante la ejecucion de ese algoritmo, existe en la red
residual un camino dirigido desde cada vertice activo hacia la fuente,
y no existe camino dirigido de la fuente hacia el pozo
Por recurrencia: inicialmente, los unicos vertices activos son los
vertices u destinaciones de los arcos salientes de s. Para cada uno de
esos, hay un arco en la red residual hacia s (por tener flujo s u
positivo). Ademas no hay arcos s v . Luego, la fuente se puede
alcanzar desde los vertices activos porque esos vertices activos son
creados por anadir flujo positivo en arcos elegibles: se crea un arco en
la red residual de este nuevo vertice hacia el inicial. Para estar
alcanzado desde s, se necesita empujar flujo positivo por un arco de
regreso a s, u s. Eso implica h(u) > h(s). De la misma manera, se
puede mostrar que todo vertice alcanzable desde s tiene que verificar
h(u) > h(s), pero h(t) = 0. . .
,
J.B. Hayet

Programacion, Marzo 2008

22 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Propiedad: durante la ejecucion de ese algoritmo, las alturas son
siempre abajo de 2|V |
Considerar los vertices activos u. Por la propiedad precedente, hay un
camino dirigido de este vertice hacia la fuente. Entonces:
h(u) h(s) + dus h(s) + |V | 2
La altura h(s) queda constante y h(s) |V | entonces
h(u) 2|V | 2
Los no-activos son en el peor caso 1 unidad mas que cuando estaban
activos
,
J.B. Hayet

Programacion, Marzo 2008

23 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Propiedad: el algoritmo de preflow-push s encuentra un flujo maximo.
Por que se acaba? Remarcar que cuando un vertice u esta activo, se
empuja su exceso hacia arcos elegibles, haciendole inactivo. Si se
reactiva, tiene que reenviar de regreso una parte del flujo empujado.
Eso implica que la altura de ese vertice haya aumentado, y eso
llevara a una contradiccion si la secuencia de vertices activos
seleccionados no es cotada. Entonces, se acaba en un numero finito
de iteraciones; cuando se acaba, tenemos un flujo positivo (ya que no
hay vertices activos); ademas, como no hay camino dirigido de la
fuente al pozo en la red residual, tenemos el flujo maximo.

,
J.B. Hayet

Programacion, Marzo 2008

24 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

Ford-Fulkerson: buscar entre los flujos positivos posibles y llegar


a uno sin camino aumentador
Goldberg-Tarjan: buscar entre los flujos sin caminos
aumentadores posibles y llegar a un flujo positivo

,
J.B. Hayet

Programacion, Marzo 2008

25 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo de funcion de alturas inicial: usar un BFS sobre el grafo
reverso del inicial:
2

/11

/4

/10

1
/9

0
/6
/8
/3
0

2
1

/15

,
J.B. Hayet

Programacion, Marzo 2008

26 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

Una version mas especifica del algoritmo:


elegir un vertice activo
aumentar el flujo dentro de un arco saliente, hasta rellenarlo si
se puede, hasta que el vertice se haga inactivo o que ya no haya
arco elegible
cuando no hay arco elegible, incrementar la altura
La especificidad es que terminamos aqu de procesar un vertice,
empujando la cantidad mas grande de flujo que se pueda.

,
J.B. Hayet

Programacion, Marzo 2008

27 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

La implementacion de esta version requiere:


una funcion de inicializacion de las alturas, que genere alturas
consistentes (usar el BFS por ejemplo)
una manera de sacar vertices activos en cada iteracion: por
ejemplo usando una cola generalizada (puede ser pila, cola. . . )
resuelve la eleccion de los arcos procesandoles todos con respeto
a un vertice dado

,
J.B. Hayet

Programacion, Marzo 2008

28 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
2

/11

/4

/10

1
/9

0
/6
/8
/3
0

2
1

/15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
2

11 /11

10 /10

1
0 /9

FIFO:
0-4

0 /4

0
0 /6
0 /8
0 /3
0

2
1

0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
2

11 /11

0 /4

10 /10

1
9 0 /9

FIFO:
0-4
4-2-5

0
0 /6
0 /8
1 0 /3
0

2
1

0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32

11 /11

4 0 /4

10 /10

1
9 0 /9

FIFO:
0-4
4-2-5
2-5-4

0
0 6 /6
0 /8
1 0 /3
0

2
1

0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32

11 /11

4 0 /4

10 /10

1
9 0 /9

FIFO:
0-4
4-2-5
2-5-4
5-4

0
0 6 /6
0 /8
1 0 /3
0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32

11 /11

4 0 /4

10 /10

21
9 0 /9

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5

0 6 /6
8 0 /8
1 0 /3
0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

11 /11

4 0 /4

10 /10

21
9 0 /9

0
0 6 /6

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4

8 0 /8
1 0 /3
0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

11 /11

1
10 /10

4 0 /4
3 21

9 0 /9
2

0
0 6 /6
8 0 /8

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5

1 0 /3
0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 /10

4 0 /4
3 21

9 0 /9
2

0
0 6 /6
8 0 /8
1 0 /3

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 /10

4 0 /4
3 21

9 40 /9
2

0
0 6 /6
8 0 /8
1 0 /3

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5
0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 /10

4 0 /4
3 21

9 40 /9
32

0
0 6 /6
8 0 /8
1 03 /3

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5
0
2-0

2
1

7 0 /15

6
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 /10

4 0 /4
3 21

9 40 /9
32

0
0 6 /6
8 0 /8
1 03 /3
0

2
1

7 90 /15

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5
0
2-0
0
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 /10

4 0 /4
3 21

9 40 /9
3 24

0
0 6 /6
8 0 /8
1 03 /3
0

2
1

7 90 /15

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5
0
2-0
0
0
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Ejemplo:
32 4

1011 /11

1
10 7 /10

4 0 /4
3 21

9 40 /9
3 24

0
0 6 /6
8 0 /8
1 03 /3
0

2
1

7 90 /15

FIFO:
0-4
4-2-5
2-5-4
5-4
4-5
5-4
4-5
5
0
2-0
0
0
,

J.B. Hayet

Programacion, Marzo 2008

29 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Con cola generalizada (que evita duplicados de vertices)
t e m p l a t e < c l a s s Graph , c l a s s Edge> c l a s s MAXFLOW
{ const Graph &G ;
int s , t ;
v e c t o r <i n t > h , wt ; // H e i g h t s , e x c e s s e s
void i n i t h e i g h t s ( ) ;
public :
MAXFLOW( const Graph &G , i n t s , i n t t ) : G(G ) ,
s ( s ) , t ( t ) , h (G . V ( ) ) , wt (G . V ( ) , 0 ) {
initheights ();
GQ gQ(G . V ( ) ) ;
gQ . p u t ( s ) ; wt [ t ] = (wt [ s ] = MG . V ( ) ) ;
w h i l e ( ! gQ . empty ( ) ) {
i n t v = gQ . g e t ( ) ;
typename Graph : : a d j I t e r a t o r A(G , v ) ;
,
J.B. Hayet

Programacion, Marzo 2008

30 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

f o r ( Edge e = A . beg ( ) ; ! A . end ( ) ; e = A . n x t ( ) ) {


i n t w = e>o t h e r ( v ) ;
i n t cap = e>capRto (w ) ;
i n t P = cap < wt [ v ] ? cap : wt [ v ] ;
i f (P > 0 && v == s | | h [ v ] == h [ w]+1)
{ e>a d d f l o w R t o (w , P ) ;
wt [ v ] = P ; wt [ w ] += P ;
i f ( (w != s ) && (w != t ) ) gQ . p u t (w ) ; }
}
i f ( v != s && v != t && wt [ v ] > 0 )
{ h [ v ]++; gQ . p u t ( v ) ; }
}
}
};
,
J.B. Hayet

Programacion, Marzo 2008

31 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

Complejidad:
En el peor caso, O(|V |2 |A|) para la version mas generica
En el caso de cola FIFO, ese resultado es mas facilmente
establecido
Suponemos que requerimos checar si un arco esta o no en el
grafo residual, con una representacion explcita del grafo residual
podramos ir hasta O(|V |3 )

,
J.B. Hayet

Programacion, Marzo 2008

32 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push
Complejidad, caso FIFO:
remarcar la subdivision en fase del procesamiento de la FIFO
considerar = 0 si no hay vertices activos, o igual a la altura
maxima sino. Sea tambien h0 (s) la altura de la fuente:
= h0 (s) inicialmente, se cancela al final.
Fases en que un vertice aumenta de altura: 2|V |2 h0 (s)
En las otras fases, baja de al menos uno (empujamos flujo
hacia vertices de altura inferior)
Entonces en el peor caso, tendremos 2|V |2 h0 (s) incrementos,
a partir de h0 (s), y 2|V |2 decrementos, o sea 4|V |2 fases

,
J.B. Hayet

Programacion, Marzo 2008

33 / 46

Flujo m
aximo: una alternativa

Algoritmo de preflow-push

Unos mejoramientos:
como evitar de reiterar varias veces como en el ejemplo pasajes
de incrementacion?
otros esquemas que FIFO, en particular estrategia tomando el
vertice activo maspalto (necesita cola de prioridad): probado en
peor caso O(|V |2 |A|)

,
J.B. Hayet

Programacion, Marzo 2008

34 / 46

Problemas reducibles a flujos m


aximos

Outline

Flujo maximo: una alternativa

Problemas reducibles a flujos maximos

,
J.B. Hayet

Programacion, Marzo 2008

35 / 46

Problemas reducibles a flujos m


aximos

Flujo m
aximo, un problema de referencia

El problema de busqueda de flujo maximo esta planteado como


problema estandard, y se puede mostrar que varios otros
problemas son equivalentes o se pueden reducir a este
Ahora, el mismo problema se reduce el mismo a otros problemas:
programacion linear, y su resoluci
on esta mas facil
problemas de flujo de costo mnimo (mincost-flow)

,
J.B. Hayet

Programacion, Marzo 2008

36 / 46

Problemas reducibles a flujos m


aximos

Redes generalizadas
Una red generalizada contiene multiples fuentes y multiples pozos. La
equivalencia es trivial:

/0.5

4
/0.3

/0.2
5

/0.6
/0.8
3

/0.3
/0.3

/0.7

/0.4

/0.2

/0.2
6
2

/0.3

/0.2

9
,
J.B. Hayet

Programacion, Marzo 2008

37 / 46

Problemas reducibles a flujos m


aximos

Redes generalizadas
Una red generalizada contiene multiples fuentes y multiples pozos. La
equivalencia es trivial:
/1.9

/0.5

/0.5

4
/0.3

/0.2
5

/0.6
/0.8
/0.3

/0.3

/0.7

/0.4

/0.2

/0.2
6
2

/0.3

/0.2

/0.8

t
,

/0.5
J.B. Hayet

Programacion, Marzo 2008

37 / 46

Problemas reducibles a flujos m


aximos

V
ertices con capacidades
Otro problema clasico, es el de maximizacion de un flujo en una red
de flujo donde los vertices tambien tienen capacidades. La
equivalencia es trivial:
/.8

/0.5

/0.6
/.7

5
/.4

/0.3

/0.7
/0.4

/0.2
/.8

/.6

6
,

J.B. Hayet

Programacion, Marzo 2008

38 / 46

Problemas reducibles a flujos m


aximos

V
ertices con capacidades
Otro problema clasico, es el de maximizacion de un flujo en una red
de flujo donde los vertices tambien tienen capacidades. La
equivalencia es trivial:
1bis

/.8

/0.5

/0.6
5bis

3bis

/.7

5
/.4

/0.3

/0.7
/0.4
6bis
2

2bis /0.2
/.8

/.6

6
,

J.B. Hayet

Programacion, Marzo 2008

38 / 46

Problemas reducibles a flujos m


aximos

Redes aciclicas
Un problema interesante es encontrar un flujo maximo en una red
aciclica. La ausencia de ciclo hara el problema mas facil?
Es menos evidente, pero otra vez los problemas son equivalentes! No
solo el caso aciclico se reduce al caso general, la reciproca es verdad!
1
/8
/3

3
0
/3

/6

/4

,
J.B. Hayet

Programacion, Marzo 2008

39 / 46

Problemas reducibles a flujos m


aximos

Redes aciclicas
/14

/0
/4

/6

/3
/24
/24

/8

/24

/6

/24
/4

/3

7
6

/14

/4
/0

,
J.B. Hayet

Programacion, Marzo 2008

40 / 46

Problemas reducibles a flujos m


aximos

Redes aciclicas

Considerar un corte en la red inicial: (S, T ). En la red


transformada, hacer un corte con S, S y s 0 de un lado, T , T y
t de otro lado
Para todo u, o s u o u t esta en el corte, u u no y
u v esta en el corte ssi u v esta en el corte inicial
En total: C + X donde X es la suma de las capacidades de
todos los arcos
En particular eso vale para un corte mnimo

,
J.B. Hayet

Programacion, Marzo 2008

41 / 46

Problemas reducibles a flujos m


aximos

Redes aciclicas

Sea un corte mnimo en la red transformada (S 0 , T 0 ) con s 0 S 0


y t0 T 0
u u no puede ser un arco del corte: si consideras otro corte
formado por s 0 de un lado, los otros del otro tienes un corte
inferior
Para todo corte C + X en la red transformada, le puedes asociar
de manera unica un corte en la red original tomando los arcos
centrales
Los cortes mnimos corresponden en los dos casos!

,
J.B. Hayet

Programacion, Marzo 2008

42 / 46

Problemas reducibles a flujos m


aximos

Redes no-dirigidas
Tenemos en este caso una reduccion relativamente simple, que
permite expresar un problema de busqueda de circulacion maxima en
un grafo no dirigido en terminos de circulacion maxima dirigida.
Problemas tal vez mas naturales
1

/6

/8
/3

0
/3

/6

/4

2
,
J.B. Hayet

Programacion, Marzo 2008

43 / 46

Problemas reducibles a flujos m


aximos

Redes no-dirigidas
Tenemos en este caso una reduccion relativamente simple, que
permite expresar un problema de busqueda de circulacion maxima en
un grafo no dirigido en terminos de circulacion maxima dirigida.
Problemas tal vez mas naturales
1

/6

/8
/3

0
/3

/6

/4

2
,
J.B. Hayet

Programacion, Marzo 2008

43 / 46

Problemas reducibles a flujos m


aximos

Flujos realizables
Problema en que se asigna una ponderacion a cada vertice: positiva
(vertice proveedor) o negativa (vertice consumidor). Un flujo es
realizable ssi la diferencia entre su flujo saliente y su flujo entrante es
igual a esta ponderacion. Se supone que la suma de las
ponderaciones es nula (globalmente la demanda y la oferta se
equilibran) Existe o no tal flujo en un grafo dirigido (y siempre con
las restricciones de capacidad)? Este problema se puede reducir al
problema de flujo maximo. Es un problema clasico de logstica: pesos
positivos son almacenes, pesos negativos los puntos de venta;
queremos que todos los vertices sean satisfechos.

,
J.B. Hayet

Programacion, Marzo 2008

44 / 46

Problemas reducibles a flujos m


aximos

Flujos realizables
(7)

1
/8

(-1)
/3

0
(2)

/6

/3

/4

2
(-8)
,
J.B. Hayet

Programacion, Marzo 2008

45 / 46

Problemas reducibles a flujos m


aximos

Flujos realizables
s

(7)

1
/8

(-1)
/3

0
(2)

1
/6

/3

/4

t
2

(-8)
,
J.B. Hayet

Programacion, Marzo 2008

45 / 46

Problemas reducibles a flujos m


aximos

Emparejamiento bipartito
Como ya vimos, el problema de emparejamiento bipartito se reduce al
problema de flujo maximo:
1

Que complejidad podemos esperar para resolver el problema?

,
J.B. Hayet

Programacion, Marzo 2008

46 / 46

Problemas reducibles a flujos m


aximos

Emparejamiento bipartito
Como ya vimos, el problema de emparejamiento bipartito se reduce al
problema de flujo maximo:
1

/1

/1

2
/1

/1
/1
3

/1

/1

/1

/1
0
/1

/1
6

Que complejidad podemos esperar para resolver el problema?


O(|V ||A|)!

,
J.B. Hayet

Programacion, Marzo 2008

46 / 46