1. VF2算法
1.1 基本定义和整体流程
- 原文An Improved Algorithm for Matching Large Graphs。
- VF算法能够解决有向/无向,有标签/无标签,图同构问题。原文中的符号和VF3算法不同,这里对某些符号采用了更为广泛地符号定义。
- 给定两个图G1=(V1,E1)G_1=(V_1,E_1)G1=(V1,E1), G2=(V2,E2)G_2=(V_2,E_2)G2=(V2,E2)和一个映射M⊂V1×V2M \subset V_1 \times V_2M⊂V1×V2, 当且仅当MMM是一个双射且对应边也是双射时,G1G_1G1和G2G_2G2称为同构。
- 作者采用了一种称为State Space Representation (SSR)的方法判断同构。假设当前状态为sss,则M(s)M(s)M(s)表示MMM中与状态sss相关的映射的集合。则M1(s)M_1(s)M1(s)表示M(s)M(s)M(s)中属于V1V_1V1中的点构成的集合,同理M2(s)M_2(s)M2(s)。E1(s)E_1(s)E1(s)表示E1E_1E1中连接M1(s)M_1(s)M1(s)中点的边,同理E2(s)E_2(s)E2(s)。
- 通过M1(s)M_1(s)M1(s)和E1(s)E_1(s)E1(s)我们可以得到G1G_1G1的子图G1(s)G_1(s)G1(s),同理G2(s)G_2(s)G2(s)。
- 算法整体流程如下图所示

其中F(s,n,m)F(s,n,m)F(s,n,m)是一个布尔函数,也称为feasibility function。该函数的返回值如果是true,则表明将边(n,m)(n,m)(n,m)加入到当前状态sss(sss状态表示当前的部分映射M(s)M(s)M(s)是满足同构的)后,新状态s∗s^*s∗的部分映射M(s∗)M(s^*)M(s∗)仍然满足同构。因此最终的状态可能是G1G_1G1与G2G_2G2同构或者两个图的子图同构。返回值为false,则表明(n,m)(n,m)(n,m)不应该加入到当前状态,能够起到剪枝的作用。
1.2 P(s)P(s)P(s)的定义
- 给定一个图GGG和图中的一个点nnn,我们定义Pred(G,n)Pred(G,n)Pred(G,n)为GGG中nnn的入度邻居节点构成的集合(nnn的前继集合),定义Succ(G,n)Succ(G,n)Succ(G,n)为GGG中nnn的出度邻居节点构成的集合(nnn的后继集合)。
- 我们定义out-terminal集合T1out(s)T^{out}_1(s)T1out(s)为G1G_1G1中不属于M1(s)M_1(s)M1(s)但属于M1(s)M_1(s)M1(s)中节点的后继节点构成的集合。定义in-terminal集合T1in(s)T^{in}_1(s)T1in(s)为不属于M1(s)M_1(s)M1(s)但属于M1(s)M_1(s)M1(s)中节点的前继节点构成的集合。同理定义T2out(s)T^{out}_2(s)T2out(s)和T2in(s)T^{in}_2(s)T2in(s)。
- P(s)P(s)P(s)采用如下的方式构造:
(1)如果T1out(s)T^{out}_1(s)T1out(s)和T2out(s)T^{out}_2(s)T2out(s)都不为空,
P(s)=T1out(s)×{ min T2out(s)}P(s)=T^{out}_1(s) \times \{min\ T^{out}_2(s)\}P(s)=T1out(s)×{ min T2out(s)}
min T2out(s)min\ T^{out}_2(s)min T2out(s)表示T2out(s)T^{out}_2(s)T2out(s)中具有最小label的节点(任意一个排序方法均可)。
(2)如果T1out(s)T^{out}_1(s)T1out(s)和T2out(s)T^{out}_2(s)T2out(s)都为空,且T1in(s)T^{in}_1(s)T1in(s)和T2in(s)T^{in}_2(s)T2in(s)均不为空,
P(s)=T1in(s)×{ min T2in(s)}P(s)=T^{in}_1(s) \times \{min\ T^{in}_2(s)\}P(s)=T1in(s)×{ min T2in(s)}
(3)如果四个terminal集合都是空的,
P(s)=(V1−M1(s))×{ min (V2−M2(s))}P(s)=(V_1-M_1(s)) \times \{min\ (V_2-M_2(s))\}P(s)=(V1−M1(s))×{ min (V2−M2(s))} - 当出现只有一个in-terminal集合或者只有一个out-terminal集合为空的时候,可以证明状态sss不可能构造出最终的同构,因此状态sss不需要再继续分析。同时P(s)P(s)P(s)的定义可以保证同一个状态不会被访问两次。
1.3 F(s,n,m)F(s,n,m)F(s,n,m)的定义
为了判断F(s,n,m)F(s,n,m)F(s,n,m),算法需要检查所有与n,mn,mn,m相连的点。
- 对于在M1(s)M_1(s)M1(s)和M2(s)M_2(s)M2(s)中的节点,算法检查M1(s)M_1(s)M1(s)中这些节点和nnn的出边入边是否与M2(s)M_2(s)M

本文详细介绍了VF2和VF3两种图同构算法,包括它们的基本定义、整体流程、关键函数及其在处理图匹配问题时的优化策略。VF2算法通过State Space Representation判断同构,VF3在VF2基础上引入节点分类,进一步裁剪搜索空间,提高效率。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



