子图同构
子圖同構定義:
給定圖$Q=(V(Q),E(Q),L_V,F)$和$G=(V(G),E(G),L_V',F')$, 稱$Q$子圖同構于$G$ 當且僅當存在一個映射$g:V(Q)ightarrow V(G)$ 使得
[forall xin 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 iforall j:(MA[i][j] = 1) Rightarrow (MC[i][j] = 1).
]
根據圖4,$MC = M'(M' cdot MB)^T$,由于
這里顯然,$MA$與$MC$滿足定理1.
子圖同構映射$g$的$M’$滿足一下性質:
$M'[i][j]=1$ 表示Q中第$i$-個頂點對應$G$中的第$j$個頂點;
$M'$的每行僅有一個$1$;
$M'$的每列$1$的個數至多只有一個。
子圖同構就變成了尋找矩陣$M'$,那么如何尋找$M'$?1976年Ullmann給出了尋找算法(Ullmann Algorithm).
Ullmann Algorithm的大致過程:
尋找矩陣$M'_{n imes m}$使得[MC = M'(M' cdot MB)^T , forall iforall j:(MA[i][j] = 1) Rightarrow (MC[i][j] = 1).]
否則,報告不存在矩陣$M'$.
Ullmann Algorithm的基本思想:
Step 1. 建立矩陣$M_{n imes m}$。 使得$M[i][j]=1$,如果
Q中第$i$-個頂點與$G$中第$j$-個頂點有相同的標簽;
Q中第$i$-個頂點的度小于等于$G$中第$j$-個頂點的度;
Step 2. 從矩陣$M_{n imes m}$生成矩陣$M'$. 即對$M_{n imes m}$進行逐行檢查,將部分不為0的元素變成0,使得矩陣$M'$滿足每行有且僅有一個元素為1,每列最多只有一個元素不為0.(最大深度為$|MA|$.)
Step 3 按照以下規則判斷矩陣$M'$是否滿足條件:
[MC = M'(M' cdot MB)^T , forall iforall j:(MA[i][j] = 1) Rightarrow (MC[i][j] = 1).]
Step 4 迭代以上步驟,列出所有可能的矩陣$M'$.
以上最壞的情況是,可能有$O(|MB|!)$個可能的矩陣$M'$. 實際上,子圖同構算法是一個經典的NP-hard問題。
總結
- 上一篇: 深度 | 一篇文章带你进入无监督学习:从
- 下一篇: 【caffe-Windows】微软官方c