Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ramiro Torres
Semestre 2023-A
2
Índice general
3
4 ÍNDICE GENERAL
6. Emparejamiento 117
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.2. Emparejamiento sobre grafos bipartitos . . . . . . . . . . . . . 118
6.2.1. Formulación lineal entera . . . . . . . . . . . . . . . . . 121
6.3. Emparejamiento de cardinalidad máxima . . . . . . . . . . . . 124
Bibliografı́a
4. Ahuja, R., Magnanti, T., Orlin J. (1993) Network Flows: Theory, Al-
gorithms and Applications. New York: Prentice Hall.
5
6 ÍNDICE GENERAL
Capı́tulo 1
Conceptos y definiciones
básicas
1.1. Grafos
Definición 1 (Grafo no dirigido) Un grafo no dirigido G es un par or-
denado G = (V, E), compuesto por un conjunto finito V = {v1 , . . . , vn } lla-
mados vértices o nodos, y un multi-conjunto E = {{vi , vj } : vi , vj ∈ V } de
pares desordenados de V , conocidos como aristas.
7
8 CAPÍTULO 1. CONCEPTOS Y DEFINICIONES BÁSICAS
1 2
1
1 2
2 3 3 4
b
G H
1 4
c
1 3
j es el sucesor de i en a
i es el predecesor de j en a
(1,2) (2,2)
1 2
(1,3) (1,3)
3 4
Análogamente,
al conjunto de arcos que llegan al nodo i se nota δ− (i) :=
(j, i) ∈ A y al conjunto de arcos salientes del nodo i como δ + (i) := (i, j) ∈
A . La cardinalidad de estos conjuntos define el grado entrante δ − (i) y el
grado saliente δ + (i) del nodo i ∈ V y el grado del nodo es δ − (i) + δ + (i) .
Un nodo con grado igual a cero es un nodo aislado. Si el grado de cada nodo
del grafo es igual a k, entonces el grafo es llamado k-regular.
2 3 a d
1 2 1 2
5 5
3 4 3 4
L1 = {2, 3},
L2 = {4, 5},
L3 = {4},
L4 = {5},
L5 = ∅.
(A, I)z ′ = Bz = b
donde los elementos de V son distintos. Los nodos vi y vk son unidos por el
camino P y son llamados nodos extremos y vi+1 , . . . , vk−1 los nodos internos
de P . El número de aristas en el camino es la longitud del mismo. A menudo
nos referiremos a un camino como una secuencia de nodos representada por
P = vi , vi+1 , . . . , vk o como una sucesión finita y alternada de nodos y aristas
P = vi , ei , vi+1 , ei+1 . . . , ek−1 , vk que va desde vi hasta vk . Para dos nodos v y
w se define dist(v, w) como la longitud más corta de v a w (vw-camino). Si
no existe un vw−camino diremos que w no es alcanzable desde v y se tiene
dist(v, w) = +∞. En el caso no dirigido se tiene dist(v, w) = dist(w, v),
mientras que en la versión dirigida dicha igualdad no siempre se tiene.
Si P = vi , vi+1 , . . . , vk es un camino de longitud mayor igual a 2, entonces
el grafo C = P ∪ {vi , vk } es un ciclo o circuito.
v0 v1 v2 v3 vk−1
vk
a) G es un árbol.
Demostración:
Los vértices de un grafo acı́clico pueden ser ordenados de una forma es-
pecı́fica:
1.6. Conectividad
Conectividad es un concepto muy importante en la teorı́a de grafos y
su detección es una tarea fundamental. El siguiente algoritmo encuentra un
camino desde un nodo especı́fico s ∈ V a todos los nodos alcanzables en el
grafo. El algoritmo trabajo para grafos dirigidos y no dirigidos.
Dado un grafo G = (V, E) y un nodo fuente s ∈ V , al algoritmo BFS
(Breadth First Search) explora sistemáticamentelas aristas de G y descubre
todos los nodos alcanzables desde s con su respectiva distancia(número de
aristas). Para mantener el progreso del algoritmo, BFS colorea cada nodo de
blanco, gris o negro. Además, el predecesor de cada nodo u ∈ V es almace-
nado en π[u] y la distancia del nodo s a cada nodo u ∈ V es almacenada en
d[u]. Nodos blancos no han sido visitados mientras que grises o negros fueron
visitados en alguna iteración previa, es decir, los nodos inician pintados de
blanco, luego llegan a ser grises y finalmente son pintados de color negro. Si
(u, v) ∈ E y el nodo u es negro, entonces v es gris o negro, es decir, todos los
nodos adyacentes a un nodo negro previamente han sido visitados. Un nodo
gris puede tener algunos nodos adyacentes blancos y el conjunto de todos los
nodos grises representan la frontera entre los nodos visitados y no visitados.
El color es inicializado en blanco, la distancia es fijada en +∞ y la variable
que almacena el predecesor en NULL para todos los nodos v ∈ V \ {s}. Por
otro lado, dist[s] = 0 y π[s] = NULL. Además, el algoritmo usa una cola Q
para manejar el conjunto de nodos grises. BFS puede ser escrito de acuerdo
al algoritmo 1.
siguiente resultado.
Proposición 2 El algoritmo BFS puede ser implementado en tiempo O(m+
n)
Demostración: Asumimos que el grafo G = (V, E) es almacenado usando
listas de adyacencia. Ası́, para cada nodo x disponemos de una lista con
las aristas adyacentes (δ(x)) o arcos adyacentes (δ + (x)). En el proceso de
inicialización se actualiza los parámetros de cada uno de los nodos. En el
lazo principal, cuando el final de la lista es alcanzada, el nodo x es removido
de la cola Q y nunca más es insertado de nuevo. Por tanto, el tiempo de
ejecución es proporcional al número de nodos más el número de aristas, es
decir, O(n + m)
⇒ ⇒
Algorithm 3 Euler(G,v)
1: W = {v1 } y x = v1
2: if δ(x) = ∅ then
3: Ir a 8
4: else
5: e = (x, y) ∈ δ(x)
6: end if
7: W = W, e, y, y se actualiza x = y, E = E \ {e}. Ir a 2.
8: Sea v1 , e1 , v2 , e2 , . . . , vk , ek , vk+1 la secuencia W .
9: for i := 1 hasta k do
10: Wi := Euler(G, vi )
11: end for
12: W := W1 , e1 , W2 , e2 , . . . , Wk , ek , vk+1 .
13: Retornar W
Anexo:
Crecimiento de funciones
Definición 12 Sea A un algoritmo el cual acepta entradas de un conjunto
X y sea una función f : X R+ . Si existe constantes α1 , α2 > 0 tal que el
algoritmo A con entrada x ∈ X termina sus operaciones en al menos α1 f (x)
y a lo más α2 f (x) pasos elementales, entonces se dice que A es de orden
Θ(f ).
1.7. GRAFOS EULERIANOS Y BIPARTITOS 27
Resumiendo las definiciones anteriores podemos decir que: Dadas dos fun-
ciones f, g : X R+ decimos que:
f ∈ O(g(n))
f=O(g(n))
f es de orden O(g(n))
f ∈ Ω(g(n)) lo que es equivalente a g(n) = O(f (n))
f=Ω(g(n))
f (x) ≤ Cg(x).
De forma equivalente
f (x)
lı́m sup < ∞.
x→∞ g(x)
28 CAPÍTULO 1. CONCEPTOS Y DEFINICIONES BÁSICAS
Notamos f (x) = Ω g(x) y decimos que f es omega de g si existe ε > 0
tal que para x suficientemente grande
f (x) ≥ εg(x).
Es decir g(x) = O f (x) o también
f (x)
lı́m inf > 0.
x→∞ g(x)
3n2 + n − 5 6n + 1
lı́m 2
= lı́m = 1.
3n 6n
Entonces f (n) ∼ g(n) y esto significa que f crece asintóticamente igual que
g.
Ahora definamos h(n) := n3 . En dicho caso
3n2 + n − 5 3 1 5
lı́m 3
= lı́m + 2 − 3 = 0,
n n n n
por lo tanto f (n) = O(n3 ). Esto significa que f crece asintóticamente no más
rápido que h.
Finalmente, si definimos l(n) = n, tenemos que f y l se igualan si y sólo
si
3n2 + n − 5 = n;
es decir, cuando 3n2 = 5, lo cual no sucede para ningún entero. Es más,
f (n) > l(n) para n > 1, lo cual indica que f (n) = Ω(n) y lo interpretamos
al decir que f crece asintóticamente más rápido que l.
2.1. Introducción
El problema de árboles generadores de peso mı́nimo aparece en 2 artı́culos
de Otakar Boruvka en 1926 propuesto de la siguiente forma:
There are n points given in the plane (in the space) whose mutual dis-
tances are all different. We wish to join them by a net such that
1. Any two points are joined either directly or by means of some points,
29
30 CAPÍTULO 2. ÁRBOLES GENERADORES DE PESO MÍNIMO
P = {x : Ax ≤ b}
máx{cT x : Ax ≤ b, x ≥ 0} o mı́n{cT x : Ax ≥ b, x ≥ 0}
máx{ct x : Ax ≤ b} = mı́n{y T b : y ≥ 0, y T A = cT }
máx{ct x : Ax ≤ b, x ∈ Zn } o mı́n{cT x : Ax ≥ b, x ∈ Zn }
máx{ct x : Ax ≤ b, x ∈ Zn } ≤ máx{ct x : Ax ≤ b, x ∈ Rn }
o en el sentido de minimización
min{cT x : Ax ≥ b, x ∈ Rn } ≤ min{cT x : Ax ≥ b, x ∈ Zn }
máx{cT x : Ax ≤ b, x ∈ Zn } ≤ min{y T b : y ≥ 0, y T A = c, y ∈ Zn }
X
mı́n ce xe
e∈E
s.a.r.
X
xe = n − 1
e∈E
X
xe ≤ |X| − 1, ∀∅ =
6 X ⊂V
e∈E(X)
xe ∈ {0, 1}
es entero. Sus vértices son exactamente el vector de incidencia del árbol ge-
nerador de G. P es llamado el poliedro del árbol generador de G.
Teorema 12 Sea (G, c) una instancia del problema MTS, y sea T un árbol
generador de G. Entonces los siguientes enunciados son equivalentes:
a) T es óptimo.
c) Para toda arista e ∈ E(T ), e es una arista de costo mı́nimo del corte
δ(V (C)), donde C es una componente conexa de E(T ) \ {e}.
2.4. Algoritmos
2.4.1. Algoritmo de Prim
Existen diversos algoritmos exactos para resolver el problema MST. A
continuación expondremos dos de ellos y luego analizaremos su eficiencia. El
2.4. ALGORITMOS 35
primer algoritmo que usaremos se basa en analizar los cortes de una lista de
nodos, seleccionando las aristas de menor costo.
Demostración: La correctitud del algoritmo sigue del literal (c) del teorema
anterior que asegura la optimalidad del árbol generador si para toda arista
e ∈ E(T ), e es una arista de costo mı́nimo del corte δ(V (C)), donde C es
una componente conexa de E(T ) \ {e}.
Para determinar el tiempo de ejecución, tomamos la arista mas barata
de los arcos del corte δ(W ), es decir, seleccionamos la arista e = {v, u} tal
que v ∈ W , u ∈ V \ W y c(e) ≤ c(f ), con f ∈ δ(W ) \ {e}, los que serán
llamados los candidatos. La inicialización de los candidatos toma un tiempo
O(m) ya que en el peor de los casos hay que recorrer todas las aristas. Cada
selección de la arista más barata entre los candidatos toma un tiempo O(n).
La actualización del conjunto de candidatos puede ser realizado escaneando
las aristas incidentes a los vértice que fueron incluidos en el conjunto W , lo
que implica que toma un tiempo de orden O(n). Dado que la instrucción
while ejecuta n − 1 iteraciones, se tiene que el algoritmo es de orden O(n2 ).
1 2
−5 11
3 6
2 8
10 5
7 5 5 7
−4
4
2
−3
8 9
3 6
2
7 5 5 7
8 9
3 6
2
10
7 5 7
−4
4
2
8 9
En este caso, tenemos que la arista con el menor peso es 57, con peso −4.
Ası́, modificamos a F y W :
F = {45, 57} W = {4, 5, 7}.
El nuevo corte de W corresponde a
δ(W ) = {42, 53, 58, 76},
de donde obtenemos la arista de costo mı́nimo 58 con costo 2 y
F = {45, 57, 58} W = {4, 5, 7, 8}.
Continuando con esta operación, la siguiente arista a añadirse será 89,
seguida de 76, 42 y 21; obtenemos
F = {45, 57, 58, 89, 76, 42, 21} W = {4, 5, 7, 8, 9, 6, 2, 1}.
Reordenando W en base al orden de los números naturales, tenemos que
W = {1, 2, 4, 5, 6, 7, 8, 9}, por lo tanto nos falta un nodo adicional. El corte
de W es
δ(W ) = {13, 53},
donde seleccionamos la arista 13. Por lo tanto
F = {45, 57, 58, 89, 76, 42, 21, 13} W = {1, . . . , 9}
y hemos obtenido el siguiente árbol generador de peso mı́nimo:
1 2
−5
3 6
2
5
7 5 5 7
−4
4
2
−3
8 9
1
−5
Arista Peso Arista Peso 3 6
12 −5 45 5 2
57 −4 24 7
89 −3 23 8 5 7
58 2 35 10
4
13 2 36 11
67 5 8 9
Una vez más: La siguiente arista a analizar es 89, la cual al unirse con
F no genera ciclos y F = {12, 57, 89}.
Prosiguiendo de esta forma con 58, 13, 67, 45 y 24, obtendremos que en
ningún caso se forman ciclos y
F = {12, 57, 89, 58, 13, 67, 45, 24};
40 CAPÍTULO 2. ÁRBOLES GENERADORES DE PESO MÍNIMO
F ∪ {23} = {12, 57, 89, 58, 13, 67, 45, 24, 23}
Demostración:
f ) → g) → a) : es trivial.
Para entender estos problemas, podemos presentar que los tres son equi-
valentes. Este resultado es una extensión de la versión no dirigida.
ramificación dado que este serı́a el óptimo y contiene más arcos de R0 que de
R. Por la forma de R0 implica que R′ contiene un ciclo, es decir, R contiene
un camino P de bi al nodo ai . Dado que k ≥ 2, P no esta completamente en
C y sea a el último arco de P que no pertenece a C. Obviamente a = (x, bi−1 )
para algún x ya que P contiene un camino de bi a bi−1 .
Usando la idea del resultado anterior, Edmonds propuso el siguiente al-
goritmo:
3.1. introducción
Supongamos que deseamos determinar la ruta más corta desde su casa
hasta la EPN incluyendo todas las calles y avenidas en la ciudad, es decir,
determinar las calles y las intersecciones (esquinas) que se debe seguir para
llegar al destino. Para lograr este objetivo, podrı́amos asociar un grafo con
la red vial de la ciudad, donde las intersecciones puedes ser representados
por nodos, las calles y avenidas por arcos (dirigidos) y los tiempos de viaje
sobre cada calle como el costo de los arcos. Entonces buscamos encontrar un
camino dirigido sobre el grafo desde un nodo origen hasta un destino tal que
el costo sea el mı́nimo posible.
En comparación con otros problemas de optimización combinatoria, como
el árbol generador de costo mı́nimo, el problema de asignación o el problema
de transporte, el problema del camino más corto inició relativamente tarde.
Esto podrı́a deberse al hecho de que el problema es elemental y relativa-
mente fácil. Sin embargo se pueden encontrar algunos trabajos relacionados
a la búsqueda de caminos (en laberintos) desde 1873 (Wiener [1873], Lucas
[1882]), donde se puede encontrar las bases de la búsqueda en profundidad.
El estudio de problemas asociados a la búsqueda de caminos tomaron
fuerza a inicios de la década de 1950 en el contexto de la ruta alternativa,
es decir, encontrar un segundo camino más corto si el primero se encuentra
bloqueado. Esto apareció debido al enrutamiento de llamadas telefónicas, ya
que en ese momento se automatizaron las llamadas de larga distancia en los
EE. UU. y se debı́a encontrar automáticamente rutas alternativas para las
llamadas telefónicas a través de la red telefónica. Citando a Jacobitti [1955]:
47
48 CAPÍTULO 3. PROBLEMA DE CAMINOS MÁS CORTOS
1959 E.W. Dijkstra, A note on two problems in connexion with graphs, Nu-
merische Mathematik 1 (1959) 269–271.
1956 L.R. Ford, Jr, Network Flow Theory, Paper P-923, The RAND Corpo-
ration, Santa Monica, California, [August 14], 1956.
1873 Chr. Wiener, Ueber eine Aufgabe aus der Geometria situs, Mathema-
tische Annalen 6 (1873) 29–30.
xa ∈ {0, 1}, ∀a ∈ A.
3.3. Algoritmos
El problema más sencillo de resolver resulta al limitamos a dı́grafos con
pesos no negativos o al menos excluyan ciclos de peso negativo.
3.3.1. Dijkstra
A continuación presentamos el primer algoritmo para este problema:
ALGORITMO DE DIJKSTRA
Entrada: Un grafo dirigido D = (V, A) con costos c : A → R+ y un
nodo s ∈ V .
El camino más corto de s a todos los nodos v ∈ V . Más precisamente,
el algoritmo obtiene (c(v), π(v)), ∀v ∈ V , donde c(v) es el costo del
camino más corto de s a v junto con los arcos (π(v), v). Si c(v) = ∞
implica que v no es alcanzable desde s y π(v) no es definido.
3.3. ALGORITMOS 51
Note que si los costos sobre los arcos son iguales a 1, el SPP es resulto usando
el Algoritmo de exploración. Usando esta referencia, podemos extender BFS
y construir un algoritmo que permita resolver el problema SPP. Ası́, reem-
plazando la verificación del color del nodo por una condición de comparación
de costos podemos encontrar un primer algoritmo genérico. Ası́, usando la
notación anterior se tiene el Algoritmo 7.
6
1 3
0 -1
5s 4 3 2 5
1 5
2 4
1
1 5 1 5
2 4 2 4
1 1
(∞,-1) (∞,-1) (1,s) (∞,-1)
3.3. ALGORITMOS 53
(0,s) (6,1) (0,s) (4,2)
6 6
1 3 1 3
0 -1 (∞,-1) (0,-1) 0 -1
(0,-1)
5s 4 5 5s 4 5 (∞,-1)
3 2 3 2
1 5 1 5
2 4 2 4
1 1
(1,s) (∞,-1) (1,s) (2,2)
1 5 1 5
2 4 2 4
1 1
(1,s) (2,2) (1,s) (2,2)
ys = 0.
ci,j ≥ yj − yi ,
2
-3
5s -1
-2
3
Nodo i s 1 2 3 4 5
Potencial yi 0 ∞ ∞ ∞ ∞ ∞
Predecesor pi −1 −1 −1 −1 −1 −1
Arco Costo
(s, 1) 0
6 (s, 2) 1
1 3
0 -1 (1, 2) 4
(1, 3) 6
5s 4 3 2 5
(2, 3) 3
1 5
(2, 4) 1
2 4 (3, 5) −1
1
(4, 3) 2
(4, 5) 5
i s 1 2 3 4 5
yi 0 0 1 ∞ ∞ ∞
pi −1 s s −1 −1 −1
y3 = 0 + 6 p3 = 1,
y3 = 1 + 3 p3 = 2,
y4 = 1 + 1 p4 = 2.
i s 1 2 3 4 5
yi 0 0 1 4 2 ∞
pi −1 s s 4 2 −1
3.3. ALGORITMOS 57
Notemos que con el segundo cambio sobre 3, el arco (1, 3) sı́ satisface la
condición de potencial. Luego, como (4, 3) sı́ satisface la condición de poten-
cial, basta verificar (3, 5) y (4, 5). Si iniciamos corrigiendo (3, 5), tenemos
que y5 = 3 y p5 = 3, de donde (4, 5) ya satisface la condición de potencial:
i s 1 2 3 4 5
yi 0 0 1 4 2 3
pi −1 s s 4 2 3
1 3
0 -1
5s 3 5
1
2 4
1
yvlii = yvli−1
i−1
+ c(vi−1 ,vi ) 1≤i≤k
con un costo del camino resultante igual a:
X X
c(a) = (yvlii − yvli−1
i−1
) = (yvlkk − yvl00 )
a∈P (vi−1 ,vi )∈P
58 CAPÍTULO 3. PROBLEMA DE CAMINOS MÁS CORTOS
Por el lema anterior, los valores finitos de yv son costos de caminos elementales
desde s hasta v. Como el costo de estos caminos es finito, y como los valores
de yv se corrigen posiblemente en cada iteración en la dirección del óptimo,
tenemos que el número de correcciones posible es finito; ası́ el algoritmo
termina. Además, al terminar y es un potencial y p es la ramificación con el
caminos más cortos de s hasta v, cuyos costos coinciden con yv , puesto que
ya no se puede corregir nuevamente a y.
Por el lema 9, el algoritmo obtiene una ramificación que contiene todos
los caminos más cortos desde s hacia los demás nodos alcanzables en D.
A continuación veremos que el Algoritmo de Ford, pese a que puede ser
modificado para detectar circuitos de costo negativo, es ineficiente en térmi-
nos computacionales.
Notemos que esta variación del Algoritmo de Ford nos permite resolver
el problema [SPP] de forma eficiente cuando se presentan valores negativos
en c y se identifica si existen ciclos de costo negativo.
Ahora, si G contiene ciclos de costo negativo, no existe un algoritmo po-
linomial conocido para resolverlo ya que el problema es NP-Completo. El
principal problema se presenta que el criterio de optimalidad no se satisfa-
ce para costos generales. En vista de este hecho es importante preguntarse
como detectar ciclos de costo negativo. El siguiente resultado de Edmonds y
Karp(1972) es muy útil.
Definición 18 Sea D = (V, A) un grafo dirigido con costos c : A → R y sea
γ : V → R. Entonces, para algún arco (x, y) ∈ A se define el costo reducido
de (x, y) con respecto a γ por cγ ((x, y)) = c(x, y) + γ(x) − γ(y). Si cγ (a) ≥ 0
para todo a ∈ A, entonces γ es llamado un potencial factible.
Teorema 18 Sea D = (V, A) un grafo dirigido con costos c : A → R. Existe
un potencial factible de (D, c) si y solo si c es conservativo.
Demostración: Si γ es un potencial factible, para cada circuito C se tiene:
X X X
0≤ cγ (e) = c(e) + γ(x) − γ(y) = c(e),
e∈E[C] e=(x,y)∈E[C] e∈E[C]
ya que c es conservativo.
Por otro lado, si c es conservativo, entonces podemos añadir un nuevo
nodo s y arcos (s, v) con costo igual a cero para todo v ∈ V . Aplicamos el
Algoritmo 10 sobre esta nueva instancia y obtenemos los valores yv para cada
v ∈ V . Dado que yv es el valor del camino más costo entre s y v, entonces se
tiene que yw ≤ yv + c(v, w) para todo arco (v, w) ∈ A. Por tanto, la función
y es un potencial factible.
Corolario 2 Dado un grafo dirigido D = (V, A) con costos sobre los arcos
c : A → R. Podemos encontrar en O(mn) si existe un potencial factible o si
existe un ciclo de costo negativo.
51 3 5
4 6
51 2 4 5 3 6
mientras que todos los arcos en D son eliminados. Ası́, la secuencia ordenada
U determina ≺, por lo tanto hemos encontrado un ordenamiento topológico
y procedemos a utilizar BF-OT:
64 CAPÍTULO 3. PROBLEMA DE CAMINOS MÁS CORTOS
3
4
0
s5 2 5 6 3 1 4
2 7 -10 5 1 3
-5 8
Nodo i s 2 5 6 3 1 4
Potencial yi 0 ∞ ∞ ∞ ∞ ∞ ∞
Predecesor pi −1 −1 −1 −1 −1 −1 −1
Iteraciones
1. Buscamos (i, j) ∈ δ + (s) que verifique yj > yi + ci,j , lo cual ocurre
tanto con (s, 1) como con (s, 2), por lo que asignamos y1 = ys + cs,1 ,
y2 = ys + cs,2 , p1 = s y p2 = s.
i s 2 5 6 3 1 4
yi 0 2 ∞ ∞ ∞ 3 ∞
pi −1 s −1 −1 −1 s −1
2. Continuamos con δ + (2) = (2, 1), (2, 3), (2, 5) , donde obtendremos
que y1 = −3, y3 = 2, y5 = 9, y además p1 = 2, p3 = 2, p5 = 2.
i s 2 5 6 3 1 4
yi 0 2 9 ∞ 2 −3 ∞
pi −1 s 2 −1 2 2 −1
3. Es el turno de δ + (5) = (5, 6) , donde claramente y6 = −1 y p6 = 5.
4. Procedemos a analizar δ + (6) = (6, 3), (6, 4) , donde basta modificar
4:
i s 2 5 6 3 1 4
yi 0 2 9 −1 2 −3 7
pi −1 s 2 5 2 2 6
5. Ahora es turno de δ + (3) = (3, 1), (3, 4) , donde nuevamente modifi-
camos 4.
6. Finalmente, δ + (1) = (1, 4) y se modifica 4 por última vez.
3.5. CAMINO MÁS CORTO ENTRE TODOS LOS NODOS 65
i s 2 5 6 3 1 4
yi 0 2 9 −1 2 −3 0
pi −1 s 2 5 2 2 1
Notemos que de este modo el camino más corto entre s y 4 está dado por
la secuencia
2 −5 3
s−→ 2 −→ 1 −→ 4.
Teorema 19 El problema de todos los caminos más cortos puede ser resuelto
en O(mn + n2 log(n)).
Algorithm 13 Floyd-Warshall
1: lij = c(ij), ∀(i, j) ∈ A
2: lij = +∞, ∀(i, j) 6∈ A con i 6= j
3: lii = 0, ∀i ∈ V
4: πij = i, ∀i, j ∈ V
5: for j = 1 hasta n do
6: for i = 1 hasta n con i 6= j do
7: for k = 1 hasta n con k 6= j do
8: if lik > lij + ljk then
9: lik = lij + ljk
10: πik = πjk
11: end if
12: end for
13: end for
14: end for
4.1. introducción
1954 L. R Ford, D. R Fulkerson, Maximal Flow through a Network, Re-
search Memorandum RM-1400, The RAND Corporation, Santa Moni-
ca, California, [19 November] 1954 [published in Canadian Journal of
Mathematics 8 (1956) 399–404].
69
70 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
2. Lı́mite de capacidades
0 ≤ xij ≤ uij ,
para todo (i, j) ∈ A.
sujeta a
X X
f (j) = xij − xji = 0, ∀i ∈ V \ {s, t},
(i,j)∈δ+ (i) (j,i)∈δ− (i)
δ + (U) = {(v, w) ∈ A : v ∈ U, w ∈ V \ U}
y
δ − (U) = {(v, w) ∈ A : v ∈ V \ U, w ∈ U}
como el conjunto de arcos salientes y entrantes al conjunto U, respectiva-
mente. Si U separa la fuente del sumidero (s ∈ U y t ∈ V \ U), entonces
δ + (U) es llamado el st − corte. La capacidad del st−corte esta definido por:
X
u(δ + (U)) = u(a)
a∈δ+ (U )
En particular , |x| = u(δ + (U)) si y solo si x(δ + (U)) = u(δ − (U)) y x(δ − (U)) =
0
Ahora pasamos a definir el grafo residual de un flujo. Sea R = (V, A, u)
una red capacitada y x : A → R+ un flujo sobre R y definimos el grafo
Dx = (V, Ax ) de la siguiente forma. Para un arco a = (u, w) ∈ A se denota
el correspondiente arco en reversa a = (w, v) y el conjunto A = {a : a ∈ A}.
Para un flujo x con x(a) ≤ u(a), se define los arcos residuales como:
1
10x 5x
10 11
s
5 5 5x t
11 10
5x 10x
2
(s,2), (1, t) ∈ A
Arco Capacidad
(s, 2) 6
(1, t) 6
(1, s) 10
(2, s) 5
(2, 1) 5
(t, 1) 5
(t, 2) 10
74 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
1 6
10
5
s5 6 5 t
10
5 2
3
5s 1x 1x 7 t
5
2 4
1x
3 1x′
5s 1x′ 7 t
5
2 4 1x′
1x′
Algorithm 14 FF(R,s,t)
1: Entrada: R = (V, A, u) una red capacitada y dos nodos s, t ∈ V .
2: Salida: Flujo máximo x ∈ RA sobre la red R.
3: Asignar el valor xa = 0 a cada arco a ∈ A.
4: while exista una camino aumentante P en Dx , do
5: Calcular ux (P ) = mı́na∈P {u(a)}.
6: Actualizar
x aumentando ux (P ) unidades de flujo en P
x(a) + ux (P ), si a ∈ P
xa = x(a) − ux (P ), si a ∈ P
x(a), otro caso.
7: end while
1 6
10
5
s5 6 5 t
10
5 2
Notemos que p nos indica el orden de las conexiones entre los nodos de
P , ası́ hemos obtenido el camino s, 2, 1, t en G(x) que corresponde al camino
P : s, 2, 1, t en R, la cual es aumentante. Usando la observación anterior,
la capacidad de este camino es ux (P ) = u2,1 = 5, por lo que es x – aumen-
tante y podemos ingresarla dentro de la iteración del Algoritmo 14, de donde
obtenemos el flujo actualizado:
2. La red residual del nuevo flujo – (s, t) no posee más caminos desde s
hacia t. Notemos que el arco (2, 1) no está incluido en el grafo residual,
solo consta su antiparalela (1, 2). Esta es la única diferencia con la red
residual anterior.
Ası́ concluimos que no hay caminos aumentantes en R, por ello el flujo actual
es máximo.
4.5. ALGORITMO DE FORD – FULKERSON 79
1 Arco Capacidad
(s, 1) v
r
v v (s, 3) v
2
v
(s, 4) v
a1 √
1
s5 1 t 5−1
v a2 2
3 a3 1
v 1 v (1, t) v
(2, t) v
4 (4, t) v
Notamos tres arcos especiales a1 = (3, 4), a2 = (1, 2) y a3 = (3, 2), los cuales
tienen capacidad 1, r y 1, respectivamente.
√ El valor de r es tomado a modo
que r 2 = r − 1, es decir r = 5−12
. Adicionalmente, el valor de v es mayor o
igual que 2. Notemos que el valor del flujo máximo es 2v + 1.
Aplicamos el algoritmo de Ford – Fulkerson comenzando con el flujo nulo
x = 0A . En dicho caso las capacidades residuales de los arcos especiales
corresponden a su capacidad original. Utilizando el algoritmo de marcaje,
podemos seleccionar tres arcos iniciales para cadenas diferentes entre s y t.
Eligiendo la cadena P0 : s, 3, 2, t, tenemos que a3 se satura y se envı́a una
unidad de flujo. Ası́ el flujo residual de los arcos especiales viene a ser 1, r
y 0, respectivamente.
Ahora definamos las cadenas P1 : s 1 2 3 4 t , P2 : s 3 2 1 t y P3 : s 4 3 2 t ,
las cuales se encuentran dentro del grafo residual. Presentamos una figura
con estas cadenas a continuación:
1
Uri Zwick(1999)The smallest networks on which the Ford-Fulkerson maximum flow
procedure may fail to terminate. Theoretical Computer Science. Volume 148, Issue 1, Pages
165-170.
80 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
P1 P2 P3
a1 a2 a3
0 — 0 r0 r1 r0
1 P0 r0 r0 r1 0
2 P1 r1 r2 0 r1
3 P2 r1 r2 r1 0
4 P1 r2 0 r3 r2
5 P3 r2 r2 r3 0
Arco Capacidad
(s, 1) 15
15 (s, 2) 5
1 3
15 5 (1, 3) 15
(1, 4) 5
5s 10 t
10 5 (2, 1) 10
5 15
(2, 3) 10
2 4 (2, 4) 15
15
(3, t) 5
(4, t) 15
0 {s} ∅
1 {1, 2} {s}
2 {1, 3, 4} {s, 2}
3 {1, 4, t} {s, 2, 3}
4 ∅ {s, 2, 3, t}
↑
xa + ε(P ) si a ∈ P ,
xa = xa − ε(P ) si a ∈ P ↓ ,
xa si a ∈
/ P.
Los arcos (s, 2) y (3, t) están saturados, por lo cual solo el (2, 3) se incluye
en reversa en la red residual:
Arco Capacidad
(s, 1) 15
(2, s) 5
15 (1, 3) 15
1 3
15 5 5 (1, 4) 5
5s 10 5 5 t (2, 1) 10
(2, 3) 5
5 15
2
15
4 (3, 2) 5
(2, 4) 15
(t, 3) 5
(4, t) 15
0 {s} ∅
1 {1} {s}
2 {4, 3} {s, 1}
3 {3, t} {s, 1, 4}
4 ∅ {s, 1, 4, t}
Arco Capacidad
(s, 1) 10
(1, s) 5
(2, s) 5
15 (1, 3) 15
5 1 3
5 5 (4, 1) 5
10
5s 10 5 5 5 t (2, 1) 10
(2, 3) 5
5 2
15
4 10 (3, 2) 5
(2, 4) 15
(t, 3) 5
(4, t) 10
(t, 4) 5
A este punto es bueno notar que varios arcos ya están saturados. La red
residual es
Arco Capacidad
(s, 1) 5
(1, s) 10
(4, 1) 5
5 (2, s) 5
10 1 10 3 (1, 3) 10
5
5
5
(3, 1) 5
10
5s 10 10
t (2, 1) 10
5 (2, 3) 10
5 2 4
10 5 (2, 4) 10
(4, 2) 5
(t, 3) 5
(4, t) 5
(t, 4) 10
W = {s, 1, 3},
donde los arcos que salen tienen flujo constante 5 en R, y los arcos entrantes
tienen flujo saliente 0. Ası́, concluimos que el flujo actual sobre R es máximo.
Existen varios algoritmos que resuelven el problema en menor tiempo
de ejecución. Dinits(1970) presento una mejora al algoritmo resolviendo el
problema de flujo máximo en O(n2 m) iteraciones.
x(p) ≥ 0, ∀p ∈ P ∪ C.
3: while x 6= 0 do
4: Calcular un camino de transporte de flujo p ∈ P ∪ C, es decir, p =
a1 , . . . , ak con xa1 > 0, . . . , xak > 0
5: Calcular x(p) = mı́n{x(a) : a ∈ p}
6: for a ∈ p do
7: x(a) = x(a) − x(p)
8: end for
9: end while
10: retornar x(p)
x(a) ≤ u(a), ∀a ∈ A
P P
Conservación de flujo a∈δ+ (i) xij = a∈δ− (i) xji , ∀i ∈ V \ {s, t}
15: RELABEL(i)
16: Sea d(i) = mı́n{d(j) + 1 : a = (i, j) ∈ Ax }
17: PUSH(a)
18: Definir ǫ = mı́n{f (i), ux(a)}, donde i es el nodo con a ∈ δ + (i) en Dx
19: aumentar x sobre a en ǫ unidades de flujo.
4.8. ALGORITMO DE GOLDBERG-TARJAN 91
t no es alcanzable desde s
Demostración:
pero v es activo, lo que implica que f (i) > 0 y además debe existir
un nodo j ∈ R con f (j) < 0. Dado que x es un preflujo, este nodo
obligatoriamente debe ser s.
92 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
El último literal del lema anterior nos ayuda a probar el siguiente resul-
tado:
Teorema 25 Cuando el algoritmo termina, x es un st-flujo máximo
Demostración: x es un st-flujo debido a que no existen nodos activos, es
decir, se respeta la conservación de flujo. Por el literal (c) del lema anterior se
tiene que no existe caminos aumentantes, lo que determina que x es máximo.
1 3 4
2 1
3
Figura 4.1: Red R=(V,A,u) y definimos s = 1 y t = 4
(0,0)
2
4 4
(4,0) (0,0)
1 3 4
2 1
3
(0,0)
Se dispone de la primera red residual para el preflujo x = 0 y el etiquetado
de distancias. El par sobre el nodo i representa (d(i), f (i)), es decir, el nodo
2 tiene d(2) = f (2) = 0. Las capacidades residuales son presentadas sobre
cada arco. Luego del proceso de inicialización, se toma el nodo 3 y luego el
nodo 2 como nodos activos y se actualizan las etiquetas. Arcos no admisibles
son identificados con lı́neas punteadas.
.
94 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
(1,4)
2
4 4
(4,-6) (0,0)
1 3 4
2 1
3
(1,2)
Usamos el nodo 3 como nodo activo y el arco (3, 4) como arco admisible. Se
incrementa ǫ = 1 unidad de flujo sobre el arco.
(1,4)
2
4 4
(4,-6) (0,1)
1 3 4
2 1
3
(2,1)
Nuevamente, el nodo 3 es tomado como nodo activo. En este tiempo, no
hay arcos admisibles saliendo de 3, y aplicando Relabel la etiqueta es incre-
mentada a d(3) = 1 + mı́n{1, 4} = 2. De esta forma el arco (3, 2) se vuelve
admisible.
(1,4)
2
4 4
(4,-6) (0,1)
1 3 4
2 1
3
(2,1)
En esta iteración, el nodo 2 es tomado como activo, siendo el único arco
admisible (2, 4). Aplicando push, 4 unidades de flujo son empujadas sobre el
arco.
4.8. ALGORITMO DE GOLDBERG-TARJAN 95
(1,0)
2
4 4
(4,-6) (0,5)
1 3 4
2 1
3
(2,1)
El nodo 3 es seleccionado como activo, entonces una unidad de flujo es em-
pujada sobre el arco admisible (3, 2).
(3,1)
2
4 4
(4,-6) (0,5)
1 2 1 4
2 1
3
(2,0)
En la siguiente iteración, el único nodo activo es 2. No existen arcos admi-
sibles lo que causa una operación de re-etiquetado del nodo 2 de la forma
d(2) = 1 + mı́n{4, 2} = 3. El arco (2, 3) ahora es admisible y una unidad de
flujo es empujada sobre este arco.
(3,0)
2
4 4
(4,-6) (0,5)
1 3 4
2 1
3
(2,1)
El único nodo activo es 3, y su etiqueta es incrementada d(3) = 1 +
mı́n{3, 4} = 4. El arco (3, 2) es admisible y una unidad de flujo es empu-
jada por dicho arco.
96 CAPÍTULO 4. PROBLEMA DE FLUJO MÁXIMO
(5,1)
2
4 4
(4,-6) (0,5)
1 2 1 4
2 1
3
(4,0)
El nodo 2 es seleccionado como nodo activo y aplicando Relabel la etiqueta
es incrementada a d(2) = 1 + mı́n{4, 4} = 5. Ahora una unidad es empujada
por el arco (2, 1).
1 (5,0)
2
3 4
(4,-5) (0,5)
1 2 1 4
2 1
3
(4,0)
No existen nodos activos y el algoritmo termina con un flujo máximo. Ası́, el
flujo es determinado:
2
(3,4) (4,4)
1 (1,3) 4
(2,2) (1,1)
3
5.1. Formulación
Iniciamos introduciendo el concepto de un flujo en el que se permiten
varias fuentes y varios sumideros.
97
98 CAPÍTULO 5. PROBLEMAS DE FLUJO DE COSTO MÍNIMO
sea minimizada
X
mı́n c(a)x(a)
a∈A
sujeta a
X X
x(a) − x(a) = b(v), ∀v ∈ V
a∈δ+ (v) a∈δ− (v)
0 ≤ x(a) ≤ u(a), ∀a ∈ A;
= b(v) − b(v)
= 0
Ası́, x tiene costo mı́nimo por el teorema anterior y por tanto no tiene ciclos
de costo negativo.
Por otro lado, usando el teorema anterior podemos asumir que la red
residual no contiene ciclos de costo negativo. Entonces para cada v ∈ V defi-
nimos y(v) como el mı́nimo costo de algún camino dirigido en Dx finalizando
en el nodo v. Es fácil verificar que cada arco a = (v, w) del camino se cumple
que c(a) ≥ y(w) − y(v) finalizando la demostración.
Un potencial factible también puede ser visto como el dual del proble-
ma de flujo de costo mı́nimo. Presentamos una segunda demostración del
corolario (4).
Demostración: El problema de flujo de costo mı́nimo puede ser formu-
lado de la forma(P):
X X
mı́n c(a)x(a) = máx −c(a)x(a)
a∈A a∈A
sujeta a
X X
x(a) − x(a) = b(v), ∀v ∈ V
a∈δ+ (v) a∈δ− (v)
x(a) ≤ u(a), ∀a ∈ A
x(a) ≥ 0, ∀a ∈ A;
El modelo dual puede ser escrito de la siguiente forma (D):
X X
mı́n b(v)y(v) + u(e)z(e)
v∈V e∈E
sujeta a
y(v) − y(w) + z(a) ≥ −c(a), ∀a = (v, w) ∈ A
z(a) ≥ 0, ∀a ∈ A
Sea x ∈ R|A| un b-flujo y una solución factible del modelo primal (P). Por
el teorema de holguras complementarias, x es óptimo si y solo si existe una
solución dual (y, z) que cumplan las ecuaciones:
z(e)(u(e)−x(e)) = 0 y x(e) c(e)+z(e)+y(v)−y(w) = 0 ∀e = (v, w) ∈ A
Por tanto, x es óptimo si y solo si existe un par de vectores (y, z) con:
0 = −z(e) ≤ c(e) + y(v) − y(w), para e = (v, w) ∈ A con x(a) ≤ u(a)
Esto es equivalente a la existencia del vector potencial y(v) tal que c(a) +
y(v) − y(w) ≥ 0 para todos los arcos a = (v, w) en el grafo residual Dx .
Los resultados anteriores nos permiten construir algunos algoritmos para
resolver el problema de flujo de costo mı́nimo.
102 CAPÍTULO 5. PROBLEMAS DE FLUJO DE COSTO MÍNIMO
-5
2 Arco Capacidad Costo Nodo Demanda
5 10 (1, 2) 5 2 1 −5
2 2 (1, 3) 5 2 2 −5
-5 51 5 1 4 6 (2, 4) 10 2 3 4
2 1
(3, 2) 5 1 4 6
5 5 (3, 4) 5 1
3
4
y tiene costo
c⊤ x := 1c1,2 + 6c2,4 + 4c1,3 = 22.
5.4. ALGORITMO DE CANCELACIÓN DE CICLOS DE COSTO MEDIO MÍNIMO103
Demostración:
k ))
haciendo c(A(Ck )) = c(A(C
|A(Ck )|
|A(Ck )| = ςm (Ck )|A(Ck )|. Dado que el sub-
grafo H tiene menos arcos que los 2 ciclos |A(H)| ≤ |A(Ck )| + |A(Ck+1)|
5.4. ALGORITMO DE CANCELACIÓN DE CICLOS DE COSTO MEDIO MÍNIMO105
-2 -6
10
2 4
5 3 10
5 10
-5 1
5 10 5 5 3 6 8
10 5
5 10 5
3 5
10
-5 10
con costo
c⊤ x = 5c1,3 + 10c3,5 + 2c2,4 + 8c4,6 = 236.
Encontramos el grafo residual:
5.5. ALGORITMO DE CAMINOS MÁS CORTOS CONSECUTIVOS 109
Arco Costo
(1, 2) 5
3
(3, 1) −10
2 4 10 (2, 4) 3
5 -3 (4, 2) −3
-10
3
(3, 2) 5
51 5 6
(5, 3) −10
-10 5 (4, 5) 3
3 5 (4, 6) 10
-10
(6, 4) −10
(6, 5) 5
C: 1 2 4 5 3 1,
5 7 8
x: 1−
→2−
→4−
→6
5
4−
→5
5
3−
→ 5,
con costo
c⊤ x = 5c1,2 + 7c2,4 + 8c4,6 + 5c4,5 + 5c3,5 = 191.
Arco Costo
(2, 1) −5
(1, 3) 10
3
2 4 10 (2, 4) 3
-5 -3 (4, 2) −3
-10
(3, 2) 5
1
5 5 -3 6
(3, 5) 10
10 10 5 (5, 3) −10
3 5 (5, 4) −3
-10 (4, 6) 10
(6, 4) −10
(6, 5) 5
Nodo i s 2 3 4 5 6
Potencial yi 0 ∞ ∞ ∞ ∞ ∞
Predecesor pi −1 −1 −1 −1 −1 −1
Iteraciones
i s 2 3 4 5 6
yi 0 ∞ 10 ∞ ∞ ∞
pi −1 −1 0 −1 −1 −1
i s 2 3 4 5 6
yi 0 15 10 ∞ 20 ∞
pi −1 3 0 −1 3 −1
3. En este caso, los arcos a actualizar son (2, 4) y (5, 4), entonces
5.6. FLUJO SOBRE TIEMPO 111
i s 2 3 4 5 6
yi 0 15 10 17 20 ∞
pi −1 3 0 5 3 −1
i s 2 3 4 5 6
yi 0 14 10 17 20 27
pi −1 4 0 5 3 4
puede cambiar en el tiempo y el flujo entrando en cada arco llega al nodo final
luego de un determinado tiempo. En cada tiempo a lo más u(a) unidades de
flujo puede ser enviado por el arco y toma τ (a) unidades de tiempo atravesar
el arco a.
x(a, θ) ≤ u(a)
para todo a ∈ A y θ ∈ R
Encontrar un st-flujo sobre tiempo x tal que |x| = f (t, T ) sea maximi-
zado.
5.6. FLUJO SOBRE TIEMPO 113
Ası́, fácilmente el costo puede ser transformado del caso continuo definido
por:
XX T −1
c(x) = x(a, θ)
a∈A θ=0
V T = {iθ : i ∈ V, θ = 0, 1, . . . , T − 1}
AT = {(iθ , jθ+τ (i,j) ) : (i, j) ∈ A, θ = 0, 1, . . . , T − 1 − τ (i, j)}
2
2 1
1 4 4
3 1
3
Figura 5.1: Red R=(V,A,τ ) con T = 5 y definimos s = 1 y t = 4
5.6. FLUJO SOBRE TIEMPO 115
Emparejamiento
6.1. Introducción
El problema de emparejamiento es uno de los problemas clásicos y más
importantes en la optimización combinatoria. Para este problema, todos los
grafos serán no dirigidos. Un emparejamiento sobre un grafo G = (V, E) es
un conjunto de aristas disjuntas por pares. Ası́, nuestro principal problema
será el siguiente:
117
118 CAPÍTULO 6. EMPAREJAMIENTO
xe ∈ {0, 1}, ∀e ∈ E.
máx cx
s.a.r.
Ax ≤ b
x ∈ {0, 1}|E|
X
máx ce xe
e∈E
s.a.r.
X
xe ≤ 1, ∀v ∈ V
e∈δ(v)
xe ∈ {0, 1}, ∀e ∈ E.
y matricialmente el problema puede ser expresado:
máx cx
s.a.r.
Ax ≤ 1
x ∈ {0, 1}|E|
Sea U ⊆ V se dice un conjunto impar |U| ≥ 3 y |U| impar. Se define una
desigualdad válida llamada restricción de conjunto impar :
X |U|
xe ≤ ⌊ ⌋, U ⊂ V . impar
2
e∈E[U ]
X
máx ce xe
e∈E
s.a.r.
X
xe ≤ 1, ∀v ∈ V
e∈δ(v)
X |U|
xe ≤ ⌊ ⌋, U ⊆V
2
e∈E[U ]
xe ∈ [0, 1], ∀e ∈ E.
124 CAPÍTULO 6. EMPAREJAMIENTO