14.2: Emparejamientos en Gráficas Bipartitas
( \newcommand{\kernel}{\mathrm{null}\,}\)
Recordemos que una gráfica bipartitaG=(V,E) es aquella en la que los vértices se pueden colorear correctamente usando solo dos colores. Está claro que tal coloración luego seV divide en dos conjuntos independientesV1 yV2, y así todos los bordes están entreV1 yV2. Los gráficos bipartitos tienen muchas aplicaciones útiles, particularmente cuando tenemos dos tipos distintos de objetos y una relación que tiene sentido solo entre objetos de distintos tipos. Por ejemplo, supongamos que se tiene un conjunto de trabajadores y un conjunto de trabajos para que los trabajadores hagan. Podemos considerar a los trabajadores como el conjuntoV1 y los trabajos comoV2 y agregar una ventaja de trabajadorw∈V1 a trabajoj∈V2 si y solo siw está calificado para hacerj.
Por ejemplo, la gráfica de la Figura 14.2 es una gráfica bipartita en la que hemos dibujadoV1 en la parte inferior yV2 en la parte superior.

SiG=(V,E) es una gráfica, un conjuntoM⊆E es una coincidencia enG si no hay dos bordes deM compartir un punto final. Siv es un vértice que es el punto final de un borde enM, decimos queM saturav ov está saturado porM. CuandoG es bipartito conV=V1∪V2, una coincidencia es entonces una forma de emparejar vérticesV1 con vértices enV2 para que ningún vértice se empareja con más de otro vértice. Normalmente nos interesa encontrar una coincidencia máxima, que es una coincidencia que contiene el mayor número de aristas posible, y en las gráficas bipartitas solemos fijar los conjuntosV1V2 y buscar una coincidencia máxima deV1 aV2. En nuestro ejemplo de trabajadores y empleos, el problema de emparejamiento se convierte así en tratar de encontrar una asignación de trabajadores a trabajos tales que
i. cada trabajador es asignado a un trabajo para el que está calificado (es decir, hay una ventaja),
ii. a cada trabajador se le asigna como máximo un empleo, y
iii. a cada empleo se le asigna como máximo un trabajador.
Como ejemplo, en la Figura 14.3, los bordes gruesos forman una coincidencia deV1 aV2. Supongamos que eres el encargado de estos trabajadores (en la parte inferior) y debes asignarlos a los trabajos (en la parte superior). ¿De verdad estás haciendo el mejor uso de tus recursos poniendo a trabajar solo a cuatro de seis trabajadores? No hay formas triviales de mejorar el número de trabajadores ocupados, ya que los dos sin responsabilidades en este momento no pueden hacer ninguno de los trabajos que no están asignados. Quizás haya una asignación más eficiente que se pueda hacer rehaciendo algunas de las asignaciones, sin embargo. Si la hay, ¿cómo deberías ir para encontrarla? Si no la hay, ¿cómo le justificarías a tu jefe que no hay mejor asignación de trabajadores a trabajos?

Al final de la sección, veremos brevemente un teorema sobre emparejamientos en gráficas bipartitas que nos dice precisamente cuándo existe una asignación de trabajadores a empleos que asegura que cada trabajador tenga un empleo. Primero, sin embargo, queremos ver cómo se pueden usar los flujos de red para encontrar los máximos emparejamientos en gráficas bipartitas. El algoritmo que damos, aunque decente, no es el algoritmo más eficiente conocido para este problema. Por lo tanto, no es probable que sea el que se utiliza en la práctica. Sin embargo, es un buen ejemplo de cómo se pueden usar los flujos de red para resolver un problema combinatorio. La red que utilizamos se forma a partir de una gráfica bipartitaG colocando un borde desde la fuenteS hasta cada vértice deV1 y un borde desde cada vértice delV2 sumideroT. Los bordes entreV1 yV2 están orientados deV1 aV2, y a cada borde se le da capacidad 1. La Figura 14.4 contiene la red correspondiente a nuestra gráfica de la Figura 14.2. Los bordes en esta red están todos orientados de abajo hacia arriba y todos los bordes tienen capacidad 1. Los vértices enV1 estánx1,…,x6 en orden de izquierda a derecha, mientras que los vértices enV2 sony1,…,y7 de izquierda a derecha.

