VF2, VF3算法

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

1. VF2算法

1.1 基本定义和整体流程

  1. 原文An Improved Algorithm for Matching Large Graphs。
  2. VF算法能够解决有向/无向,有标签/无标签,图同构问题。原文中的符号和VF3算法不同,这里对某些符号采用了更为广泛地符号定义。
  3. 给定两个图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_2MV1×V2, 当且仅当MMM是一个双射且对应边也是双射时,G1G_1G1G2G_2G2称为同构。
  4. 作者采用了一种称为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)
  5. 通过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)
  6. 算法整体流程如下图所示
    在这里插入图片描述
    其中F(s,n,m)F(s,n,m)F(s,n,m)是一个布尔函数,也称为feasibility function。该函数的返回值如果是true,则表明将边(n,m)(n,m)(n,m)加入到当前状态ssssss状态表示当前的部分映射M(s)M(s)M(s)是满足同构的)后,新状态s∗s^*s的部分映射M(s∗)M(s^*)M(s)仍然满足同构。因此最终的状态可能是G1G_1G1G2G_2G2同构或者两个图的子图同构。返回值为false,则表明(n,m)(n,m)(n,m)不应该加入到当前状态,能够起到剪枝的作用。

1.2 P(s)P(s)P(s)的定义

  1. 给定一个图GGG和图中的一个点nnn,我们定义Pred(G,n)Pred(G,n)Pred(G,n)GGGnnn的入度邻居节点构成的集合(nnn的前继集合),定义Succ(G,n)Succ(G,n)Succ(G,n)GGGnnn的出度邻居节点构成的集合(nnn的后继集合)。
  2. 我们定义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)
  3. 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)=(V1M1(s))×{ min (V2M2(s))}
  4. 当出现只有一个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相连的点。

  1. 对于在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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值