子图同构之Ullmann

子图同构之Ullmann

1.子图同构问题描述

​ 首先描述一下子图同构是什么意思,一个图由一系列节点和一系列连接节点的边构成,节点和边都可以有标签,也就是可以给他们按属性分类。

​ 精确点:一个图G=(V,E)G=(V,E)G=(V,E)由集合VVV和集合EEE组成,VVV是节点(node)集合, EEE是边(edge)集合,且E⊂V×VE\subset V\times VEV×V ,用LvL_vLv表示节点上的标签集合,LeL_eLe表示边上的标签集合,那么每个节点对应的标签由函数(或者说映射)λv:V→Lv\lambda_v:V\rightarrow L_vλv:VLv 确定,每条边对应的标签由函数λe:E→Le\lambda_e:E\rightarrow L_eλe:ELe 确定。

​ 现在给定两个图G1=(V1,E1)G_1=(V_1,E_1)G1=(V1,E1), G2=(V2,E2)G_2=(V_2,E_2)G2=(V2,E2) ,其中G1G_1G1是比较小的图(我们把它叫做pattern graph),G2G_2G2是比较大的图(我们把它叫做target graph),用集合M⊂V1×V2M\sub V_1\times V_2MV1×V2 表示两个图中节点的对应关系。如果节点u∈V1u\in V_1uV1,则μ(u)∈V2\mu(u)\in V_2μ(u)V2表示与节点uuu对应的G2G_2G2中的节点;如果节点v∈V2v\in V_2vV2,则ν(v)∈V1\nu(v)\in V_1ν(v)V1表示与节点vvv对应的G1G_1G1中的节点。

G1G_1G1 G2G_2G2
对应关系 uuu μ(u)\mu(u)μ(u)
对应关系 μ−1(v)\mu^{-1} (v)μ1(v) vvv

​ 如果以下6个条件成立,则这两个图是子图同构的。


  1. ∀u∈V1∃μ(u)∈V2:(u,μ(u))∈M \forall u\in V_1 \quad \exist \mu(u)\in V_2:(u,\mu(u))\in MuV1μ(u)V2:(u,μ(u))M
  2. ∀u,u′∈V1u≠u′⇒μ(u)≠μ(u′)\forall u,u^{'}\in V_1 \quad u\neq u^{'}\Rightarrow \mu(u)\neq \mu(u^{'}) u,uV1u=uμ(u)=μ(u)
  3. ∀(u,u′)∈E1∃(μ(u),μ(u′))∈E2)\forall (u,u^{'})\in E_1 \quad \exist (\mu(u),\mu(u^{'}))\in E_2)(u,u)E1(μ(u),μ(u))E2)
  4. ∀u,u′∈V1(μ(u),μ(u′))∈E2⇒(u,u′)∈E1\forall u,u^{'} \in V_1 \quad (\mu(u),\mu(u^{'})) \in E_2 \Rightarrow (u,u^{'}) \in E_1u,uV1(μ(u),μ(u))E2(u,u)E1
  5. ∀u∈V1λV1(u)=λV2(μ(u))\forall u \in V_1 \quad \lambda_{V_1}(u)=\lambda_{V_2}(\mu(u))uV1λV1(u)=λV2(μ(u))
  6. ∀(u,u′)∈E1λe1(u,u′)=λe2(μ(u),μ(u′))\forall (u,u^{'}) \in E_1 \quad \lambda_{e_1}(u,u^{'})=\lambda_{e_2}(\mu(u),\mu(u^{'}))(u,u)E1λe1(u,u)=λe2(μ(u),μ(u))

用人话来解释一下:

  1. 对于小图中每个节点,大图中都要有一个对应的节点与之对应,并且这样一对一对的节点构成了集合MMM

  2. 小图中任意两个不一样的节点,他们对应的大图中的节点不能是同一个;

  3. 小图中每条边,大图中都有一条边与之对应,并且他们两端的节点一一对应;

  4. 小图中任意两个节点,如果他们对应的大图中的节点之间有一条边,那么小图中这两个节点之间也得有条边;

  5. 每对对应节点的label要相同,也就是这俩节点类型或属性相同;

  6. 每对对应边的label要相同,也就是说这俩边的类型或属性相同。

​ 综上所述,子图同构简单来说就是,大图中有一个子结构,长得跟小图一模一样,而且这个子结构的节点之间不能多出小图中不存在的边来,如果要去掉最后这个而且,就把上面第4个条件去掉~

2 ullmann算法子图同构判定方法

​ 首先,图G1=(V1,E1)G_1=(V_1,E_1)G1=(V1,E1)的邻接矩阵为A=[aij]A=[a_{ij}]A=[aij],图G2=(V2,E2)G_2=(V_2,E_2)G2=(V2,E2)的邻接矩阵为B=[bij]B=[b_{ij}]B=[bij],其中邻接矩阵构建规则如下:


xij={ 1      存在节点i→节点j的边0  不存在节点i→节点j的边 x_{ij}=\left\{ \begin{aligned} 1 \ \ \ \ \ \ 存在节点i\rightarrow 节点j的边 \\ 0 \ \ 不存在节点i\rightarrow 节点j的边 \end{aligned} \right. xij={ 1      存在节点i节点j的边0<

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值