Im Fall von unbeschrifteten Graphen kann das Graphisomorphismusproblem durch eine Reihe von Algorithmen gelöst werden, die in der Praxis sehr gut funktionieren. Das heißt, obwohl die Laufzeit im ungünstigsten Fall exponentiell ist, hat man normalerweise eine polynomielle Laufzeit.
Ich hatte gehofft, dass die Situation bei beschrifteten Grafiken ähnlich ist. Es fällt mir jedoch sehr schwer, eine Referenz zu finden, die einen "praktisch effizienten" Algorithmus vorschlägt.
Anmerkung: Hier benötigen wir, dass der Isomorphismus die Markierungen beibehält. Das heißt, ein Isomorphismus zwischen zwei endlichen Automaten / Prozessalgebra-Begriffen würde bedeuten, dass die Automaten / Begriffe im Wesentlichen "bis zur Umbenennung der Knoten gleich" sind.
Die einzige Referenz, die ich gefunden habe, war die in Wikipedia, die besagt, dass das Isomorphismusproblem von markierten Graphen polynomiell auf das von gewöhnlichen Graphen reduziert werden kann. In der zugrunde liegenden Arbeit geht es jedoch mehr um Komplexitätstheorie als um praktische Algorithmen.
Mir fehlt etwas, oder ist es wirklich so, dass es keine effizienten "heuristischen" Algorithmen gibt, um zu entscheiden, ob zwei beschriftete Graphen isomorph sind?
Jeder Hinweis oder Hinweis wäre großartig.
Antworten:
Dieses Papier könnte Sie interessieren:
Aidan Hogan: Skolemisierung leerer Knoten unter Wahrung des Isomorphismus. WWW 2015: 430-440
Es verfügt über einen Algorithmus (basierend auf Nauty) zum Testen des Isomorphismus von RDF-Graphen, bei denen es sich im Wesentlichen um gerichtete beschriftete Graphen handelt, die feste Beschriftungen enthalten können. Der Algorithmus berücksichtigt Beschriftungen, um den Suchraum einzugrenzen.
Wenn Sie Ihr mit der Eingabe beschriftetes Diagramm als RDF-Diagramm darstellen können, können Sie versuchen, das zugehörige Softwarepaket "
blabel
" zum Testen des Isomorphismus zu verwenden.quelle
Ich habe herausgefunden, dass der Algorithmus in die Kategorie der Weisfeiler-Lehman-Algorithmen mit k-Dimension gehört und bei regulären Graphen fehlschlägt. Für mehr hier:
http://dabacon.org/pontiff/?p=4148
Der ursprüngliche Beitrag folgt:
Vor Jahren habe ich einen einfachen und flexiblen Algorithmus für genau dieses Problem erstellt (Graphisomorphismus mit Beschriftungen).
Ich nannte es "Powerhash", und um den Algorithmus zu erstellen, waren zwei Erkenntnisse erforderlich. Der erste ist der Power Iteration Graph-Algorithmus, der auch in PageRank verwendet wird. Die zweite ist die Möglichkeit, die Inside-Step-Funktion der Power-Iteration durch alles zu ersetzen, was wir wollen. Ich habe es durch eine Funktion ersetzt, die bei jeder Iteration und für jeden Knoten Folgendes ausführt:
Im ersten Schritt wird der Hash eines Knotens von seinen direkten Nachbarn beeinflusst. Im zweiten Schritt wird der Hash eines Knotens von der Nachbarschaft beeinflusst, die 2 Hops von ihm entfernt ist. Im N-ten Schritt wird der Hash eines Knotens von den N-Hops in der Umgebung beeinflusst. Sie müssen den Powerhash also nur für N = graph_radius-Schritte fortsetzen. Am Ende wurde der Hash des Diagrammmittelknotens vom gesamten Diagramm beeinflusst.
Um den endgültigen Hash zu erstellen, sortieren Sie die Knoten-Hashes des letzten Schritts und verketten Sie sie miteinander. Danach können Sie die endgültigen Hashes vergleichen, um festzustellen, ob zwei Diagramme isomorph sind. Wenn Sie Beschriftungen haben, fügen Sie diese (bei der ersten Iteration) zu den internen Hashes hinzu, die Sie für jeden Knoten berechnen.
Weitere Informationen hierzu finden Sie in meinem Beitrag hier:
https://plus.google.com/114866592715069940152/posts/fmBFhjhQcZF
Der obige Algorithmus wurde in der funktionalen relationalen Datenbank "madIS" implementiert. Den Quellcode des Algorithmus finden Sie hier:
https://github.com/madgik/madis/blob/master/src/functions/aggregate/graph.py
quelle