Ahora que hemos traducido una gráfica bipartita a una red, necesitamos abordar la correspondencia entre los emparejamientos y los flujos de red. Para convertir una coincidenciaM en un flujo de red, comenzamos colocando una unidad de flujo en los bordes de la coincidencia. Para tener un flujo válido, también debemos colocar una unidad de flujo en los bordes desdeS hasta los vértices deV1 saturado porM. Dado que cada uno de estos vértices es incidente con un solo borde deM, el flujo de salida de cada uno de ellos es 1, coincidiendo con el flujo de entrada. De igual manera, el enrutamiento de una unidad de flujo haciaT desde cada uno de los vértices deV2 saturado porM se encarga de las leyes de conservación para los vértices restantes. Para ir en la otra dirección, simplemente tenga en cuenta que los bordes completos deV1 aV2 en un flujo de valor entero es una coincidencia. Así, podemos encontrar una coincidencia máxima deV1 a simplementeV2 ejecutando el algoritmo de etiquetado en la red asociada para encontrar un flujo máximo.
En la Figura 14.5, mostramos bordes gruesos para mostrar los bordes con flujo 1 en el flujo correspondiente a nuestra suposición a una coincidencia de la Figura 14.3.

Con la secuencia de prioridadS,T,x1,x2,…,x6,y1,y2,…,y7 reemplazando nuestro orden pseudo-alfabético habitual, el algoritmo de etiquetado produce las etiquetas que se muestran a continuación.
S:(∗,+,∞)y6:(x6,+,1)
x3:(S,+,1)x1:(y6,−,1)
x5:(S,+,1)y1:(x1,+,1)
y4:(x3,+,1)y2:(x1,+,1)
y5:(x3,+,1)y3:(x1,+,1)
x6:(y4,−,1)x2:(y1,−,1)
x4:(y5,−,1)T:(y2,+,1)
Esto nos lleva al camino de aumentoS,x3,y4,x6,y6,x1,y2,T, que nos da el flujo que se muestra en la Figura 14.6.

¿Es este un flujo máximo? Otra ejecución del algoritmo de etiquetado produce
S:(∗,+,∞)x4:(y5,−,1)
x5:(S,+,1)y4:(x4,+,1)
y5:(x5,+,1)x3:(y4,−,1)
y luego se detiene. Así, el flujo en la Figura 14.6 es un flujo máximo.
Ahora que sabemos que tenemos un flujo máximo, nos gustaría poder argumentar que la coincidencia que hemos encontrado también es máxima. Después de todo, el jefe no va a estar contento si más tarde se entera de que este algoritmo de fantasía que afirmaste daba una asignación óptima de trabajos a los trabajadores dejó al quinto trabajador (x5) sin empleo cuando los seis podrían haber sido puestos a trabajar. Echemos un vistazo a qué vértices fueron etiquetados por el algoritmo de etiquetado Ford-Fulkerson en la última ejecución. Hubo tres vértices (x3,x4,andx5) deV1 etiquetado, mientras que solo hubo dos vértices (y4yy5) deV2 etiquetados. Observe quey4 yy5 son los únicos vértices que son vecinos dex3,x4, ox5 enG. Así, no importa cómo escojamos los bordes coincidentes{x3,x4,x5}, uno de estos vértices quedará insaturado. Por lo tanto, uno de los trabajadores debe ir sin asignación laboral. (En nuestro ejemplo, es el quinto, pero es posible elegir diferentes bordes para el emparejamiento así que otro de ellos se quede sin tarea alguna).
El fenómeno que acabamos de observar no es exclusivo de nuestro ejemplo. De hecho, en cada gráfica bipartitaG=(V,E) conV=V1∪V2 en la que no podamos encontrar una coincidencia que satura todos los vértices deV, encontraremos una configuración similar. Se trata de un famoso teorema de Hall, que exponemos a continuación.
DejaG=(V,E) ser una gráfica bipartita conV=V1∪V2. Hay una coincidencia que satura todos los vértices deV1 if y solo si por cada subconjuntoA⊆V1, el conjuntoN⊆V de vecinos de los vértices enA satisface|N|≥|A|.