0% encontró este documento útil (0 votos)
268 vistas35 páginas

Problema de Flujo Máximo

Este documento presenta información sobre el problema de flujo máximo en redes de flujo. Explica las definiciones clave como red de flujo, flujo, problema de flujo máximo y cortes. También describe el método de Ford-Fulkerson para resolver el problema de flujo máximo, incluyendo los conceptos de redes residuales y caminos de aumento. Finalmente, enuncia el teorema de max-flow min-cut y presenta algunos problemas que pueden resolverse usando flujo máximo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
268 vistas35 páginas

Problema de Flujo Máximo

Este documento presenta información sobre el problema de flujo máximo en redes de flujo. Explica las definiciones clave como red de flujo, flujo, problema de flujo máximo y cortes. También describe el método de Ford-Fulkerson para resolver el problema de flujo máximo, incluyendo los conceptos de redes residuales y caminos de aumento. Finalmente, enuncia el teorema de max-flow min-cut y presenta algunos problemas que pueden resolverse usando flujo máximo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Flujo Mximo

Training Camp Argentina 2013


Nicols lvarez
naa [at] cs uns edu ar

Idea

Idea

Idea

Idea

Un source s
Un sink t
Nodos intermedios
Arcos dirigidos con una capacidad dada
Objetivo: Enviar el mximo flujo posible de
s a t, cumpliendo las restricciones de
capacidad.

Definicin: Red de Flujo


Una red de flujo es un grafo dirigido G = <N,A>
donde cada arco (u,v) A tiene asociado una
capacidad c(u,v) >= 0.
Se distinguen dos nodos s y t llamados fuente y
destino, tal que ningn arco llega a la fuente o
sale del destino.
Adems, por conveniencia, si (u,v)A entonces
se supone c(u,v) = 0
Tambin que para todo u, existe un camino
S ---> u ---> T

Definicin: Flujo
Un ujo en G es una funcin f : N x N -> R que
satisface:
restriccin de capacidad:
f(u,v) <= c(u,v) para todo u,v N.
simetra oblicua:
f(u,v) = -f(v,u) para todo u,v N
conservacin de ujo:
Para todo u N - {s,t}
v N f(u,v) = 0

Definicin: Problema Flujo Mximo

El valor de un ujo | f | se dene como


| f | = v N f(s,v) = v N f(v,t)

Dada una red de ujo G, el Problema de


Flujo Mximo consiste en encontrar el ujo
de mximo valor que admite G

Repaso

Mtodo de Ford-Fulkerson
Es un mtodo general, no un algoritmo
especfico.
Se basa en 3 conceptos claves:
redes residuales
caminos de aumento
cortes

Mtodo de Ford-Fulkerson
El mtodo comienza con una red de flujo vaca.
En cada iteracin se busca un camino de
aumento en la red residual para incrementar el
valor del flujo.
Se puede demostrar mediante el teorema de
max-flow min-cut que, cuando termina, el flujo
obtenido es mximo

Redes residuales
Intuitivamente, la red residual es una nueva red
de flujo que representa cmo podemos
cambiar el flujo.
Formalmente, la red residual de G = <N,A> es
Gf = <N,Af>, donde las capacidades de los
arcos estn dadas por:
cf(u,v) = c(u,v) - f(u,v)

Caminos de aumento
Como vimos, dada una red de flujo G = <N,A>
y un flujo f, podemos obtener una red residual
Gf
Un camino de aumento es, sencillamente, un
camino simple de s a t en la red residual.
Si existe un camino de aumento en la red
residual, el flujo puede aumentarse a lo largo
de dicho camino con un valor igual a la menor
capacidad de los arcos del camino.

Aumento de flujo

Cortes
Dada una red de flujo G = <N,A>. Un corte es
una particin de N en S y T = N-S tal que s S
y t T.
Dado un corte (S,T).
El flujo neto a travs del corte es:
f(S,T) = u S v T f(u,v) - u S v T f(v,u)
Y la capacidad del corte es:
c(S,T) = u S v T c(u,v)

Cortes

Teorema max-flow min-cut


Los 3 siguientes condiciones son equivalentes:
1. f es un flujo mximo
2. La red residual Gf no contiene caminos de aumentos
3. | f | = c(S,T) para algn corte (S,T) de G

Este teorema prueba que el mtodo de FordFulkerson es correcto.

Max-flow min-cut: Demostracin


1 => 2
Si el flujo es mximo entonces no pueden
existir caminos de aumento. De otro modo,
sera posible aumentar el valor del flujo
2 => 3
Si no existen caminos de aumento en la red
residual, s y t estn desconectados. Por lo
tanto si S es el conjunto de los nodos
alcanzables desde s y T = N - S. El corte (S,T)
est saturado

Max-flow min-cut: Demostracin


3 => 1
Se puede observar que todo flujo tiene un valor
menor o igual que la capacidad de cualquier
corte. Es decir, todo corte implica una cota
superior al valor de un flujo vlido.
Si el flujo satura algn corte (S,T), esto quiere
decir que el flujo tiene el mximo valor posible.
Adems, el corte (S,T) es el corte de capacidad
mnima (o min-cut) de la red de flujo.

