子圖同構定義:
給定圖$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’$滿足一下性質:
- $M'[i][j]=1$ 表示Q中第$i$-個頂點對應$G$中的第$j$個頂點;
- $M'$的每行僅有一個$1$;
- $M'$的每列$1$的個數至多只有一個。
子圖同構就變成了尋找矩陣$M'$,那么如何尋找$M'$?1976年Ullmann給出了尋找算法(Ullmann Algorithm).
Ullmann Algorithm的大致過程:
- 尋找矩陣$M'_{n\times m}$使得\[MC = M'(M' \cdot MB)^T ,\ \ \forall i\forall j:(MA[i][j] = 1) \Rightarrow (MC[i][j] = 1).\]
- 否則,報告不存在矩陣$M'$.
Ullmann Algorithm的基本思想:
Step 1. 建立矩陣$M_{n\times m}$。 使得$M[i][j]=1$,如果
- Q中第$i$-個頂點與$G$中第$j$-個頂點有相同的標簽;
- 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問題。