【问题标题】:Any working example of VF2 algorithm?VF2算法的任何工作示例?
【发布时间】:2011-07-19 07:52:07
【问题描述】:

我一直在阅读VF2 algorithm,以查找两个图是否同构但不知何故错过了大局。可能是我缺少该领域的相关背景,但我所看到的只是我需要在每个步骤中使用的一堆规则,而没有看到为什么要执行这些步骤的直观解释。

从基本的谷歌搜索来看,这似乎被认为是查找两个图是否同构的事实上的算法之一,但由于某种原因,我无法找到一个简单到足以在高层次上理解的解释。还是这个算法有别的名字?

无论如何,有人知道这个算法如何工作的任何运行示例吗?

【问题讨论】:

  • 您的上一个(相关)问题发生了什么?删除?我现在也有兴趣/正在做非常相似的事情。如果可以的话,给我发一封电子邮件(地址见我的个人资料)。那我就把这条评论删了。
  • @Szabolcs:实际上,我还没有完全删除这个问题。对于那个很抱歉。我仍在考虑对稳定性的良好定义,并考虑在几个小时内重新发布它,因为当你问我如何定义稳定性时我被难住了。但是,我暂时取消了我的问题。

标签: algorithm language-agnostic graph graph-theory


【解决方案1】:

我不确定这就是您要查找的内容,但 VF2 算法如下所示。

假设您有 2 个图:V 和 V',并且您想将 V 与 V' 匹配

算法沿着一棵树向下,在每一步你尝试将 V 的下一个元素与 V' 中的一个元素匹配,当你遍历 V' 中的所有节点时停止(当你找到一个叶子时)。

算法:

  • 第一步:将空 V 与空图 V' 匹配。
  • 第二步:尝试将V中的一个节点与V'中的一个节点匹配
  • ...
  • 第 N 步:尝试将 V 中的一个节点与 V' 中的一个新节点匹配,如果 您不能在树中返回一步并尝试在树中进行新匹配 上一步......如果你不能再回去等等......
  • ...
  • END : 当你找到一片叶子时,即当你遍历所有节点时 在 V' 中,或者当您穿过整棵树而没有找到一片叶子时。

示例

这里是一个例子,算法从树的左到右进行。

“A B”表示将V的节点A与V'的节点B匹配

希望我很清楚,这就是您要寻找的。​​p>

【讨论】:

  • +1 是的。这就是我要找的!非常感谢。还有几个(愚蠢的)问题。当您将 V(1) 映射到 V'(1) 时,为什么会遇到 NO SOL?。让我们假设是这种情况,现在我们回溯并将 V(1) 映射到 V'(2),然后将 V(3) 映射到 V'(2),最后将 V(3) 映射到 V'(1)?是这样读的吗?在那种情况下,你的图表的结论是什么?我们映射了 V(1)-V'(2)、V(3)-V'(2) 和 V(3)-V'(1)。为什么将 V(3) 与两个节点匹配?或者我一定是解释错了。正如你到目前为止所解释的那样,如果你不介意的话,你能把它写得更冗长吗?
  • 你说得对。我刚刚纠正了它。我在节点名称上犯了一个错误。我应该再次验证这一点:D ...在两个图中使用 1 , 2 , 3 和 1 ,2 ,3 有点令人困惑。我应该将其更改为 1,2 ,3 和 A B C 。希望这个是对的。 :)
  • 非常感谢!我以为我错过了最冗长的解释!谢谢你修复它。我接受了您的答案作为解决方案,但是如果您有时间,您愿意解释一下这五个规则背后的直觉是什么(R_pred、R_succ、R_new ...)吗?这些是否用于总结图表中的No Sol 案例?
  • 不客气。有时间我会试着看看规则。
  • 太棒了!再次非常感谢您。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多