Ich möchte alle ungerichteten Graphen der Größe auflisten , benötige aber nur eine Instanz jeder Isomorphismusklasse . Mit anderen Worten, ich möchte alle nicht-isomorphen (ungerichteten) Graphen auf Eckpunkten aufzählen . Wie kann ich das machen?
Genauer gesagt, ich möchte einen Algorithmus, der eine Folge ungerichteter Graphen mit der folgenden Eigenschaft erzeugt: Für jeden ungerichteten Graphen an Eckpunkten existiert ein Index so dass isomorph zu . Ich möchte, dass der Algorithmus so effizient wie möglich ist. Mit anderen Worten, die Metrik, die mir wichtig ist, ist die Laufzeit, die zum Generieren und Durchlaufen dieser Liste von Diagrammen benötigt wird. Ein sekundäres Ziel ist, dass es schön wäre, wenn der Algorithmus nicht zu komplex zu implementieren wäre. G n i G G i
Beachten Sie, dass ich mindestens einen Graphen aus jeder Isomorphismusklasse haben muss, aber es ist in Ordnung, wenn der Algorithmus mehr als eine Instanz erzeugt. Insbesondere ist es in Ordnung, wenn die Ausgabesequenz zwei isomorphe Graphen enthält, wenn dies das Auffinden eines solchen Algorithmus erleichtert oder effizientere Algorithmen ermöglicht, sofern alle möglichen Graphen abgedeckt sind.
Meine Anwendung lautet wie folgt: Ich habe ein Programm, das ich auf allen Diagrammen der Größe testen möchte . Ich weiß, dass wenn zwei Graphen isomorph sind, sich mein Programm für beide gleich verhält (entweder für beide richtig oder für beide falsch). Es reicht also aus, mindestens einen Vertreter aus jeder Isomorphismusklasse aufzulisten und dann die zu testen Programm auf diesen Eingängen. In meiner Anwendung ist ziemlich klein.n
Einige mögliche Algorithmen, die ich in Betracht gezogen habe:
Ich könnte alle möglichen Adjazenzmatrizen aufzählen, dh alle symmetrischen 0-or-1-Matrizen, die alle Nullen auf den Diagonalen haben. Dies erfordert jedoch die Aufzählung von Matrizen. Viele dieser Matrizen stellen isomorphe Graphen dar, so dass dies anscheinend eine Menge Aufwand bedeutet.2 n ( n - 1 ) / 2
Ich könnte alle möglichen Adjazenzmatrizen auflisten und für jede testen, ob sie zu einem der zuvor ausgegebenen Graphen isomorph ist. Wenn es zu keiner vorherigen Ausgabe isomorph ist, geben Sie es aus. Dies würde die Ausgabeliste erheblich verkürzen, erfordert jedoch immer noch mindestens Berechnungsschritte (auch wenn wir davon ausgehen, dass die Prüfung der Graphisomorphie superschnell ist) meine Metrik.
Es ist möglich, eine Teilmenge von Adjazenzmatrizen aufzulisten. Insbesondere wenn ein Graph auf Eckpunkten , kann ich ohne Verlust der Allgemeinheit davon ausgehen, dass die Eckpunkte so angeordnet sind, dass . Mit anderen Worten, jeder Graph ist isomorph zu einem, bei dem die Scheitelpunkte in der Reihenfolge ihres nicht abnehmenden Grades angeordnet sind. Es genügt also, nur die Adjazenzmatrizen aufzulisten, die diese Eigenschaft haben. Ich weiß nicht genau, wie viele solcher Adjazenzmatrizen es gibt, aber es sind viel weniger als , und sie können mit viel weniger als aufgezählt werdenN V = { v 1 , ... , v n } ° V 1 ≤ deg v 2 ≤ ⋯ ≤ deg v n 2 n ( n - 1 ) / 2 2 n ( n - 1 ) / 2Rechenschritte. Dies hinterlässt jedoch immer noch viel Redundanz: Viele Isomorphismusklassen werden immer noch viele Male behandelt, daher bezweifle ich, dass dies optimal ist.
Können wir es besser machen? Wenn ich es richtig verstehe, gibt es ungefährÄquivalenzklassen nicht-isomorpher Graphen. Können wir einen Algorithmus finden, dessen Laufzeit besser ist als die obigen Algorithmen? Wie nah können wir uns demUntergrenze? Mir geht es in erster Linie um die Traktierbarkeit für kleine (etwa oder ; klein genug, um einen solchen Algorithmus plausibel vollständig ausführen zu können), nicht so sehr um die Asymptotik für große .
Siehe auch: Konstruktion von inequivalenten binären Matrizen (obwohl man leider keine gültige Antwort erhalten zu haben scheint).
Antworten:
Der wahrscheinlich einfachste Weg, alle nicht-isomorphen Graphen für kleine Scheitelpunktzahlen aufzulisten, besteht darin, sie aus Brendan McKays Sammlung herunterzuladen . Der Aufzählungsalgorithmus ist in einem Artikel von McKay [1] beschrieben und erweitert Nichtisomorphe der Größe n-1 auf alle möglichen Arten und überprüft, ob der neue Scheitelpunkt kanonisch war. Es ist wie
geng
in McKays Graph Isomorphism Checker implementiertnauty
.[1]: BD McKay, Applications of a technique for labelled enumeration , Congressus Numerantium, 40 (1983) 207-221.
quelle
n-1
und erweitere es, wie Sie sagten, um einen Scheitelpunkt auf alle möglichen Arten. Dann überprüfe ich, ob der Scheitelpunkt eine kanonische Bezeichnung hat, sagen wir1
(kanonischer Scheitelpunkt ?!). Was ist jedoch, wenn der Graph nur isomorph zur kanonischen Form ist und der Scheitelpunkt eine andere Bezeichnung hat? Ich habe versucht, die Automorphismen zu überprüfen, um festzustellen, ob sich der Scheitelpunkt mit der Bezeichnung1
in derselben Umlaufbahn befindet, aber dann lande das Diagramm zweimal in meiner Liste. Das Papier hilft mir nicht wirklich. Außerdem ist der Quellcode von geng aufgrund all dieser binären Optimierungen und kaum vorhandener Kommentare nicht lesbar.n-1
Eckpunkten berücksichtigen ? zB n = 3 und mein vorheriger Graph war P2. Dann ergeben die beiden Fälle, in denen ich den dritten Scheitelpunkt mit einem der vorherigen Scheitelpunkte verbinde, natürlich denselben Graphen P3. Könnten Sie kurz erklären, wie man richtig "auf alle möglichen Arten erweitert", oder sollte ich dies als eine andere Frage stellen? (Manchmal bin ich auch verwirrt darüber, was passiert, da mein Programm Nicht-Isomorphismen eines bestimmten Diagrammtyps finden muss, was die Dinge etwas komplizierter macht.)Ich schlage eine Verbesserung Ihrer dritten Idee vor: Füllen Sie die Adjazenzmatrix zeilenweise aus, und verfolgen Sie dabei Scheitelpunkte, die hinsichtlich Grad und Adjazenz den zuvor ausgefüllten Scheitelpunkten gleichwertig sind. Die Äquivalenzklassen bestehen also zunächst aus allen Knoten mit dem gleichen Grad.
Wenn ein neu gefüllter Scheitelpunkt nur einigen der äquivalenten Knoten benachbart ist, führt jede Auswahl zu Repräsentanten aus denselben Isomrphismusklassen. Daher wird nur die Zuweisung berücksichtigt, bei der der aktuell gefüllte Eckpunkt neben den entsprechenden Eckpunkten mit der höchsten Nummer liegt (und die Äquivalenzklasse für den verbleibenden Prozess in zwei geteilt wird).
Eine naive Implementierung dieses Algorithmus stößt auf Sackgassen, bei denen sich herausstellt, dass die Adjazenzmatrix nicht mit den angegebenen Gradzahlen und vorherigen Zuordnungen gefüllt werden kann. Es kann sich lohnen, diese frühzeitig zu erkennen / zu filtern. Einige Ideen:
quelle
Diese Papiere könnten von Interesse sein.
"Über die prägnante Darstellung von Graphen", György Turan, Discrete Applied Mathematics, Band 8, Ausgabe 3, Juli 1984, S. 289-294 http://www.sciencedirect.com/science/article/pii/0166218X84901264
"Prägnante Darstellung allgemeiner unbeschrifteter Graphen", Moni Naor, Discrete Applied Mathematics, Band 28, Ausgabe 3, September 1990, S. 303-307 http://www.sciencedirect.com/science/pii/0166218X9090011Z
Sie bieten Codierungs- und Decodierungsfunktionen für die Codierung eines vertex-markierten Graphen, sodass zwei solcher Graphen genau dann auf dasselbe Codewort abgebildet werden, wenn eines davon durch die Permutation der vertex-Labels des anderen resultiert.
Darüber hinaus ist nachgewiesen, dass die Codierungs- und Decodierungsfunktionen effizient sind.
Der erste Artikel befasst sich mit ebenen Graphen. Im zweiten Aufsatz wird die Planaritätsbeschränkung aufgehoben.
EDIT: Dieses Papier könnte auch relevant sein:
Graph Isomorphism in Quasi-Polynomial Time, Laszlo Babai, Universität Chicago, Preprint auf arXiv, 9. Dezember 2015 http://arxiv.org/pdf/1512.03547v1.pdf
Babais Bekanntgabe seines Ergebnisses brachte die Nachricht: https://www.sciencenews.org/article/new-algorithm-cracks-graph-problem
Aber vielleicht irre ich mich, die OP-Frage mit diesen drei Papieren zu verwechseln? Das OP möchte nicht-isomorphe Graphen aufzählen, aber es kann dennoch hilfreich sein, über effiziente Methoden zu verfügen, um zu bestimmen, wann zwei Graphen isomorph sind.
quelle
Es gibt einen Artikel aus den frühen neunziger Jahren, der genau diese Frage behandelt:
Effiziente Algorithmen zur Auflistung unbeschrifteter Grafiken von Leslie Goldberg.
Der Ansatz garantiert, dass genau ein Repräsentant jeder Isomorphismusklasse gezählt wird und dass zwischen der Erzeugung zweier aufeinanderfolgender Graphen nur eine polynomielle Verzögerung besteht.
quelle