Ford-Fulkerson: Pseudo-cdigo
FORD-FULKERSON(G, s, t):
para cada arco (u,v) G.E:
(u,v).f = 0
mientras exista camino de aumento p en Gf:
cf(p) = min {cf(u,v) : (u,v) P}
para cada arco (u,v) p:
(u,v).f += cf(p)
(v,u).f -= cf(p)

Algoritmo de Edmonds-Karp

Algoritmo de Edmonds-Karp
Como se vi en la figura anterior, si no elegimos los
caminos de aumento de manera inteligente el tiempo de
ejecucin puede no estar acotado polinomialmente sobre el
tamao de la entrada.
Afortunadamente, si buscamos el camino de aumento ms
corto con un BFS, se puede demostrar una cota polinomial:
O(m2n)
Esta implementacin de Ford-Fulkerson recibe el nombre
de algoritmo de Edmonds-Karp

Problemas
Hooligans - Regional Latinoamrica 2009
goo.gl/3EoOPO
Dado un torneo entre N <= 40 equipos, dnde
juegan todos contra todos durante M <= 4
rondas y algunos partidos ya jugados. Donde
en cada partido se reparten 2 puntos (2 para el
ganador, 1 si hay empate y 0 para el perdedor).
Determinar si un cierto equipo puede salir
campen.

Problemas
Optimal Marks - SPOJ
goo.gl/X4fX5Q
Dado un grafo no dirigido donde algunos nodos
tienen asignado un nmero de 31 bits. La tarea
es asignar nmeros al resto de los nodos de
manera que la suma de los xor de nodos
adyacentes sea mnima. O sea, para todo (u,v)
G, minimizar (u,v) marca(u) ^ marca(v)

Bipartite Matching
Existen problemas combinatorios que, en
principio, parecen no guardar relacin con el
problema de Flujo Mximo pero que pueden
ser reducidos a ste.
Uno de los ejemplos ms conocidos es el
problema del matching bipartito.

Bipartite Matching
Dado un grafo G = <N,A>, un matching es un
subconjunto M A tal que para todo vrtice
v M existe a lo sumo un arco de M incidente
a v.
Se puede pensar como un "apareamiento" de
los nodos, en los que cada nodo se aparea con
a lo sumo un nodo, y la relacin es simtrica.

Bipartite Matching
El problema de Maximum Matching consiste en
encontrar un matching vlido de mxima
cardinalidad en un grafo.
Este problema resulta ms sencillo para una
clase restringida de grafos llamados grafos
bipartitos.

Grafo bipartito
Un grafo bipartito es un grafo G = <N,A> donde
el conjunto de nodos N puede ser particionado
en 2 conjuntos N = L R donde L y R son
disjuntos y los arcos unen nodos entre L y R.
El problema de hallar un matching mximo en
un grafo bipartito se conoce como maximum
bipartite matching.

Maximum bipartite matching


Este problema puede reducirse a un problema
de flujo mximo.
Para ello, construimos una red de flujo donde
se agregan 2 nodos: un source s y un sink t.
Se agrega un arco de capacidad 1 entre el
source y cada nodo de L y se agrega un arco
de capacidad 1 entre cada nodo de R y el sink.

Maximum bipartite matching

Problemas
Rook Attack - Topcoder. TCO Semifinal R4
http://goo.gl/Aoe4gW
Dado un tablero de ajedrez de m x n (1 <= m,n
<= 300) donde algunas casillas fueron
eliminadas (o prohibidas). Determinar cul es
la mxima cantidad de torres que se pueden
colocar de manera que no existan 2 que se
amenacen.

Problemas
Stock Charts - Google Code Jam R2 (2009)
goo.gl/lpVuZN
Dados varios charts, representados como
polilneas. Dos charts se pueden combinar en
una sola hoja si no se intersectan. Determinar
la mnima cantidad de hojas necesarias para
dibujar todos los charts.

Ms problemas!
Inspection: goo.gl/iYho0F
Super Watch: goo.gl/Y1h5zY

Oil Company: goo.gl/XW3jSp


Shogui Tournament: goo.gl/KRz3Yi
Graduation: goo.gl/hnCwOU
Parking: goo.gl/21ZJqC
"Shortest" pair of paths: goo.gl/ardYaY
Angels and Devils: goo.gl/sCkd30

Cdigo fuente
Para los problemas dados pueden utilizar el
cdigo fuente en el siguiente repositorio:
https://github.com/nicalvarez/flujo
Hay implementaciones de:
Bipartite Matching (DFS)
Edmonds-Karp
Dinic

Preflow-push

Bibliografa
Thomas H. Cormen, Charles E. Leiserson, Ronald L.
Rivest. Introduction to Algorithms 3ed. Captulo 26

Ravindra K. Ahuja, Thomas L. Magnanti, and James B.


Orlin. Network Flows: Theory, Algorithms, and
Applications

Topcoder Tutorials:
Max flow: goo.gl/luDODH
Min-cost max-flow: goo.gl/XfRWjS

Preguntas?

También podría gustarte