Java中的图形单态算法(VF2 /模糊术语)

时间:2015-10-07 23:06:54

标签: java graph graph-algorithm isomorphism

寻找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选项中的哪一个(同构,子图同构,单态)给定的支持。

任何帮助将不胜感激, 感谢

0 个答案:

没有答案