寻找Java中的VF2的实现,其可以确定有向无环图G1是否与有向图G2的子图(不一定是诱导子图)同构。我相信在图同构问题的上下文中,正确的术语是单态。任何算法都需要返回创建单态的顶点之间的映射。
正式地,H =(VH,EH)和G =(V,E)是有向图。是否存在函数f:VH→V,如果(u,v)∈EH,则(f(u),f(v))∈E。
如果它在java中不存在,那么c ++中的VFLib会做我需要的。 (我坚信应该这样做,但是术语已经把我推到了一个循环中,我希望确认那些真正了解他们所说的内容的人,然后重新做我在c ++中所做的一切。)
关于类似问题的建议有很多,特别是S-Space https://github.com/fozziethebeat/S-Space 然而,S-Space仅指图同构而不是子图同构/单态。试图阅读代码 https://github.com/fozziethebeat/S-Space/blob/master/src/main/java/edu/ucla/sspace/graph/isomorphism/VF2State.java找到了以下几行:
/**
* The number of nodes in {@code g1}
*/
private final int n1;
/**
* The number of nodes in {@code g2}
*/
private final int n2;
public boolean isDead() {
return n1 != n2
|| t1bothLen != t2bothLen
|| t1outLen != t2outLen
|| t1inLen != t2inLen;
}
这似乎表明它只适用于图同构(因为具有不同数量的节点的图将被拒绝)。但是我对这段代码的感觉很长。
除了VFLib和networkx(python并且不支持单态)之外,我还没有能够分辨出三个VF2选项中的哪一个(同构,子图同构,单态)给定的支持。
任何帮助将不胜感激, 感谢