Je recherche un algorithme qui fournit une chaîne canonique pour un graphique coloré donné. C'est à dire. un algorithme qui renvoie une chaîne pour un graphique, de telle sorte que deux graphiques obtiennent la même chaîne si et seulement s'ils sont isomorphes.
En particulier, je recherche un algorithme simple et facile à implémenter avec des performances raisonnables sur la plupart des graphes (super-polynôme pire cas, bien sûr). Je m'attends à de petits graphiques, donc les performances ne doivent pas être stellaires, juste assez bonnes.
Malheureusement, la plupart des choses que j'ai trouvées sont très complexes et s'intéressent plus à exprimer des connexions mathématiques profondes qu'à décrire simplement l'algorithme. J'ai bien peur de ne pas avoir le temps de plonger aussi profondément. Quelqu'un peut-il me donner un raccourci?
J'espère quelque chose comme l'algorithme Floyd-Warshall. Pas optimal, mais assez bon et facile à mettre en œuvre.
Réponses:
Brendan McKay et Adolfo Piperno ont rédigé un document d'enquête sur cette question en 2013. Ils présentent plusieurs programmes informatiques efficaces qui canonisent de nombreux graphiques plus rapidement que vous ne l'imaginez. Il n'est pas nécessaire (et inutile) de mettre en œuvre ces algorithmes vous-même - ils sont disponibles en ligne, même en tant que code source.
la source
J'ai fini par implémenter l'algorithme Nauty, mais ce faisant, j'ai trouvé une réponse à ma propre question. Nauty étend cet algorithme de base avec de nombreuses heuristiques compliquées:
Soit un petit graphe G de longueur n:
Cet algorithme estO(n!) , mais pour les petits graphiques, cela devrait fonctionner correctement.
Nauty étend cet algorithme principalement en élaguant l'espace de recherche des graphiques à considérer, lorsque vous recherchez celui avec la plus petite représentation de chaîne.
la source