Disclaimer: Ich bin ein absoluter Neuling in der Graphentheorie und ich bin mir nicht sicher, ob das auf SO, Mathe SE, etc.
gehörtWie kann ich, wenn zwei Adjazenzmatrizen A und B gegeben sind, feststellen, ob A und B isomorph sind?
Zum Beispiel A und B, die nicht isomorph sind, und C und D, die isomorph sind.
%Vor%Hier ist, wie ich meinen Algorithmus gestartet habe (entschuldige meinen Mangel an mathematischer Strenge), bitte hilf mir, zu vervollständigen / zu korrigieren!
Das ist ein ziemlich schwer zu lösendes Problem. Es gibt eine Wikipedia-Seite darüber:
Nach dieser Seite gibt es eine Reihe von Sonderfällen, die mit effizienten Polynomzeitlösungen gelöst wurden, aber die Komplexität der optimalen Lösung ist noch unbekannt.
Nun, es ist sehr einfach, schnell zu erkennen, dass sie NICHT isomorph sind, indem Sie Folgendes tun.
areIsomorphic(G1, G2):
if(G1.num_verticies != G2.num_verticies)
return False
if(G1.num_total_edges != G2.num_total_edges)
return False
for each vertex v in G1:
if( G2.find(v).edges != v.edges):
return False;
//Try and find a property in graph G1 that does not exist in G2.
// Use a heuristic. ie- try and find nonmutually adjacenct sets.
Tags und Links algorithm language-agnostic graph-theory graph