¿Cómo puedo encontrar si existe una coincidencia perfecta en un gráfico G?

Cualquier combinación de tamaño n / 2 es una combinación perfecta. Entonces, para obtener una coincidencia perfecta si existe, debe encontrar la coincidencia máxima en el gráfico y si su tamaño es n / 2, entonces tiene la coincidencia perfecta.

Ahora, para encontrar la coincidencia máxima, puede verificar si el gráfico es bipartito o no porque con los gráficos bipartitos, es mucho más sencillo encontrar la coincidencia máxima.
El teorema de Berge establece que una M coincidente es máxima en G si G no tiene una ruta de aumento de M. Algoritmo para ambos casos utiliza este teorema.

Para el caso de biparita, el algoritmo de Hofcroft-Karp encuentra la coincidencia máxima en el tiempo O ([matemática] E \ sqrt {V} [/ matemática]).
Algoritmo Hopcroft-Karp
Para el caso de los gráficos genrales, el algoritmo de Edmonds blossom encuentra la coincidencia máxima en el tiempo O ([matemática] V ^ {4} [/ matemática]).
Algoritmo de flor

Debe usar el teorema de Tutte, que es en sí mismo una generalización del teorema de Hall para el gráfico bipartito:

Un gráfico, G = ( V , E ), tiene una coincidencia perfecta si y solo si para cada subconjunto U de V , el subgrafo inducido por VU tiene como máximo | U | componentes conectados con un número impar de vértices.

[De Wikipedia]

Hay una manera más simple que ejecutar el algoritmo de coincidencia máxima y verificar si es perfecto o no.

Verifique la matriz de Tutte. Puede elegir aleatoriamente la X [i] [j] . Dado que solo necesitamos verificar si su determinante es cero, podemos hacer todas las operaciones de la Eliminación Gaussiana (utilizada para calcular el determinante) módulo un primo grande, como 10 ^ 9 + 7.
De esta manera podemos resolver el problema en O ( V ^ 3 ).