Je voudrais énumérer tous les graphiques non dirigés de taille , mais je n'ai besoin que d'une instance de chaque classe d'isomorphisme . En d'autres termes, je veux énumérer tous les graphes non isomorphes (non dirigés) sur sommets. Comment puis-je faire ceci?
Plus précisément, je veux un algorithme qui va générer une séquence de graphes non orientés , avec la propriété suivante: pour chaque graphe non orienté sur sommets, il existe un indice tel que est isomorphe à . J'aimerais que l'algorithme soit aussi efficace que possible; en d'autres termes, la métrique qui m'intéresse est le temps d'exécution pour générer et parcourir cette liste de graphiques. Un objectif secondaire est que ce serait bien si l'algorithme n'est pas trop complexe à implémenter. G n i G G i
Notez que j'ai besoin d'avoir au moins un graphique de chaque classe d'isomorphisme, mais c'est OK si l'algorithme produit plus d'une instance. En particulier, c'est OK si la séquence de sortie comprend deux graphiques isomorphes, si cela aide à trouver plus facilement un tel algorithme ou permet des algorithmes plus efficaces, tant qu'il couvre tous les graphiques possibles.
Mon application est la suivante: j'ai un programme que je souhaite tester sur tous les graphes de taille . Je sais que si deux graphiques sont isomorphes, mon programme se comportera de la même façon sur les deux (il sera soit correct sur les deux, soit incorrect sur les deux), il suffit donc d'énumérer au moins un représentant de chaque classe d'isomorphisme, puis de tester le programme sur ces entrées. Dans mon application, est assez petit.n
Quelques algorithmes candidats que j'ai envisagés:
Je pourrais énumérer toutes les matrices d'adjacence possibles, c'est-à-dire toutes les matrices symétriques 0 ou 1 qui ont tous les 0 sur les diagonales. Cependant, cela nécessite l'énumération de matrices . Beaucoup de ces matrices représenteront des graphes isomorphes, donc cela semble gaspiller beaucoup d'efforts.2 n ( n - 1 ) / 2
Je pourrais énumérer toutes les matrices d'adjacence possibles, et pour chacune, tester si elle est isomorphe à l'un des graphiques que j'ai précédemment produits; s'il n'est pas isomorphe à quoi que ce soit de sortie avant, sortez-le. Cela raccourcirait considérablement la liste de sortie, mais cela nécessite toujours au moins étapes de calcul (même si nous supposons que la vérification de l'isomorphisme du graphique est super rapide), donc ce n'est pas beaucoup mieux en ma métrique.
Il est possible d'énumérer un sous-ensemble de matrices d'adjacence. En particulier, si est un graphe sur sommets , sans perte de généralité je peux supposer que les sommets sont disposés de telle sorte que . En d'autres termes, chaque graphique est isomorphe à un où les sommets sont disposés par ordre de degré non décroissant. Il suffit donc d'énumérer uniquement les matrices d'adjacence qui ont cette propriété. Je ne sais pas exactement combien il y a de telles matrices d'adjacence, mais elles sont beaucoup moins de , et elles peuvent être énumérées avec beaucoup moins deétapes de calcul. Cependant, cela laisse encore beaucoup de redondance: de nombreuses classes d'isomorphisme seront encore couvertes plusieurs fois, donc je doute que ce soit optimal.
Pouvons-nous faire mieux? Si je comprends bien, il y a environclasses d'équivalence des graphes non isomorphes. Pouvons-nous trouver un algorithme dont le temps d'exécution est meilleur que les algorithmes ci-dessus? Jusqu'où pouvons-nous nous rapprocher duborne inférieure? Je m'intéresse principalement à la tractabilité pour les petits (disons, ou environ; assez petit pour que l'on puisse vraisemblablement exécuter un tel algorithme jusqu'à son terme), pas tellement à propos des asymptotiques pour les grands .
Connexe: Construire des matrices binaires inéquivalentes (bien que malheureusement on ne semble pas avoir reçu de réponse valide).
Réponses:
La façon la plus simple d'énumérer tous les graphiques non isomorphes pour les petits nombres de sommets est probablement de les télécharger à partir de la collection de Brendan McKay . L'algorithme d'énumération est décrit dans l'article de McKay [1] et fonctionne en étendant les non-isomorphes de taille n-1 de toutes les manières possibles et en vérifiant si le nouveau sommet était canonique. Il est implémenté comme
geng
dans le vérificateur d'isomorphisme de graph de McKaynauty
.[1]: BD McKay, Applications d'une technique de dénombrement étiqueté , Congressus Numerantium, 40 (1983) 207-221.
la source
n-1
et je le prolonge d'un sommet de toutes les manières possibles, comme vous l'avez dit. Ensuite, je vérifie si le sommet a une étiquette canonique, disons1
(sommet canonique?!). Cependant, que se passe-t-il si le graphique est uniquement isomorphe à la forme canonique et que le sommet a une étiquette différente? J'ai essayé de vérifier les automorphismes pour voir si le sommet avec l'étiquette1
est dans la même orbite, mais je me retrouve ensuite avec le graphique deux fois dans ma liste. Le papier ne m'aide pas vraiment. De plus, le code source de geng est illisible en raison de toutes ces optimisations binaires et à peine de commentaires.n-1
sommets? par exemple n = 3 et mon graphique précédent était P2. Ensuite, les deux cas où je joindrai le troisième sommet à l'un des sommets précédents aboutiront bien sûr au même graphe P3. Pourriez-vous expliquer rapidement comment "étendre de toutes les manières possibles" ou devrais-je poser cette question comme une autre question? (De plus, je suis parfois confus quant à ce qui se passe, car mon programme doit trouver des non-isomorphismes d'un type spécial de graphique, ce qui rend les choses un peu plus compliquées)Je propose une amélioration de votre troisième idée: remplir la matrice d'adjacence ligne par ligne, en gardant une trace des sommets qui sont équivalents en ce qui concerne leur degré et leur adjacence aux sommets précédemment remplis. Ainsi, initialement, les classes d'équivalence seront composées de tous les nœuds de même degré.
Lorsqu'un sommet nouvellement rempli est adjacent à seulement certains des nœuds équivalents, tout choix conduit à des représentants des mêmes classes d'isomrphisme. Nous considérons donc uniquement l'affectation, où le sommet actuellement rempli est adjacent aux sommets équivalents avec le nombre le plus élevé (et divisons la classe d'équivalence en deux pour le processus restant).
Une implémentation naïve de cet algorithme aboutira à des impasses, où il se trouvera que la matrice d'adjacence ne peut pas être remplie en fonction de l'ensemble de degrés donné et des affectations précédentes. Cela peut valoir la peine de détecter / filtrer ces derniers tôt. Quelques idées:
la source
Ces documents pourraient être intéressants.
"Sur la représentation succincte des graphiques", Gyorgy Turan, Discrete Applied Mathematics, Volume 8, numéro 3, juillet 1984, pp. 289-294 http://www.sciencedirect.com/science/article/pii/0166218X84901264
"Représentation succincte des graphiques généraux non étiquetés", Moni Naor, Discrete Applied Mathematics, Volume 28, numéro 3, septembre 1990, pp. 303-307 http://www.sciencedirect.com/science/article/pii/0166218X9090011Z
Ils présentent des fonctions de codage et de décodage pour coder un graphe étiqueté par un sommet de sorte que deux de ces graphes correspondent au même mot de code si et seulement si l'un résulte de la permutation des étiquettes de vertex de l'autre.
De plus, il est prouvé que les fonctions d'encodage et de décodage sont efficaces.
Le premier article traite des graphes planaires. Dans le deuxième article, la restriction de planarité est supprimée.
EDIT: Ce document pourrait également être pertinent:
Graph Isomorphism in Quasi-Polynomial Time, Laszlo Babai, University of Chicago, Preprint on arXiv, 9 décembre 2015 http://arxiv.org/pdf/1512.03547v1.pdf
L'annonce par Babai de son résultat a fait l'actualité: https://www.sciencenews.org/article/new-algorithm-cracks-graph-problem
Mais je me trompe peut-être pour confondre la question des PO avec ces trois documents? L'OP souhaite énumérer les graphes non isomorphes, mais il peut être utile d'avoir des méthodes efficaces pour déterminer quand deux graphes SONT isomorphes?
la source
Un article du début des années 90 traite exactement de cette question:
Algorithmes efficaces pour répertorier les graphiques non étiquetés par Leslie Goldberg.
L'approche garantit que exactement un représentant de chaque classe d'isomorphisme est énuméré et qu'il n'y a qu'un retard polynomial entre la génération de deux graphiques suivants.
la source