Algorithm VF2算法步骤与示例

Algorithm VF2算法步骤与示例,algorithm,graph,graph-algorithm,isomorphism,Algorithm,Graph,Graph Algorithm,Isomorphism,有人能用简单的话解释图同构的VF2算法的步骤吗?我正在学习这个算法,但是如果没有一个有效的例子,这个算法会很苛刻。有人能指引我正确的方向吗?谢谢。我将尝试快速解释一下我以前对这个问题的回答: 我将使用与上一个答案相同的示例: 上面的两张图是V和V’(图中没有V’,但它是右边的一张) 图中描述了VF2算法 一步一步 我想知道V和V'是否同构 我将使用以下符号:XV是V中的节点X 在VF2算法中,我将尝试将V中的每个节点与V'中的一个节点相匹配 第1步: 我将空V与空V匹配:它始终有效 第二步:

有人能用简单的话解释图同构的VF2算法的步骤吗?我正在学习这个算法,但是如果没有一个有效的例子,这个算法会很苛刻。有人能指引我正确的方向吗?谢谢。

我将尝试快速解释一下我以前对这个问题的回答:

我将使用与上一个答案相同的示例:

上面的两张图是V和V’(图中没有V’,但它是右边的一张)

图中描述了VF2算法

一步一步 我想知道V和V'是否同构

我将使用以下符号:XV是V中的节点X

在VF2算法中,我将尝试将V中的每个节点与V'中的一个节点相匹配

第1步:

我将空V与空V匹配:它始终有效

第二步: 我可以将1V与1V、2V或3V匹配

我将1V与1V匹配:它始终有效

第三步:

我可以将2V与2V'或3V'匹配

我将2V与2V匹配:它之所以有效,是因为{1v2v}和{1V'2V}是同构的

第4步:

我尝试将3V与V中的节点匹配:我不能!{如果在V'中的节点3和2之间有一条边,而在3和1之间没有边,这是可能的。)

所以我回到第二步

第五步:

我将2V与3V匹配'

第6步:

与步骤4相同

我回到步骤2。步骤2中没有解决方案,我回到步骤1

第7步:

我将1V与2V匹配'

第8步:

我将2V与1V匹配'

第9步:

我将3V与3V匹配

它是有效的,我将{1v2v3v}与{2V'1V'3V}匹配

这些图是同构的

如果我测试了所有的解决方案,但它始终不起作用,那么图形就不会同构

希望这有帮助


关于“匹配”的问题,请参阅维基百科关于图同构的文章:

这是与图G和H匹配的函数f的一个很好的示例:

希望您能通过此插图更好地理解此算法

VF算法的高级概述如下:

程序匹配 输入:中间状态s;初始状态s0有M(s0)= 输出:两个图之间的映射 如果M(s)覆盖G2的所有节点,则 输出M(s) 其他的 计算候选对的集合P(s)以包含在M(s)中 FOREACH(n,m)P(s) 如果F(s,n,m),那么 计算通过将(n,m)与m(s)相加得到的状态s 电话配对 如果结束 端部FOREACH 恢复数据结构 如果结束 结束程序
谢谢你的解释,但我不明白匹配的含义,就像你在步骤2中写的“我匹配1V巫婆1V”:它总是有效的如何将1V与1V'成功匹配,因为两者都有不同的程度。能否请您进一步告诉我匹配节点的确切含义。我的意思是,应该满足哪些条件,以便我们可以说图1中的节点与图2中的某个节点成功匹配。您能告诉我如何匹配n吗ode with other我的意思是匹配的含义是什么,或者其他人是否可以解释这一点。@AbdulSamad匹配就像选择一个函数f:G=(V,E)->G'=(V',E')这样,对于G中的节点或边中的任何点,都将返回G中的新节点和边。如果今天晚些时候还不清楚,我将尝试为您澄清这一点time@AbdulSamad我编辑了我的文章,以举例说明匹配的含义。如果你还有问题,请毫不犹豫地问。@RickyBobby“我将2V与2V匹配”:它之所以有效,是因为{1v2v}和{1V'2V}是同构的“你的意思是说{1v2v}和{1V'2V'}是同构的吗?因为{1V'2V}不在同一个图中,所以它们之间没有边。 PROCEDURE Match(s) INPUT: an intermediate state s; the initial state s0 has M(s0)= OUTPUT: the mappings between the two graphs IF M(s) covers all the nodes of G2 THEN OUTPUT M(s) ELSE Compute the set P(s) of the pairs candidate for inclusion in M(s) FOREACH (n, m) P(s) IF F(s, n, m) THEN Compute the state s´ obtained by adding (n, m) to M(s) CALL Match(s ) END IF END FOREACH Restore data structures END IF END PROCEDURE