Professional Documents
Culture Documents
Penessi Cecilia
11 de noviembre de 2016
Resumen
Sea G = (V, E) un grafo no dirigido. Un matching en G es un subconjunto de aristas M ⊆ E
que no comparten vértices. Presentado este concepto, un conocido problema es el de encontrar un
matching que tenga tantas aristas como sea posible, es decir, un matching máximo. Éste problema
atrajo el interés de investigadores durante las últimas décadas, por tener un atractivo intuitivo y
diversas aplicaciones.
Nuestro objetivo es presentar y analizar un algoritmo muy interesante para el problema de
matching. Trabajaremos con grafos bipartitos porque, al ser considerablemente más simples en su
estructura, nos ayudarán a ilustrar las ideas básicas implicadas en resolver el problema general.
1. El problema de Matching
Comenzaremos introduciendo algunos conceptos básicos y estudiando ciertas propiedades de los
mismos.
Definición 1. Un grafo dirigido o digrafo es un par G = (V, A) en el cual V es un conjunto no vacı́o
y A ⊆ V × V . Los elementos en V se denominan nodos o vértices de G y los elementos en E se
denominan arcos de G.
Un grafo o grafo no dirigido es un par G = (V, E) en el cual V 6= ∅ y E ⊆ {{x, y} : x, y ∈ V }. Los
elementos en V se denominan nodos o vértices de G y los elementos en E se denominan aristas de G.
Definición 2. Un matching M de un grafo G = (V, E) es un subconjunto de E con la propiedad de
que no haya dos aristas en M que compartan un mismo vértice.
|V |
Observación 1. Un matching de un grafo G = (V, E) no puede tener más de 2 aristas.
Definición 3. Un matching M se dice:
1. máximo cuando tiene máximo cardinal entre todos los matchings de G.
2. maximal si no existe M 0 matching tal que M ⊂ M 0 y M 6= M 0 .
3. perfecto cuando su cardinal es b |V2 | c, es decir, el más grande posible en un grafo con |V | vértices.
Observación 2. Todo matching máximo es maximal, pero no todo matching maximal es máximo.
Observación 3. Todo matching perfecto es máximo y, consecuentemente, maximal.
Ejemplo 1. Si consideramos el siguiente grafo
1
podemos observar que:
|V |
M1 = {{v1 , v4 } , {v2 , v3 } , {v5 , v7 } , {v6 , v8 }} es un matching perfecto |M1 | = 4 = 2 y, por lo
tanto, es máximo y maximal.
M2 = {{v1 , v2 } , {v4 , v5 } , {v6 , v7 }} es un matching maximal que no es máximo pues |M2 | < |M1 |.
Definición 4. Dado un grafo G = (V, E), el problema de matching es encontrar un matching máximo.
4. aquellos vértices que no son incidentes en ninguna arista saturada por M se dicen expuestos, los
demás se dicen matcheados o saturados por M .
Definición 7. Un camino M − alternante P = {v1 , ..., vk } se dice M − aumentante si {v1 } y {vk } son
vértices expuestos.
2
Ejemplo 3. En el grafo presentado en el Ejemplo 1, Pe = {v2 , v5 , v4 , v6 , v7 , v8 } es un camino M −
aumentante.
Demostración: Primero mostraremos que M ∆P es un matching, esto es, no hay dos aristas en
M ∆P que compartan un mismo vértice.
Supongamos, por el absurdo, que existen dos aristas e, e0 en M ∆P incidentes en un mismo vértice.
Como M ∆P = (M ∪ P ) − (M ∩ P ) = (M \ P ) ∪ (P \ M ), tenemos tres casos posibles:
1. e, e0 ∈ M \ P
2. e, e0 ∈ P \ M
3. e ∈ M \ P, e0 ∈ P \ M
En el caso 1, e, e0 ∈ M . Luego, existen al menos dos aristas en M compartiendo un mismo vértice.
Esto es una contradicción, pues M es matching por hipótesis.
Observemos que las aristas que se encuentran en el conjunto P \ M son de la forma {v2j−1 , v2j }.
Luego, no puede haber dos de ellas incidentes en un mismo vértice. Por lo tanto, el caso 2 tampoco
puede suceder.
Por último, si sucediera el caso 3, supongamos sin pérdida de generalidad que la arista e0 =
{v2j−1 , v2j } ∈ P \ M comparte el vértice v2j con e ∈ M \ P .
Además, observemos que v2j es un vértice de la arista e00 = {v2j , v2j+1 } ∈ M y luego, e y e0 son dos
aristas en M con un vértice en común. Esto es una contradicción, pues M es matching por hipótesis.
Por lo tanto, M 0 es un matching.
Ahora, analicemos |M 0 |.
P contiene 2k − 1 aristas, de las cuales k son libres ({v1 , v2 } , {v3 , v4 } , . . . , {v2k−1 , v2k }) y k − 1 son
saturadas. Luego, M 0 = M ∆P tiene |M | + 1 aristas.
Por lo tanto, dado un matching M y un camino M −aumentante, este nos servirá para conseguir
un matching de mayor cardinal.
Ejemplo 4. El camino M − aumentante Pe del Ejemplo 3 puede ser usado para conseguir el matching
M 0 = M ∆P = {{v1 , v3 } , {v2 , v5 } , {v4 , v6 } , {v7 , v8 }}.
3
|V |
Como |M 0 | = 5 = 2 , M 0 es matching máximo. Luego, no tiene sentido buscar caminos M 0 −
aumentantes en G.
El siguiente teorema constituye una caracterización de los matchings máximos.
Teorema 1. (Berge) Un matching M en un grafo G es máximo si y sólo si no existen caminos M −
aumentantes en G.
Demostración:
1. Supongamos que M es un matching máximo y que, además, existe un camino M − aumentante
en G. Luego, por el Lema anterior, existirá un matching de cardinal |M | + 1 en G. Esto es una
contradicción, pues M es matching máximo por hipótesis.
4
consideremos el matching M = {{v1 , u2 } , {v3 , u1 } , {v4 , u3 } , {v5 , u5 }}.
Si miramos hacia atrás en la construcción de caminos alternantes, podemos notar que tiene una
estructura especial: las búsquedas desde niveles impares (v2 está en el nivel cero ) son triviales, pues
siempre el vértice siguiente es el compañero del vértice actual.
5
Luego, podemos simplificar esta técnica de búsqueda ignorando dichos niveles, es decir, dirigiéndo-
nos directamente de vértices externos a nuevos vértices externos. Esto corresponde a buscar un digrafo
auxiliar (V, A), donde (vi , vj ) ∈ A si y sólo si vj puede ser el vértice externo siguiente a vi en un camino
aumentante, esto es, vi es adyacente al compañero de vj .
En nuestro ejemplo:
El arreglo mate, el cual nos indica los pares de vértices que son compañeros entre sı́ en el
matching construı́do hasta el momento, es decir, las aristas que pertenecen al mismo. Luego,
este tiene |V | + |U | entradas, donde V ∪ U son los vértices del grafo bipartito G = (V, U, E).
El arreglo expuesto, el cual nos indica si hallamos un camino aumentante, pues para v ∈ V ,
expuesto [v] = u si u es un vértice expuesto en U , adyacente a v (es decir, la arista {v, u} es
libre). Si tal vértice no existe, expuesto [v] = 0 (no podemos construir un camino aumentante a
partir de v).
Además, cuenta con otro arreglo que se utiliza para la búsqueda de un matching máximo, el arreglo
etiqueta. Si etiqueta [v] = 0 para algún v ∈ V , hemos encontrado una arista incidente en v que puede
ser agregada al matching actual. En cambio, si etiqueta [v] 6= 0, hallamos un camino aumentante
que, como ya hemos visto, puede ser utilizado para reemplazar al matching actual por otro de mayor
cardinal.
Por último, posee un procedimiento llamado aumento, el cual es el encargado de conseguir, recur-
sivamente, matchings cada vez más grandes, en el sentido de su cardinal. Si etiqueta [v] = 0, agrega
una nueva arista al matching (la arista {v, expuesto [v]}). En caso contrario, reemplaza al matching
actual utilizando el camino aumentante encontrado.
Veamos esto más claramente con el ejemplo presentado anteriormente.
Allı́, primero llamemos al procedimiento aumento(v3 ); expuesto [v3 ] = u4 entonces este cam-
biará {v3 , u1 } por {v3 , u4 }.
Luego, llamemos a aumento(v1 ) y este cambiará {v1 , u2 } por {v1 , u1 }.
Ahora, llamemos a aumento(v2 ) y será etiqueta [v2 ] = 0.
Por lo tanto, el procedimiento aumento agrega {v2 , u2 } y termina, pues hemos encontrado un
camino aumentante y, consecuentemente para este ejemplo, un matching máximo.
6
Teorema 2. El algoritmo para matching en un grafo “bipartito” G = (V, U, E) presentado, resuelve
correctamente el problema de matching en tiempo O(mı́n(|V | , |U |) × |E|).
Demostración: Observemos que el algoritmo termina si no hay caminos en el grafo auxiliar desde
un nodo expuesto de V a un vértice etiquetado. Luego, por la construcción del mismo, termina si no
existe camino aumentante en G y ası́, el presente matching es máximo.
Para analizar el tiempo destinado, observemos que un matching en G no puede poseer más de
mı́n(|V | , |U |) aristas. Luego, como cada aumento incrementa el cardinal de M en 1, tendremos a lo
sumo mı́n(|V | , |U |) pasos. A su vez, en cada uno de estos pasos debemos considerar |E| aristas. Por
lo tanto, el presente algoritmo requerirá un tiempo del orden de O(mı́n(|V | , |U |) × |E|).
Por último, veremos un ejemplo donde aplicaremos el algoritmo presentado al grafo bipartito
G = (V, U, E) que se muestra en la figura:
∀ v ∈ V ∪ U , mate [v] := 0;
1. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
mate [u] = 0 ∀ u ∈ U entonces expuesto [v1 ] := u1 , expuesto [v3 ] := u2 , expuesto [v4 ] := u3 ,
expuesto [v2 ] := u4 , expuesto [v5 ] := u3 ;
Q := ∅;
mate [v] = 0 ∀ v ∈ V entonces Q := V y etiqueta [v] := 0 ∀ v ∈ V ;
Q 6= ∅ y v1 ∈ Q entonces Q := {{v2 } , {v3 } , {v4 } , {v5 }};
expuesto [v1 ] 6= 0 entonces aplicamos aumento (v1 ) y volvemos a etapa
etiqueta [v1 ] = 0 entonces mate [v1 ] := u1 , mate [u1 ] := v1 ;
7
2. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
mate [u] = 0 ∀ u ∈ U \{u1 } entonces expuesto [v1 ] := u3 , expuesto [vu ] := u4 , expuesto [v3 ] := u2 ,
expuesto [v4 ] := u3 , expuesto [v5 ] := u3 ;
Q := ∅;
mate [v] = 0 ∀ v ∈ V \ {v1 } entonces Q := V \ {v1 } y etiqueta [v] := 0 ∀ v ∈ V \ {v1 };
Q 6= ∅ y v2 ∈ Q entonces Q := {v3 , v4 , v5 };
expuesto [v2 ] 6= 0 entonces aplicamos aumento (v2 ) y volvemos a etapa
etiqueta [v2 ] = 0 entonces mate [v2 ] := u4 , mate [u4 ] := v2 ;
3. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
mate [u] = 0 ∀ u ∈ {u2 , u3 , u5 } entonces expuesto [v1 ] := u3 , expuesto [v2 ] := u5 , expuesto [v3 ] :=
u2 , expuesto [v4 ] := u3 , expuesto [v5 ] := u3 y {v4 , u4 } ∈ E, mate [u4 ] 6= 0 y mate [u4 ] 6= v4
entonces A := {(v4 , v2 )};
Q := ∅;
mate [v] = 0 ∀ v ∈ {v3 , v4 , v5 } entonces Q := {v3 , v4 , v5 } y etiqueta [v] := 0 ∀ v ∈ {v3 , v4 , v5 };
Q 6= ∅ y v3 ∈ Q entonces Q := {v4 , v5 };
expuesto [v3 ] 6= 0 entonces aplicamos aumento (v3 ) y volvemos a etapa
etiqueta [v3 ] = 0 entonces mate [v3 ] := u2 , mate [u2 ] := v3 ;
4. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
mate [u] = 0 ∀ u ∈ {u3 , u5 } entonces expuesto [v1 ] := u3 , expuesto [v2 ] := u5 , expuesto [v3 ] := u3 ,
expuesto [v4 ] := u3 , expuesto [v5 ] := u3 ;
Q := ∅;
mate [v] = 0 ∀ v ∈ {v4 , v5 } entonces Q := {v4 , v5 } y etiqueta [v] := 0 ∀ v ∈ {v4 , v5 };
Q 6= ∅ y v4 ∈ Q entonces Q := {v5 };
expuesto [v4 ] 6= 0 entonces aplicamos aumento (v4 ) y volvemos a etapa
etiqueta [v4 ] = 0 entonces mate [v4 ] := u3 , mate [u3 ] := v4 ;
8
5. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
mate [u5 ] = 0 entonces expuesto [v2 ] := u5 y {v1 , u3 } , {v3 , u3 } , {v4 , u4 } , {v5 , u3 } ∈ E, mate [u] 6=
0 ∀ u ∈ U \{u5 } y mate [u3 ] := v4 , mate [u4 ] := v2 entonces A := {(v1 , v4 ) , (v3 , v4 ) , (v4 , v2 ) , (v5 , v4 )};
Q := ∅;
mate [v5 ] = 0 entonces Q := {v5 } y etiqueta [v5 ] := 0;
Q 6= ∅ y v5 ∈ Q entonces Q := ∅;
expuesto [v5 ] = 0 entonces etiqueta [v2 ] := v4 , etiqueta [v4 ] := v5 y Q := {v2 , v4 };
Q 6= ∅ y v2 ∈ Q entonces Q := {v4 };
expuesto [v2 ] 6= 0 entonces aplicamos aumento (v2 ) y volvemos a etapa
etiqueta [v2 ] 6= 0 entonces expuesto [v4 ] := u4 , mate [v2 ] := u5 , mate [u5 ] := v2 y aplicamos
aumento (v4 );
etiqueta [v4 ] 6= 0 entonces expuesto [v5 ] := u3 , mate [v4 ] := u4 , mate [u4 ] := v4 y aplicamos
aumento (v5 );
etiqueta [v5 ] = 0 entonces mate [v5 ] := u3 , mate [u3 ] := v5 ;
6. ∀ v ∈ V , expuesto [v] := 0;
A := ∅;
{v1 , u3 } , {v3 , u3 } , {v2 , u4 } ∈ E, mate [u] 6= 0 ∀ u ∈ U y mate [u3 ] := v4 , mate [u4 ] := v2 entonces
A := {(v1 , v5 ) , (v3 , v5 ) , (v2 , v4 )};
Q := ∅;
mate [v] 6= 0 ∀ v ∈ V entonces finalizó la aplicación del algoritmo
En el grafo auxiliar obtenido se puede observar que no existen caminos desde un nodo expuesto
de V a un vértice etiquetado.
9
Luego, conseguimos un matching máximo M = {{v1 , u1 } , {v2 , u5 } , {v3 , u2 } , {v4 , u4 } , {v5 , u3 }}
en G, con |M | = 5 = |V ∪U |
2 . Por lo tanto, además, M es perfecto.
Referencias
[1] Grimaldi R., Matemáticas Discreta y Combinatoria, una introducción con aplicaciones, 3ra ed.
Pearson Educación, 1998.
[2] Papadimitriou C., Steiglitz K., Combinatorial Optimization: Algorithms and Complexity. Prentice
Hall, 1982.
[3] West D., Introduction to Graph Theory, 2nd ed. Prentice Hall, 2001.
10
APÉNDICE: ALGORITMO PARA MATCHING EN UN GRAFO “BIPARTITO”
Q:= ;
para todo v V, si mate[v]= 0 entonces Q:= Q {v} y etiqueta[v]:= 0;
mientras Q
inicializar
sea v un nodo en Q;
remover v de Q;
fin
fin
fin
procedimiento aumento(v)
si etiqueta[v]= 0 entonces mate[v]:= expuesto[v],
mate[expuesto[v]]:= v;
sino inicializar
expuesto[etiqueta[v]]:= mate[v];
mate[v]:= expuesto[v];
mate[expuesto[v]]:= v;
aumento(etiqueta[v]);
fin
11