我有一个从networkx
模块创建的大量图表。两张图g1, g2
是"相同"如果函数is_isomorphic
:
nx.is_isomorphic(g1,g2)
返回True
。这不足以创建排序信息,因为我只能定义g1==g2
,因此我无法使用集合或字典对项目进行分组。有没有一种简洁的方法来分组图形,以便同一组中的所有图形都是同构的?
答案 0 :(得分:1)
这是一个简单的方法:
groups = []
for graph in graphs:
# check if this graph is isomorphic to any of our groups so far
for group in groups:
# we only need to check one graph from each group, since isomorphism is transitive
if networkx.is_isomorphic(graph, group[0]):
# if isomorphic, put this graph in this group
group.append(graph)
break
else:
# if none were isomorphic, make a new group
groups.append([graph])
这将创建一个列表列表,每个子列表包含彼此同构的组。
可能会对此进行调整,以便在某些情况下提高性能。例如,您可以尝试首先根据他们拥有的节点数量(他们的顺序)对图表进行分组(可能通过排序)。由于具有不同顺序的图形不能是同构的,因此您可以通过仅检查大小相等的图形中的同构来削减一些角落。