¿Cuáles son algunos algoritmos conocidos para encontrar una coincidencia perfecta en un gráfico bipartito?

Hay tres algoritmos principales a tener en cuenta al hacer esto, todo depende de la cantidad de vértices del gráfico bipartito. A medida que se hace demasiado grande, algunos algoritmos tardarán demasiado en ser factibles.

En primer lugar, como los otros carteles han mencionado es la reducción a Max Flow. Después de determinar las dos mitades, agrega una súper fuente a uno de los conjuntos y un súper sumidero a la otra, asegurando que todos los bordes tengan capacidad uno. Recapitulando la definición de Max-Flow, queremos impulsar la mayor cantidad de flujo posible, por lo tanto, maximizaremos la coincidencia máxima. Este algoritmo depende de qué tan rápido sea el algoritmo Max-Flow y tiende a ser más lento. Además, para recuperar el conjunto de coincidencias, se debe realizar un recorrido de búsqueda de Breadth-First del gráfico resultante.

A continuación, tenemos el algoritmo de ruta de aumento. La idea es encontrar una ruta de aumento (es decir, borde no coincidente-borde coincidente-borde no coincidente-borde coincidente …-borde no coincidente) y voltear la paridad observando que aumenta el número de bordes coincidentes. Esto proporciona un algoritmo [matemático] O (VE) [/ matemático].

Finalmente, tenemos Hopcroft-Karp. Esta es básicamente una versión más eficiente del algoritmo de ruta de aumento. En lugar de encontrar una ruta de aumento, encuentra la ruta de aumento más eficiente en cualquier momento. Esta propiedad hace que el algoritmo se acelere al tiempo [matemático] O (\ sqrt (V) E) [/ matemático].

Tenga en cuenta que todos estos algoritmos están destinados a encontrar coincidencias máximas. Lo cual puede determinar si es perfecto comprobando el número de vértices. También hay otro enfoque que usa el Teorema de Hall:

Un gráfico bipartito tiene una coincidencia perfecta iff para cada subconjunto [math] S [/ math] en cualquier partición, el tamaño del conjunto de vecinos de [math] S [/ math] es al menos tan grande como [math] S [ /mates].

Sin embargo, esto ingenuamente se ejecuta en tiempo exponencial.

Compruebe si los dos conjuntos de nodos disjuntos son del mismo tamaño. Reduzca a un problema de flujo máximo como se menciona aquí [1]. Si el valor de flujo es igual al conjunto del borde izquierdo, tiene una coincidencia perfecta. Para encontrar la coincidencia, simplemente envíe los bordes con un flujo positivo sobre ellos.

[1] Emparejamiento (teoría de grafos)