我需要处理给定图形G的许多子图。为此目的,图形工具似乎是利用其GraphViews和边缘/顶点过滤功能的功能的好方法。 为了节省时间,我想缓存有关已经处理的子图的信息。我认为最快的方法是比较顶点和边缘滤镜。这样的操作会很快但是......似乎我们最终会得到具有不同滤波器的相同子图。
例如,初始图形如下所示:
运行此类代码后:
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())
我们会有以下过滤器:
VERTEX filter: [1 1 1 0]
EDGE filter: [1 0 1 1 1]
稍微不同的过滤后:
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())
过滤器将如下所示:
VERTEX filter: [1 1 1 0]
EDGE filter: [1 0 0 0 1]
两个创建的子图都如下所示:
在相当大的图上运行算法可能会以不同的顺序过滤掉边/顶点,这可能会导致具有相同的子图但具有不同的过滤器设置。 有没有比较这种观点的好方法? (希望通过图形工具的C ++层完成)