子图同构

子图同构定义:

      给定图$Q=(V(Q),E(Q),L_V,F)$和$G=(V(G),E(G),L_V',F')$,  称$Q$子图同构于$G$ 当且仅当存在一个映射$g:V(Q)\rightarrow V(G)$ 使得 

\[\forall x\in V(Q), F(v)=F'(g(v))\]

\[
\forall v_1 ,v_2 \in V(Q),\overrightarrow {v_1 v_2 } \in E(Q) \Rightarrow \overrightarrow {g(v_1 )g(v_2 )} \in E(G)
\]

     例,左图子图同构与右图:

左图  Q                       右图  G

图 1

因为存在映射g(有两种),如下图所示:

   

左图  Q                            右图  G                                     左图  Q                           右图  G

图 2                                                                                   图 3

      用$MA,MB$分别表示图$Q,F$的对应的边矩阵,其中$MA[i][j]=1$表示顶点$v_i$与$v_j$有边,$MA[i][j]=0$表示无边. $M'$表示映射g从$Q$到$G$的映射矩阵,$M'[i][j]=1$表示$Q$中第$i$个顶点$v_i$对应到$G$中的第$j$个顶点$v_j^'$,否则没有对应.

      例如,图2中的$Q,G,g$对应的矩阵可以表示为

                     

 图  4

      定理 1  如果图$Q$关于映射$g$子图同构于$G$,令

\[
MC = M'(M' \cdot MB)^T
\].

,则

\[
\forall i\forall j:(MA[i][j] = 1) \Rightarrow (MC[i][j] = 1).
\]

      根据图4,$MC = M'(M' \cdot MB)^T $,由于

这里显然,$MA$与$MC$满足定理1.

        子图同构映射$g$的$M’$满足一下性质:

  1. $M'[i][j]=1$ 表示Q中第$i$-个顶点对应$G$中的第$j$个顶点;
  2. $M'$的每行仅有一个$1$;
  3. $M'$的每列$1$的个数至多只有一个。

       子图同构就变成了寻找矩阵$M'$,那么如何寻找$M'$?1976年Ullmann给出了寻找算法(Ullmann Algorithm).

        Ullmann Algorithm的大致过程:

  1.  寻找矩阵$M'_{n\times m}$使得\[MC = M'(M' \cdot MB)^T ,\ \ \forall i\forall j:(MA[i][j] = 1) \Rightarrow (MC[i][j] = 1).\]
  2.  否则,报告不存在矩阵$M'$.

      Ullmann Algorithm的基本思想

      Step 1.  建立矩阵$M_{n\times m}$。 使得$M[i][j]=1$,如果

  1. Q中第$i$-个顶点与$G$中第$j$-个顶点有相同的标签;
  2. Q中第$i$-个顶点的度小于等于$G$中第$j$-个顶点的度;

      Step  2.  从矩阵$M_{n\times m}$生成矩阵$M'$. 即对$M_{n\times m}$进行逐行检查,将部分不为0的元素变成0,使得矩阵$M'$满足每行有且仅有一个元素为1,每列最多只有一个元素不为0.(最大深度为$|MA|$.)

      Step  3   按照以下规则判断矩阵$M'$是否满足条件:

\[MC = M'(M' \cdot MB)^T ,\ \ \forall i\forall j:(MA[i][j] = 1) \Rightarrow (MC[i][j] = 1).\]

     Step 4   迭代以上步骤,列出所有可能的矩阵$M'$.

 

     以上最坏的情况是,可能有$O(|MB|!)$个可能的矩阵$M'$. 实际上,子图同构算法是一个经典的NP-hard问题。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/huadongw/p/4154295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值