我试图实现一种启发式解决方案,以从给定的一组图中识别同构图的类。目前,我用其多个邻居度数(WL算法)标记每个节点。
对于诸如学位常规图之类的情况,这显然会产生误报。我希望找到另一种廉价可实现的(时间和空间受限的)启发式算法,它可以切割WL算法的角落情况。基本上我正在寻找一对易于实现的启发式方法,它们之间会产生边缘误报。
我应该看看除WL算法之外的哪种启发式算法?
谢谢!
答案 0 :(得分:0)
可能会考虑本文中讨论的最小色彩最短路径不变量:http://www.academia.edu/5111652/A_new_refinement_procedure_for_graph_isomorphism_algorithms?
答案 1 :(得分:0)
有一个实现VF2的C ++库: http://mivia.unisa.it/datasets/graph-database/vflib/
VF2与其他一些算法的比较: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.98.2640&rep=rep1&type=pdf
答案 2 :(得分:0)
另一个可以相对便宜计算的不变量是顶点所属的循环列表。当然,这需要在图表中找到周期,但有很多算法可以做到这一点。
答案 3 :(得分:0)
我发现该算法属于k维Weisfeiler-Lehman算法的类别,并且它失败了常规图。更多信息:
http://dabacon.org/pontiff/?p=4148
原帖如下:
我已经解决了这个问题,在图表数据库中找到了同构图(含有化学成分)。
简而言之,该算法使用幂迭代方法创建图的哈希。可能存在误报哈希冲突,但其概率非常小(我没有与成千上万的图表发生任何此类冲突)。
算法的工作方式是:
做N(其中N是图的半径)迭代。在每次迭代和每个节点上:
第一步,节点的哈希受其直接邻居的影响。在第二步,节点的哈希受到距离它的2跳的邻域的影响。在第N步,节点的散列将受到其周围的邻域N跳的影响。所以你只需要继续运行Powerhash for N = graph_radius步骤。最后,图中心节点的哈希将受到整个图的影响。
要生成最终哈希,请对最后一步的节点哈希值进行排序并将它们连接在一起。之后,您可以比较最终的哈希值,以查找两个图形是否同构。如果您有标签,则将它们添加到您为每个节点计算的内部哈希中(以及每个步骤)。
这里有更多背景资料:
https://plus.google.com/114866592715069940152/posts/fmBFhjhQcZF
您可以在此处找到它的源代码:
https://github.com/madgik/madis/blob/master/src/functions/aggregate/graph.py