第四章 偵測常見子圖樣式改變演算法
本章將說明如何使用第三章所介紹的圖型特徵結構,進行新進累積圖型資料 集是否包含基底常見子圖樣式之偵測比對,並計數出各基底常見子圖樣式在新進 累積圖型資料集中的支持度,判斷是否仍為常見樣式。此方法稱為偵測常見子圖 樣式改變(Frequent sub-Graphs Change Detection)演算法,簡稱(FGCD)演算法。
4-1 比對流程處理概念
為了方便累積圖型資料集略過非常見基底子圖,快速找到需進行包含比對之 基底常見子圖樣式群,我們建立基底常見1-子圖陣列及基底常見 2-子圖陣列,基 底常見1-子圖陣列內容如下:
(1) 常見 1-子圖邊標示編碼。
(2) 常見 1-子圖在基底常見子圖樣式中的編號。
(3) 起始指標:指向直接子孫樣式在常見 2-子圖陣列中之起始位置。
(4) 結尾指標:指向直接子孫樣式在常見 2-子圖陣列中之結尾位置。
並建立常見2-子圖陣列,內容如下:
(1) 常見 2-子圖最後一個邊標示編碼。
(2) 常見 2-子圖在基底常見樣式之編號。
(3) 兄弟樣式連接串列: gSpan探勘過程中,當子圖樣式GB無常見子孫樣式時,
接下來會輸出常見兄弟樣式或常見之祖先兄弟樣式GB’,也就是當基底子圖樣式 GB’之深先搜尋編碼長度小於等於前一個子圖樣式GB,即為我們要記錄之常見兄
40
弟樣式或常見之祖先兄弟樣式。藉由兄弟樣式連接串列可省略包含不為常見之基 底子圖樣式之比對。連接串列之節點中存放內容如下:
(1)#GB:兄弟樣式或祖先樣式之兄弟樣式GB’之編號 (2) eno:GB’之深先搜尋編碼長度。
建立完表4.1所有基底常見子圖後的常見 1-子圖陣列,常見 2-子圖陣列及兄 弟連接串列如圖4.1。
040,t’
030,t 001,0
… …
040,11 030,1
1-子圖
2-子圖
5,4
10,3 9,4
NULL
#g,eno
…
#g,eno
…
圖4.1 常見 1-子圖陣列,常見 2-子圖陣列及兄弟連接串列
41
表4.1 gSpan 探勘結果順序 最小深先搜尋編碼
(Min DFS Code) 常見子圖樣式
編號
ζ3 ζ2
ζ4
ζ5 v0
1 0 0
0 3
0 04
3
v2 v4 v3
v1 4
0 v0 1
0 0 0
4 3
v1 v2
v3
0 v0 1
0 0 0
4 3 v1 v2 4
v3 v0 1
0 0
0 3
v1 v2
(0,1,0,0,1) ζ1 v0
1 0 0 v1
0 v0 1
0 0 0
4 3
v1 v2
v3 04
v4 β1
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,4,0,4,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,0,0,4,0),(0,4,0,3,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,4,0,4,0),(4,0,0,4,0)) 0
v0 1
0 0 0
4 3
v1 v2
v3 04
v4 4 β2
((0,1,0,0,1),(0,2,0,3,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,0,0,4,0)) 0
1
2
3
4
5
6
42
…
…
…
…
…
…
0 v0
1 0
0 0
4 3 v1 v2
v3
0 4
v4 4 4
1 0
0 0
4 3 3
v0
v2
v3 v1
0
1 0
0 3
0
0 4 3
v0
v2 v4
v3 v1
γ
n β4
0 v0
1 0
0 0
4 3 v1 v2
v3
0 4
v4 4 4
3
0 v5
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,4,0,4,0),(4,0,0,4,0), (4,2,0,4,0),(0,5,0,3,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(0,4,0,3,0))
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,3,4)) 8
9
10 β3
((0,1,0,0,1),(0,2,0,3,0),(2,3,0,4,0),(3,4,0,4,0),(4,0,0,4,0), (4,2,0,4,0))
7
1 0
0
0 4
v0
v2 v1
((0,1,0,0,1),(0,2,0,4,0)) 11
0 0 3
v0
v1
((0,1,0,3,0) t
0 4
v0
v1
((0,1,0,4,0)
t’ 0
43
比對流程的處理概念如下:根據向下包含特性(downward closure property),一個 基底常見1-子圖,若其在累積圖型資料集中不為一個常見 1-子圖,則以此常見 1- 子圖為首的基底子圖樣式群全部不需比對。因此先統計各1-基底常見子圖在新進 累積圖型資料集中的出現次數,記錄在新進累積圖型資料集中仍為常見的1-基底 常見子圖。接下來只需比對以這些常見1-子圖為首的基底子圖樣式,由第三章建 立之基底常見子圖之常見1-子圖陣列,索引仍為常見的常見 1-子圖所在的基底子 圖樣式編號,直接由編號所在之基底子圖樣式開始進行包含比對。
本論文使用投影資料庫當做搜尋空間,將第三章記錄之累積圖型集資料中常 見 1-子圖的圖型編號串列當做投影資料庫,依gSpan輸出常見子圖的順序,即從 編碼最小的常見 1-子圖為首的子圖樣式開始,對其投影資料庫中的圖型進行比 對。首先比對編碼最小的基底常見2-子圖,若基底常見 2-子圖的最後一個邊標示 編碼在累積圖型資料集中不為一個常見1-子圖,則以此常見 2-子圖為首的基底子 圖樣式群全部不需比對,略過包含以此常見 2-子圖為首之基底子圖樣式群之比 對,以儲存之基底常見子圖的常見2-子圖陣列,找到下一個常見 2-子圖,繼續進 行在新進累積圖型資料集中之包含比對;反之,若常見2-子圖最後一個邊標示編 碼在累積圖型資料集中仍為一個常見1-子圖,則開始對投影資料庫中的圖型比對 是否包含此常見2-子圖,記錄下比對成功的圖型集合作為新投影資料庫,並記錄 其在累積圖型資料集中之計數值;接下來依序投影比對以此常見2-子圖為開頭的 基底常見子圖樣式群。在比對過程中,若發現基底常見子圖在新進累積圖型資料
44
集中已不為常見,則其子孫子圖樣式必不為常見,直接省略對包含此基底常見子 圖之所有子孫子圖樣式之比對;反之,若基底常見k-子圖GB在新進累積圖型資料 集中為常見,則記錄比對成功的圖型集合作為新投影資料庫,以及各別圖型集合 中成功比對包含之起始頂點,以其深先搜尋編碼長度k當做索引值,儲存在一個 暫存陣列中,並記錄GB在累積圖型資料集中之計數值,供在對GB之直接子孫樣式 進行比對時便只需考慮投影資料庫中的圖型,可大量減少比對成本;當以此常見 2-子圖為首之基底子圖樣式全部比對完畢之後,再回到上層投影資料庫比對以下 一個常見2-子圖為首的基底子圖樣式群;以依類推;當已沒有基底常見 2-子圖樣 式以該常見1-子圖樣式為首,則繼續執行以下一個仍為常見 1-基底子圖樣式為首 的基底子圖樣式比對,直到沒有其他常見1-子圖為止。
以下我們將對基底常見子圖樣式分成樹狀結構、具有相等邊及具有返回邊三 種類型分別說明比對方法,並說明減少基底常見子圖比對處理技巧,以及趨勢轉 移判斷方式。
45
4-2 樹狀結構之基底常見子圖樣式特徵比對
令一個圖型G = (V,E),而某一個基底常見子圖樣式GB = (VB,EB),為避免重覆 比對G中已走訪過的頂點,在比對過程我們會建立一個陣列vnode,其索引值對應 到頂點編號,當走訪過頂點vi,則將vnode[i]設為 1。此外,為方便GB及G繼續向 下深先比對結構,在比對過程中,我們建立一個陣列vpool預設為空,陣列中記錄 GB中比對到的頂點及其可能對應到G中頂點的集合。
若基底常見子圖GB為一個樹狀結構,即子圖樣式中未包含返回邊及相等邊,
比對新進圖型G是否包含基底常見子圖GB的流程圖如圖4.2所示,虛擬碼如圖 4.3 所示。
流程圖中各函式說明如下:
(一) match_gloabl_structure(GB,G),比對兩個圖型的概括圖型特徵:
1.1)比較頂點與邊總數。
若|V|≥|VB|且|E|≥|EB|,則GB有可能被G所包含,執行 1.2,否則,回傳 比對失敗,結束比對。
1.2) 比對G之頂點有序分支數序列是否包含GB之頂點有序分支數序列。
46
B
令G之頂點有序分支數序列表示為{d1, d2,…, d|V|},且GB之頂點有序分 支度陣列表示為{ ,d1' d'2,…,d|V |' },若對i從 1 到|VB|,di≥d ,則稱G之頂點'i
match_global_structure(GB,G)
match=1?
match_startv(vgb,vg)
match=1?
match_edge(vgb,vg,vpool)
match=1?
pick_matchv(vgb,vg,vpool);
vpool為空? vgb= v0?
否 是
否 是
否
是
否
是
是
否
遞迴回傳比對成功
比對成功 比對失敗
vgb= v0? 是
否
遞 迴 呼 叫
vgb= v0,vg= v0
圖4.2 比對包含流程圖
47
圖4.3 比對包含主要架構之虛擬碼 比對包含主要架構
match = match_global_structure(GB,G);
if (!match) return false;//比對失敗 else{
vgb = v0;
vg = v0 ;// v|v|是G中最後一個頂點 while(vg != v|v|){
match = match_startv(vgb,vg);
if (!match) return false; //比對失敗 else{
match = match_edge(vgb,vg,vpool);
if (match){
if (vpool == NULL) return true; //比對成功 else{
match = pick_matchv(vgb,vg,vpool);
if (match) return true; //比對成功 else return false; //比對失敗 }//else vpool != NULL
}//if match_edge }//else match startv }//while vg != v|v|
}//else match_global_structure
48
有序分支數序列包含GB之頂點有序分支數序列,呼叫match_startv(vgb,vg)。
否則回傳比對失敗,結束比對。
以下分別用vg及vgb表示G及GB中正進行比對的頂點,其中g及gb分別為G及GB中的 頂點編號。
(二) match_startv(vgb,vg),尋找G及GB之起始頂點:
首先由G及GB兩個圖型之頂點v0當做起始點開始比對。
2.1) 比較頂點分支數。
比較deg(vg)是否大於等於deg(vgb)。若否,則將vg設為G中下一編號的頂點,
直到在G中找到符合此條件的頂點vg,執行2.2。
2.2) 標示vg已走訪。
為避免重覆走訪頂點vg,將頂點vg標示為已走訪,即將vnode[g]設為 1。執 行match_edge(vgb,vg,vpool)。進一步比對其連接串列節點中的資訊。根據 match_edge(vgb,vg,vpool)比對結果,若成功比對,則呼叫pick_matchv(vgb,vg, vpool)繼續執行,否則再繼續將vg設為G中下一編號的頂點,重覆 2.1 的檢
查。若未找到符合條件的頂點,則回傳比對失敗,結束比對。
(三) match_edge(vgb,vg,vpool),對應頂點連接邊資訊之比對:
49
3.1) 記錄比對資訊。
GB之頂點vgb具deg(vgb)個連接邊,依這些邊的邊標示由小而大一一處 理,令目前比對的邊為(vgb,vgb’)。對G中vg的deg(vg)個連接,亦依邊標示編 碼由小而大挑選,令G的挑選邊為(vg,vg’)。首先確定vg’是否走訪過,若已走 訪過則取vg的下一個連接邊;若未走訪過,再進一步比較兩個邊標示,比較
結果分為四種情況,:
情況3.1.1) 若l (vg,vg’) = l (vgb,vgb')。
50
≥
3.1.1.1) 若deg(vg’) deg(vgb’)。
則GB之連接邊(vgb,vgb’)在G中找到可對應邊(vg,vg');若GB中連接 邊的另一頂點vgb’具有向前邊(分支數大於 1),使用vpool陣列記錄vgb’
可能對應到G的頂點vg’所形成的集合。若vgb’不具有向前邊(分支數等 於1),表示GB不需繼續深先比對此頂點的連接邊,因此不記錄任何資
訊。取出G中vg的下一個連接邊,繼續執行3.1,比對是否尚有其它邊 亦可對應到(vgb,vgb’)。
3.1.1.2) 若deg(vg’) < deg(vgb’)。
則目前G之連接(vg,vg’)無法與GB之邊(vgb,vgb’)對應,因此取G中vg的 下一個連接為(vg,vg’),繼續執行 3.1,比對vgb之連接邊。
情況3.1.2) 若l (vg,vg’) > l (vgb,vgb’):此情況表示G之頂點vg之連接邊中,可
能對應到(vgb,vgb’)的邊皆已處理過。
3.1.2.1) vpool陣列中沒有任何vgb’的記錄。
表示在G中未曾成功比對到邊(vgb,vgb’),則G之頂點vg不可能有其它連接 邊與GB之邊(vgb,vgb’)對應,回傳比對失敗。
3.1.2.2) vpool陣列中有vgb’在G中對應之vg’記錄。
在G中曾成功對應到邊(vgb,vgb’),且G中已無其它連接邊可與GB的邊 (vgb,vgb’)對應,因此將(vgb,vgb’)設為vgb之下一個連接邊,繼續執行 3.1,
比對vgb之連接邊。
情況3.1.3) l (vg,vg’) < l (vgb,vgb’)。
取G中vg的下一個連接邊為(vg,vg’),繼續執行 3.1,比對vgb之連接邊。
情況3.1.4) GB或G之連接串列已無節點。
停止比對,執行3.2。
3.2) 回傳比對值。
檢查vgb是否尚有其他連接邊。
情況3.2.1) 若vgb已無其他連接邊或是僅剩最後一個曾被比對成功的連 接邊。
51
表示已完成所有vgb連接邊的比對,回傳比對成功。
情況3.2.2) 若vgb尚有連接邊未被比對到。
若vgb的連接串列還有一個以上的其他連接邊未被比對過,則vgb尚未完 成所有連接邊之比對,回傳比對失敗。
(四) pick_matchv(vgb,vg,vpool),由vpool陣列設定比對頂點vgb及vg: 情況4.1) 比對成功,且vpool陣列為空,則表示vgb’無向前邊。
回傳比對成功到上一層。
情況4.2) 比對成功,且vpool陣列不為空,則表示vgb’有向前邊。
令i=0。依序執行 vpool 陣列中對應頂點之深先比對,當回傳值為成功,
再進行同層其他連接頂點之深先比對。
4.2.1) 依序由vpool 陣列取對應頂點。
依序從vpool[i]陣列中選取vgb和對應集合中一個頂點當做vg,執行4.2.2。
當完成所有vpool陣列記錄vgb之深先比對,回傳比對成功。
4.2.2) 檢查vg未走訪。
首先檢查vg是否走訪過,若已走訪,則取對應頂點集合中下一個頂點為
52
vg,直到找到符合條件之頂點vg,標示vg為已走訪,將vnode[vg]設為 1,
遞迴呼叫match_edge(vgb,vg,vpool),深先比對連接邊。根據match_edge (vgb,vg,vpool)比對結果,若成功比對則將i值加 1,執行 4.2.1,否則將頂 點vg設回未走訪過之頂點狀態,即將vnode[vg]設為 0,再繼續取集合中 下一個頂點重覆4.2.2 的檢查。若集合中已沒有頂點且尚未比對成功,
執行4.2.3。
4.2.3) 重新挑選同層前面之對應頂點為新比對頂點。
退回vpool陣列前一個記錄,也就是將i值減 1,若此時vpool[i-1]
對應頂點集合中尚有頂點,則取對應集合中下一個頂點為vg,執行4.2.2。
反之,繼續將i值減 1,直到vpool陣列中再沒有記錄,也就是i值等於 -1,則回傳比 對失敗。
函式pick_matchv(vgb,vg,vpool)之虛擬碼如圖 4.4。
53
pick_matchv(vgb,vg,vpool);
match = 1; i = 0;
while( i < psize ){ //psize 為 vpool 陣列的大小 if (match){
if (vpool[i])//取對應頂點集合中的頂點 set_matchv(vgb,vg,vpool[i]);
}//if match
vnode[g] = 1;//設定已走訪
match = match_edge(vgb,vg,vpool);
if (match){
if(vpool != NULL)
match = pick_matchv(vgb,vg,vpool);//遞迴深先比對 if (match) i++;
}//if match_edge else{
vnode[g] = 0;//回復走訪前狀態
findv = try_previous(vgb,vg,vpool[i-1]); //取鄰居對應頂點集合其他頂點 if (!findv) return false;//此層比對失敗
}//else !match
}//while 仍未完成vpool[]中所有vgb之深先比對 retrun match;
圖4.4 pick_matchv(vgb,vg,vpool)
54
4-3 具有相等邊之基底常見子圖樣式特徵比對
當基底常見子圖樣式GB中具有相等邊時,令GB中頂點vgb的相等邊有k個,k >
1,則在 4-2 節match_edge(vgb,vg,vpool)比對情況(3.1.1)前,尚需多加一個比對條 件,檢查常見子圖是否包含相等邊:
情況(3.1.e) 若GB存在k個不同的邊(vgb,vgb’)具有標示l (vgb,vgb’)。
(3.1.e.1)檢查相等邊標示l (vgb,vgb’)是否存在G的vg之連接串列中。
若是相等邊標示l (vgb,vgb’)存在vg的連接串列中,即l (vg,vg’)等於l (vgb, vgb’),則G有可能包含相等邊結構,執行 3.1.e.2。反之,回傳比對失敗。
(3.1.e.2) 檢查k 個相等邊是否被 G 所包含。
為了加速偵測新進圖型G中是否有k個具有標示l (vgb,vgb’)之相等邊,我 們先檢查vg之連接串列中是否存有k個邊之標示為l (vgb,vgb’),且k個 vg’之分支數大於等於k個vgb’之分支數。為了方便相等邊比對成功後,
能記錄所有分支數大於等於vgb’分支數之對應頂點集合vg’,我們建立一 個暫存陣列epool記錄比對成功之頂點vg’集合,其索引值對應到vg’之分 支度。若k個相等邊包含比對失敗,回傳比對失敗;否則G很可能包含 此相等邊結構,由於無法確定vg之連接串列中是否還具有邊標示 l (vgb,vgb’),因此繼續比對vg之連接串列。若存在相等邊l (vg,vg’),則以
上述做法將vg’記錄到頂點集合epool陣列中,並取下一邊繼續處理,
55
直到vg之連接串列中的邊標示已不存在相等邊標示l (vgb,vgb’)為止,執行 3.1.e.3 記 錄 對 應 頂 點 資 訊 。 並 取 vgb的 下 一 個 邊 , 繼 續 執 行match_
edge(vgb,vg)。
(3.1.e.3) 記錄對應頂點資訊。
若vgb’具有向前邊(其分支數大於 1),則同樣使用陣列vpool依序記錄vgb’
及其在G中對應頂點集合vg’。依圖型包含特性若deg(vg’)大於等於deg (vgb’),則vg’為vgb’之對應頂點,因此將vgb’之分支數deg(vgb’)當成索引之
起始值,取出epool陣列中索引值大於等於deg(vgb’)所記錄的頂點集合,
當做vgb’之對應頂點集合vg’。
56
4-4 具有返回邊之基底常見子圖樣式特徵比對
1 0 0
0 3
0 04
3 4 04
vgb’
GB
vgb’’
vgb
圖4.5 子圖GB具返回邊結構
當基底常見子圖樣式GB之bedge的back欄位設為 1,表示此GB至少擁有一條返 回邊,我們另外處理具有返回邊結構之基底常見子圖GB,處理步驟中除了前述4-2 節及4-3 節外,尚有以下的方法處理GB中具有返回邊的頂點。
若GB其中一條返回邊為(vgb’, vgb),則此邊在GB中形成一個迴圈,必存在一個 頂點vgb’’落在頂點vgb到vgb’的路徑上,且gb < gb’’ < gb’,如圖 4.5。由於我們將返 回邊記錄於頂點編號較小的連接串列中,因此在比對vgb之連接邊時,會首次走訪 邊(vgb, vgb’),當比對vgb’’之連接串列時,與其連接的頂點vgb’會再度走訪,為了此 時能在G中找到已被vgb’對應之頂點集合中任一頂點vg’,因此我們建立全域的陣列 變數bpool記錄第一次在GB中走訪具返回邊之頂點vgb’,及其對應到G的頂點vg’之 集合,以便再次走訪頂點vgb’時,能確認在G中走訪到同一個頂點。比對返回邊的 方法如下:
在4-2 節的match_edge(vgb,vg,vpool)之 3.1.1 四種比對情況及相等邊之第五種 比對情況中,記錄連接頂點vgb’及其對應頂點集合資訊時,先檢查vgb’是否為具返
57
回邊的頂點。利用第三章介紹之返回邊結構bedge檢查,當bedge的陣列bvnode[vgb’] 大於 0,表示vgb’ 具有返回邊,則vgb’及其對應於G之頂點集合,改使用上述之全 域陣列bpool記錄vgb’及其對應於G之頂點集合。
記錄已走訪之基底常見子圖樣式。
為了得知具有返回邊之頂點vgb’已走訪過,當再次走訪時需比對bpool資訊,
才能確保已走訪路徑形成一個迴圈,我們建立陣列GB_vnode儲存GB中已走訪過之 頂點vgb’,當具返回邊頂點vgb’首次走訪後,將GB_vnode[vgb’] 設為 1。
因此,多了上述二個結構之後,我們在4-2 節所述match_edge(vgb,vg,vpool)之 3.1 情況(3.1.e)之前,再加上情況(3.1.b),比對返回邊結構:
情況3.1.b) 一致比對具返回邊之頂點vg’。 3.1.b.1) 檢查vgb’是否為具返回邊之頂點。
檢查完vg’尚未走訪過後,再檢查此時GB之相連頂點vgb’是否已走訪過,
即GB_vnode[vgb’]是否為 1。若vgb’尚未走訪過,繼續執行match_vertex (vgb,vg)即可;反之,若走訪過,表示頂點vgb’為具一個返回邊之頂點,
且已將其在G中對應頂點集合記錄於陣列bpool中,則執行 3.1.b.2。
3.1.b.2) 比對返回邊頂點。
檢查G的連接頂點vg’是否為已比對到的具返回邊頂點集合中其中一 個頂點,即vg’是否存在陣列bpool中,若否,回傳比對失敗;反之,判
58
定此返回邊比對成功,則之後比對步驟與4-2 節之match_edge(vgb,vg, vpool),及 4-3 節比對相等邊方法相同,繼續執行match_edge(vgb,vg, vpool)。
這裡要特別注意的是,由於vgb’為一具返回邊之頂點,在GB之深先搜尋 樹上共有back->bnode[vgb’]個邊由編號小於gb’之頂點連到vgb’,因此當判斷 vgb’是否具有向前邊時,以分支數是否大於1 會誤判。實際上vgb’具有之向前 邊個數為連接到vgb’的邊總數(即其分支數deg(vgb’))先減掉一條連接到vgb’的 向 前 邊再減去vgb’具有的返回邊個數,剩下的邊數即為vgb’所具有之向前邊個 數,算 式如下:
具返回邊頂點vgb’之向前邊個數 = deg(vgb’) - 1 - back->bnode[vgb’]。
【範例4.1】
如圖 4.6中所示之GB為基底子圖樣式β4,其頂點vgb’之分支數為 3(>1),由於 其具有2 個返回邊,由圖可看出vgb’不具有向前邊,計算返回邊具向前邊之公式:
3 – 1 – 2 = 0 (頂點分支數 - 1 - 返回邊個數),可得知vgb’不具有向前邊。
59
1 0 0
0 3
0 04
3 4 04 4
vgb’
GB
vgb’’
vgb
圖4.6 子圖GB具返回邊結構範例
60
4-5 比對誤判情況
本章以上所述比對方法可以較快速的方法達到子圖樣式比對,唯有在以下結 構發生時會有比對誤判的情況。
4-5.1 含有不具向前邊之頂點
若是基底常見子圖樣式比對頂點的連接頂點vgb’不具有向前邊,其分支數為 d,而其對應於新進圖型的頂點vg’分支數大於d,則有可能發生比對誤判的情況。
分為以下兩種情況:
(1) vgb’之分支數為1,而vg’之分支數大於1。
由於基底常見子圖樣式之頂點vgb’之分支數為1,不可能再被走訪,因此 無需做任何記錄,但其於G中對應頂點vg’不只一個,且分支數大於1,則vg’有 可能再度被走訪。若要保證至少有一個頂點vg’不被走訪,則需要追蹤對應頂 點集合被走訪之資訊,但此種做法的比對花費成本太高,因此本方法採用只 似近比對基底常見子圖樣式,因此,不對G中vg’是否曾被走訪做任何記錄,
因此可能vgb’之對應頂點vg’被重覆走訪,因而誤判有包含此基底常見子圖樣 式。
此情況特例為:基底常見子圖樣式之比對頂點vgb具k條相等邊,且其中 至少一條相等邊的頂點分支數為 1,則會發生上述情況,因而誤判包含該基 底常見子圖樣式。
(2) vgb’之分支數為d,d > 1,且具有d-1 個返回邊;而vg’之分支數大於d。
61
vgb’之分支數為d,d > 1,且具有d-1 個返回邊,表示頂點vgb’不具有向前 邊,因此,情況如(1),有可能其於G中之對應頂點vg’被重覆走訪,因而誤判 包含該基底常見子圖樣式。
【範例4.2】
如圖4.7所示之GB之比對頂點為v0,其在G中比對頂點為v1,GB的頂點v2
及v4分別對應到G的頂點v2及v3,當GB之比對頂點v2向下深先比對時,若首先 挑選G的v2當比對頂點,則比對GB之邊(v2,v3)時,G的頂點v3會再次被走訪;
比對步驟最後會顯示比對成功,而誤判G包含GB。
0
1 0
0 3
0
0 4 3
v0
v2 v4
v3 v1
GB
vgb’
v1 0
1 0
0 3
0 0 3
v2 v3 v4 v0
4
4 G
vg’
圖4.7 節點不具向前邊範例 1
【範例4.3】
如圖 4.8所示之GB及G,G 的頂點vg’會被G B頂點v3及v5先後重覆走訪,而誤 判G包含GB。
62
0 1
0 0
3
0 4
4 0 3 G
vg’
1 4 0 0 0
04 3
v0
v2 v3
v1 4
40 v5 GB
vgb’
04 v6
圖4.8 節點不具向前邊範例 2
4-5.2 含有多條返回邊連到同一頂點
若是基底常見子圖樣式中,有一個頂點具有兩條以上返回邊,則有可能發生 比對誤判的情況。令基底常見子圖樣式GB中頂點vgb’具有兩個返回邊,分別為邊 (vgb’,vgb)及邊(vgb’,v gb’’),其中頂點編號gb’ > gb,頂點編號gb’ > gb’’,且頂點編號 gb < gb’’。由於本論文比對返回邊,第一次比對到具返回邊頂點vgb’,以全域的變 數陣列bpool記錄vgb’及對應於G之頂點集合,當第二次比對到頂點vgb’時,以bpool 所記之對應頂點集合為底,比較此時所對應之G頂點vg’是否與集合中任一頂點相 同。若有,則當做比對成功。若第一次對應於G之頂點若不只 1 個,則vgb’之第一 個返回邊對應到集合中的頂點,與vgb’之第二個返回邊對應到集合中的頂點是否為 同一個並沒有限制,因此比對到的圖型結構與基底常見子圖樣式只是結構相似,
不保證完全相同,因此可能誤判有包含基底常見子圖樣式。
63
【範例4.4】
如圖4.9所示之G與GB,第一次比對GB之返回邊(vgb,vgb’)時,vgb’對應到G中頂 點vg1’及vg2’,記錄於bpool陣列中,接下來比對邊(vgb1’’,vgb’ )及邊(vgb2’’,vgb’)時,
vgb’先後對應bpool陣列中G之頂點vg1’,vg2’,而誤判G包含GB。
0
1 0
0 0 4
0 3 3
0 4 4 0
4 4
G
vg1’
vg2’
1 0 0
0 3
0 04
3
4 04
4 GB
vgb
vgb’
vgb2’’
vgb1’’
圖4.9 多條返回邊連到同一頂點範例
64
4-6 減少基底常見子圖樣式比對技巧
當目前比對的基底常見子圖樣式在新進累積圖型資料集中之計數值小於最 小支持度門檻值時,由向下包含特性可得知,此基底常見子圖樣式之子孫子圖樣 式之計數值亦不可能大於等於最小支持度門檻值,因而可直接省略對包含此基底 常見子圖樣式的所有子孫子圖樣式進行比對,直接比對基底常見子圖樣式的兄弟 樣式或祖先樣式之兄弟樣式,以加速偵測圖型特徵過程。觀察gSpan 演算法的輸 出深先搜尋編碼的情況,本論文發現簡單而又能達到此效果的處理規則如下。
將新進累積圖型資料集中為非常見之基底常見子圖樣式GB稱為一個非常見 基底樣式,令其編碼長度為k,則符合以下條件的GB’即為GB的第一個兄弟樣式或 第一個祖先樣式之兄弟樣式:
(1) GB’之深先搜尋編碼長度 ≤ GB之深先搜尋編碼長度。
(2) GB’的編號 > GB的編號,且不存在其他子圖GB’’使得GB’的編號 > GB’’的 編號 > GB的編號且GB’’之深先搜尋編碼長度≤ GB之深先搜尋編碼長度。
若符合以上二個條件,則當GB’之深先搜尋編碼長度與GB之深先搜尋編碼長 度皆為k,則子圖樣式GB’的前k-1 個深先搜尋編碼,必定與GB的前k-1 個深先搜尋 編碼相同,對應到兩者共同的父樣式,表示子圖樣式GB’為GB之第一個兄弟子圖 樣式。
若符合以上二個條件,則當GB’之深先搜尋編碼長度k’小於GB之深先搜尋編碼 長度k,則GB’的前k’-1 個深先搜尋編碼,必定與GB的前k’-1 個深先搜尋編碼相同,
65
對應到兩者共同的祖先,表示子圖樣式GB’為GB之第一個祖先樣式的兄弟樣式。
第四章 4-1 節所建立之兄弟連接串列,記錄無法向下探勘常見子孫樣式之後 列出之第一個兄弟樣式,比對連接串列節點,符合上述二個條件,即可快速找到 非常見之基底子圖樣式的第一個兄弟樣式或祖先樣式之兄弟樣式,減少找尋兄弟 樣式或祖先樣式之兄弟樣式時,比對每個基底常見子圖樣式編碼長度之時間。
【範例4.5】
表4.1中所示之ζ3 為一個非常見基底樣式,圖型編號為 2,編碼長度為 3。圖 4.10為表 4.1之兄弟樣式連接串列,指標指到串列中第一個節點,串列中第一個圖 型編號大於2 且長度小於等於ζ3 之節點為串列之第三個節點,則編號 10 之 3-子 圖樣式n即為下一個比對包含的子圖樣式,因此可略過編號 3 到 9 七個不可能為 常見之基底子圖樣式。由表4.1所示之圖型及深先搜尋碼可清楚看出ζ3 與n圖型結 構只有最後一個邊不同,互為兄弟樣式。
5,4
9,4
指標
10,3
圖4.10 兄弟樣式連接串列
66
4-7 趨勢轉移判斷
我們使用兩個公式初步檢查新進累積圖型資料集中的常見1-子圖樣式,是否 仍與基底常見1-子圖樣式特徵相似。
(1) 原有常見 1 比例:
|累積圖型資料集中常見1-子圖樣式集∩基底常見1-子圖樣式集|
|基底常見1-子圖樣式集|
(2) 新增常見 1 比例:
|累積圖型資料集中常見1-子圖樣式集- 基底常見1-子圖樣式集|
|基底常見1-子圖樣式集|
若是以上兩個公式算出的值滿足以下兩種情況,則判斷常見1-子圖樣式趨勢 尚未轉移。
(1)原有常見 1 比例 趨勢轉移門檻值。 ≥ (2)新增常見 1 比例 < 常見 1-變動門檻值。
若違反上述情況之一,則以本章所述方法進行樣式比對,
令δ = |累積圖型資料集中常見子圖樣式集∩基底常見子圖樣式集|
|基底常見子圖樣式集| ,其中累
積圖型資料集中常見子圖樣式集∩基底常見子圖樣式集即是以本論文所提出之 比對方法,算出各基底常見子圖樣式在累積圖型資料集中的出現次數,並取出支 持度大於最小支持度門檻值的樣式。
判斷基底常見子圖樣式趨勢轉移方式如下:
(1)若δ 趨勢轉移門檻值,繼續使用本方法偵測常見子圖樣式特徵。 ≥ (2)反之,δ < 趨勢轉移門檻值且目前時間點和基底常見子圖建立時間點差
67
> 時間門檻值,表示基底常見子圖樣式特徵已轉移,建議重新探勘常見 子圖樣式。
68