Estoy buscando un algoritmo que proporcione una cadena canónica para un gráfico de color dado. Es decir. un algoritmo que devuelve una cadena para un gráfico, de modo que dos gráficos obtienen la misma cadena si y solo si son isomórficos.
En particular, estoy buscando un algoritmo simple que sea fácil de implementar con un rendimiento razonable en la mayoría de los gráficos (por supuesto, superpolinomio en el peor de los casos). Espero gráficos pequeños, por lo que el rendimiento no tiene que ser estelar, solo lo suficientemente bueno.
Desafortunadamente, la mayoría de las cosas que he encontrado son muy complejas y están más interesadas en expresar conexiones matemáticas profundas que simplemente describir el algoritmo. Me temo que no tengo tiempo para sumergirme tan profundo. ¿Alguien puede darme un atajo?
Espero algo como el algoritmo Floyd-Warshall. No es óptimo, pero es lo suficientemente bueno y fácil de implementar.
Respuestas:
Brendan McKay y Adolfo Piperno han escrito una encuesta sobre esta pregunta en 2013. Presentan varios programas de computadora eficientes que canonizan muchos gráficos más rápido de lo que imagina. No es necesario (y no tiene sentido) implementar estos algoritmos usted mismo: están disponibles en línea, incluso como código fuente.
fuente
Terminé implementando el algoritmo Nauty, pero al hacerlo, descubrí una respuesta a mi propia pregunta. Nauty extiende este algoritmo básico con muchas heurísticas complicadas:
Dados unos pequeños gráficos G de longitud n:
Este algoritmo es , Pero para gráficos pequeños debería funcionar bien.O(n!)
Nauty amplía este algoritmo principalmente mediante la poda del espacio de búsqueda de gráficos a tener en cuenta al buscar el que tiene la representación de cadena más pequeña.
fuente