第四章 鄰近樣式圖型探勘演算法
4.2 避免樣式重覆列舉方法
圖 12 圖型成長無法避免的循環性同構
依 4.1 所描述之子圖樣式圖型成長方法,本研究利用類似 gSpan[19]深先搜尋 的機制進行探勘,產生所有的常見鄰近子圖樣式。首先列出具相同固定節點的常 見 1-鄰近子圖樣式,再一一對常見 1-鄰近子圖樣式根據其節點的相鄰邊圖形成長 出候選 2-鄰近子圖樣式,從 k-候選鄰近子圖樣式(k2)中找出常見 k-鄰近子圖樣
式,再繼續用圖型成長產生 k+1-候選鄰近子圖樣式,每個候選樣式都是當該常見
k-子圖的子圖樣式中找不到常見 k+1-鄰近子圖樣式時,則再從此 k-子圖之兄弟樣 式往下進行圖型成長探勘,以此類推,這是本論文方法所採用的深先搜尋順序。
透過子圖樣式圖型成長過程,若圖型樣式為一條路徑(Path)則不會產生圖型同構 的樣式,但若形成樹結構(Tree)或是有返回邊的圖型(Graph)則可能產生圖型同 構的子圖樣式。因此我們運用字典編纂順序控制子圖樣式圖型成長,結合最小 DFS
編碼檢查,以避免產生圖型同構圖型。
首先介紹圖型同構會發生於兩種情形下:(1)不具返回邊的樣式重覆列舉(如 圖 13 所示),(2) 具返回邊的樣式重覆列舉(如圖 12 所圈起方框所示)。第一種 情況可透過字典編纂順序來避免減少發生同構的情形,第二種則需要以其對應最 小 DFS 編碼來檢查是否發生圖型同構。所謂不具返回邊的樣式重覆列舉發生在樣 式邊沒有排序,因此產生相異的樣式邊列舉順序但實際鄰近子圖樣式相同。而具 返回邊的樣式重覆列舉則是因圖型成長(如圖 12 兩正方形所標示之圖型),新增返 回邊使得圖型產生迴圈(Cycle)而造成的,簡稱循環性圖型同構。
圖 13 不具返回邊之圖型同構
第一種情況我們運用字典編纂順序控制子圖樣式圖型成長來避免:在樣式新 增一條邊時,可透過比較樣式邊標示來避免產生圖型同構樣式。根據圖 14,
<0,1,P,a,C,1>的邊標示順序小於<0,1,P,c,P,0>,因此加入<0,1,P,a,C,1>邊的
子 圖 樣 式 可 再 加 入 邊 <0,2,P,c,P,0> 產 生 圖 13 左 下 的 樣 式 圖 。 但 先 加 入
<0,1,P,c,P,0>邊的子圖樣式不可加入邊<0,2, P,a,C,1>,即可防止發生此種子 圖樣式圖型同構的情況。
部分的循環性圖型同構也可因此而避免(例如圖 12 兩方框內箭頭所指的圖 型),但例如圖 12 之兩方框標示圖產生的圖型同構仍無法避免。由於固定節點 P 之鄰邊有兩條相等邊,因無法以字典編纂順序定出拜訪排序,因此在此處便需要 最小 DFS 編碼來對圖型定義圖型標準型樣,若檢查表示圖型之編碼不為最小編碼 即該圖型造成圖型同構,並使該圖型被刪減,因此可減少圖型同構以及儲存空間 之使用。
以下將說明如何在探勘過程避免找出圖型同構子圖的作法,在子圖圖型成長 每次從父圖型樣式成長加入新的一條邊,同一節點中因成長而加入的邊只能比該 節點已加入圖型中的邊順序大。 因此,在 4.1 介紹的子圖圖型成長過程,鄰接串 列的索引往後遞移指向新的邊做為加入邊時,需檢查索引位置前一位置是否與加 入邊的邊編碼相異。若相異則需將鄰接串列中索引位置前的邊都加入至父圖型樣 式的資料結構,接著再複製父圖型結構,繼續子圖圖型成長的處理步驟;否則直 接進行子圖圖型成長的處理步驟。藉由加入這樣的機制來防止加入邊產生的圖型 同構,因加入邊的資訊已存在於父圖型樣式的資料結構中,故可避免產生出不具 返回邊的樣式重覆列舉以及部分循環性圖型構等圖型。
銜接 4.2 說明的子圖樣式圖型成長範例(如圖 8 所示), P1在拜訪 L 的第一條
邊(如圖 14 所示)產生第一個的鄰近子圖樣式(0,_,P,_,_,_) /(0,1,P,a,C,1),且加入至 P’鄰近子圖樣式集合,接著進行鄰邊序列 L 的第二條邊,先檢查後的第二條邊
(P1,c,P2,0)是否跟前面的邊編碼節點與邊標示相異。由於(P1,c,P2,0)與(P1,a,C1,1)產 生之邊編碼相異,因此將(P1,a,C1,1)加入至 P1 圖型結構(如圖 7)的 Visited Edge
Table 更新成圖 15,接著依照子圖圖型成長步驟先複製更新後的 P1圖型結構,再 加入邊(P1,c,P2,0)產生新的鄰近子圖樣式及對應圖。
而其他圖型同構的情況必須採用 minimum DFS code 的檢查機制來檢查圖型 同構。將每一個樣式所產生出的 DFS code 透過重新建圖,並按字典編纂順序重 新拜訪可為該樣式得出最小深度搜尋碼來表示其圖型,因此若其 DFS code 不是 該樣式的 minimum DFS code,即表示樣式跟其他樣式產生圖形同構,因此將該樣 式從鄰近樣式對應表中刪除。
圖 14 鄰邊序列的相異樣式邊順序
圖 15 P1圖型結構加入避免同構的拜訪邊後