Closed hoechp closed 7 years ago
Ein Vergleich eines Graphen mit m
Knoten auf einen isomorphen Teilgraphen mit n
Knoten hat meiner Einschätzung nach eine Laufzeit von etwa O(m! * n)
- zumindest scheint meine Implementierung mindestens so schlecht zu skalieren.
Die worst-case Zeitkomplexität von ~O(m! * n)
scheint in der Praxis zwar eher unrealistisch, da sich in den allermeisten Fällen sehr viel optimieren lässt, aber große Graphen werden trotzdem wohl schnell schwer zu handhaben - wobei es sehr auf den speziellen Graphen ankommt.
Im Großen und Ganzen funktioniert die Überprüfung auf einen isomorphen Teilgraphen bereits - in seltenen Fällen treten Fehler auf, aber ich werde die Implementierung ohnehin abändern, denke ich. Mit den geplanten Änderungen sollte sich auch der Speicherbedarf deutlich verbessern.
Grundsätzlich ist mein Algorithmus in etwa wie folgt:
Für die Überprüfung, ob zwei Graphen isomorph sind, wird die selbe Überprüfung genutzt und dann in Rückrichtung der zurückgegebenen Zuordnung überprüft, ob ebenfalls jeweils alle Attribute und Kanten passen.
Ist jetzt einfacher, performanter, speicherschonender und - soweit ich sehe - frei von Bugs :)
Graphen sollen auf Isomorphie (sozusagen Gleichheit) und isomorphen Teilgraph (sozusagen enthalten eines Graphen) testbar sein - dafür sollen Methoden implementiert werden, evtl. im Fall der direkten Isomorphie auch als Override von compareTo. Siehe auch #3