当一个图是igraph中另一个图的子图时进行检查

当一个图是igraph中另一个图的子图时进行检查,graph,igraph,Graph,Igraph,我想用igraph检查一个给定的子图G是否是另一个较大的图G’的子图。请注意,这不是子图同构问题,因为如果任何顶点或边的标签不同,我希望答案为False。我希望答案是真的,当且仅当两个图都有相同的边和顶点标签,并且G是G'的子图。我如何在igraph中实现这一点?谢谢 不确定顶点/边标签是什么意思,但请注意igraph中的VF2子同构算法支持顶点/边颜色;如果两个顶点或边的颜色相同,则允许它们匹配。如果您使用的是Python中的igraph,请检查Graph类的子同构\u vf2方法。如果您使用

我想用igraph检查一个给定的子图G是否是另一个较大的图G’的子图。请注意,这不是子图同构问题,因为如果任何顶点或边的标签不同,我希望答案为False。我希望答案是真的,当且仅当两个图都有相同的边和顶点标签,并且G是G'的子图。我如何在igraph中实现这一点?谢谢

不确定顶点/边标签是什么意思,但请注意igraph中的VF2子同构算法支持顶点/边颜色;如果两个顶点或边的颜色相同,则允许它们匹配。如果您使用的是Python中的igraph,请检查
Graph
类的
子同构\u vf2
方法。如果您使用的是R中的igraph,请检查
graph.subisomorphic.vf2
函数。这两个都由C层中的
igraph\u subisomorphic\u vf2
函数支持

更新:由于您使用字符串作为标签,而不是整数(VF2同构算法所期望的),因此必须首先将它们转换为整数索引。否则,VF2应该能够做您需要的事情。igraph的Python接口中的一个示例:

>>> g = Graph.Formula("A --> B --> C")
>>> g2 = Graph.Formula("A --> B")
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,1])
[[0, 1]]
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,2])
[]

不确定您所说的顶点/边标签是什么意思,但请注意igraph中的VF2子同构算法支持顶点/边颜色;如果两个顶点或边的颜色相同,则允许它们匹配。如果您使用的是Python中的igraph,请检查
Graph
类的
子同构\u vf2
方法。如果您使用的是R中的igraph,请检查
graph.subisomorphic.vf2
函数。这两个都由C层中的
igraph\u subisomorphic\u vf2
函数支持

更新:由于您使用字符串作为标签,而不是整数(VF2同构算法所期望的),因此必须首先将它们转换为整数索引。否则,VF2应该能够做您需要的事情。igraph的Python接口中的一个示例:

>>> g = Graph.Formula("A --> B --> C")
>>> g2 = Graph.Formula("A --> B")
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,1])
[[0, 1]]
>>> g.get_subisomorphisms_vf2(g2, color1=[0,1,2], color2=[0,2])
[]

你好谢谢你的回答。通过标签,我的意思是如果我有一个图,a->B->C和另一个a->B,那么第二个是第一个的子图。但D->E不是第一个的子图,尽管它是第一个的同构子图。我说清楚了吗?这正是我要找的。谢谢你好谢谢你的回答。通过标签,我的意思是如果我有一个图,a->B->C和另一个a->B,那么第二个是第一个的子图。但D->E不是第一个的子图,尽管它是第一个的同构子图。我说清楚了吗?这正是我要找的。谢谢这可能与检查一个图的自同构群是否是另一个图的自同构群的子群相同。这可能与检查一个图的自同构群是否是另一个图的自同构群的子群相同