Antworten:
Der beste Weg (in Bezug auf Faulheit) ist die Verwendung des frei verfügbaren Werkzeugs Sage, das die Graphentheorie am besten unterstützt.
Beispiel
sage: G = graphs.PetersenGraph()
sage: G.has_homomorphism_to(graphs.CycleGraph(5))
False
sage: G.has_homomorphism_to(graphs.CompleteGraph(5))
{0: 0, 1: 1, 2: 0, 3: 1, 4: 2, 5: 1, 6: 0, 7: 2, 8: 2, 9: 1}
Ein Ansatz wäre die Verwendung eines SAT-Lösers.
Führen Sie eine boolesche Variable für jeden Scheitelpunkt von und jeden Scheitelpunkt von . Die Intuition ist, dass wahr ist, wenn der Homomorphismus abbildet . (Wenn Sie einen kleineren Kandidatensatz von Scheitelpunkten haben, denen kann - möglicherweise eingegrenzt durch Gradüberlegungen oder andere lokale Kriterien -, können Sie die Anzahl der booleschen Variablen entsprechend reduzieren. Diese Art der Vorverarbeitung kann die Effizienz dieses Ansatzes erheblich.) t G v
Fügen Sie als Nächstes zwei Arten von Klauseln / Einschränkungen hinzu:
Fügen Sie einige Klauseln hinzu, um zu erfordern, dass diese Zuordnung einen Graphhomomorphismus bildet. Fügen Sie insbesondere für jede Kante die Einschränkung hinzu
(Sie können dies mit der Standard-Tseitin-Transformation in 3CNF konvertieren.)
Fügen Sie einige Klauseln hinzu, die erfordern, dass jeder Scheitelpunkt von genau einem Scheitelpunkt von . Es gibt eine Reihe von Standardmethoden zum Codieren dieser Einschränkung. Eine einfache Möglichkeit besteht darin, für jeden Scheitelpunkt die Klausel hinzuzufügen
und die Klausel
Dann können Sie jeden Standard-SAT-Solver verwenden. Ich weiß nicht, wie gut es in der Praxis funktionieren wird, aber Sie könnten es versuchen und sehen, wie es funktioniert.
In der Forschungsliteratur wurde das Problem des Graphhomomorphismus ausführlich für Graphen mit speziellen Eigenschaften untersucht (z. B. wenn eine Clique ist, wenn die Baumbreite begrenzt hat usw.). Wenn Sie etwas Besonderes über die Struktur Ihrer Diagramme wissen, können Sie möglicherweise bessere Algorithmen für Ihr Problem finden. Für allgemeine Diagramme ist dieses Problem als NP-hart bekannt.H.