Ich muss eine Menge von Untergraphen des gegebenen Graphen G verarbeiten. Unter Verwendung dieses Diagramms scheint ein guter Ansatz zu sein, die Funktionalität von GraphViews und Edge/Vertex Filtering Funktionalität zu nutzen. Um Zeit zu sparen, möchte ich Informationen über bereits verarbeitete Untergraphen zwischenspeichern. Ich dachte, dass der schnellste Weg Vertex- und Kantenfilter vergleichen würde. Eine solche Operation wäre ziemlich schnell, aber ... Es scheint, dass wir mit demselben Sub-Graphen mit verschiedenen Filtern enden können.Wie zwei GraphView in Graph-Tool zu vergleichen?
Zum Beispiel Anfangs Graph wie folgt aussieht:
Nach einem solchen Code ausgeführt wird:
VERTEX filter: [1 1 1 0]
EDGE filter: [1 0 1 1 1]
Nach ein wenig anders:
vFilter1=g.new_vertex_property("bool", val=True)
eFilter1=g.new_edge_property("bool", val=True)
vFilter1[g.vertex(3)]=False
eFilter1[g.edge(1, 2)]=False
f1=gt.GraphView(g, efilt=eFilter1, vfilt=vFilter1)
print ("VERTEX filter:", f1.get_vertex_filter()[0].get_array())
print ("EDGE filter:", f1.get_edge_filter()[0].get_array())
Wir Filter wie haben Filterung:
vFilter2=g.new_vertex_property("bool", val=True)
eFilter2=g.new_edge_property("bool", val=True)
vFilter2[g.vertex(3)]=False
eFilter2[g.edge(1, 2)]=False
eFilter2[g.edge(0, 3)]=False
eFilter2[g.edge(2, 3)]=False
f2=gt.GraphView(g, efilt=eFilter2, vfilt=vFilter2)
print ("VERTEX filter:", f2.get_vertex_filter()[0].get_array())
print ("EDGE filter:", f2.get_edge_filter()[0].get_array())
Filter wird wie folgt aussehen:
VERTEX filter: [1 1 1 0]
EDGE filter: [1 0 0 0 1]
Beide erstellt Untergraphen sehen wie folgt aus:
Algorithmus läuft auf ziemlich große Graphen herausfiltern können Kanten/Ecken in andere Reihenfolge und es kann dazu führen, dass die gleichen Sub-Graphen, aber mit unterschiedlichen Filter-Setup. Gibt es eine schöne Methode, solche Ansichten zu vergleichen? (Hoffentlich durch C++ - Layer des Graph-Tools)
Es scheint, dass Isomorphismus() für mich funktioniert. Leider liefert similarity() dasselbe Ergebnis für f1 und f2 aus den obigen Beispielen, auch wenn in der zweiten Zeile mit "vFilter2 [g.vertex (3)] = False" auskommentiert ist, was zwei verschiedene Teilgraphen ergibt (also freien Vertex ohne etwaige Verbindungen werden bei der Ähnlichkeitsberechnung nicht berücksichtigt). Ich bin mir nicht sicher, was ist die Komplexität von Isomorphie(), aber zumindest für jetzt ist es gut genug für kleine/Test-Graphen. Vielen Dank. – Krzysztof