gSpan算法的研究多層索引文獻引用判斷圖同構

口水話:疫情間看了論文《用多層索引判斷圖相似(中文翻譯)》,裏面的一個小細節提到了如何判斷子圖同構的問題。作者採用了gSpan(原文鏈接原文鏈接2 簡單版的算法,大體思路爲:通過構造DFS代碼樹,不斷地挖掘頻繁子圖的過程。

gspan是頻繁子圖挖掘算法,gsapn在圖數據庫中建立了一種新的字典序,並且把每一個圖映射一個獨特的最小DFS編碼作爲其規範化的標籤。通過這個標籤,gspan可以使用深度優先搜索去挖掘頻繁聯通子圖。

問題定義:
gspan是爲了挖掘滿足一定支持度的聯通子圖。其中支持度定義:表示的是一個子圖,有多少了圖中包含這個子圖。
前人方法缺點:
[4,5]中的FSG和AGM的方法利用了Apriorior[1]方法的優點。但是有倆個缺點
1 產生頻繁項集。從k個頻繁子圖產生k+1個候選比項集本身更復雜、成本更高
2 修剪fasle positive的缺點:修剪假陽性圖採用子圖同構方法,但是子圖同構的方法是NP-Complete問題,因此修剪假陽性圖成本高。
而gspan算法直接將頻繁子圖的生長和頻繁子圖的檢查放在一個步驟裏面,加速了挖掘過程。

DFS subscripting:一個圖可以進行多種DFS遍歷,對應可以生成多個DFS樹。但是這些樹都是和原圖子圖同構(樹怎麼可能和圖同構?)b-d三幅圖是三種遍歷算法生成的DFS樹。

詳細描述:

首先,根據每個圖生成深度優先搜索樹,依次列出這些搜索樹的DFS編碼。因爲一個圖有不同的深度優先搜索樹,因此多種DFS編碼。其中每種DFS編碼都是按照字典序進行排列。文中使用DFS最小編碼(DFS編碼樹的前序搜素)作爲討論的方案,DFS最小編碼是第一種編碼。
在圖2中,給出圖a,有深度優先搜索樹bcd**[文獻9]**,它們和a是同構的。

在表2中,給出了三種不同的DFS編碼,它們對應圖2bcd,加粗的邊代表了圖a三種不同的DFS樹。其中編碼的形成需要理解幾個概念:

前向邊:包含了DFS樹中的所有邊,從結束頂點開始增長,否則從其父節點增長
反向邊:包含了不在DFS樹中的邊,從結束頂點依次和ID最小的頂點之間的邊
在這裏插入圖片描述

在這裏插入圖片描述
表1中每個DFS樹生成DFS編碼有一定的規則,倆條鄰居邊會滿足如下的限制:1.若前一條邊是反向邊((i,j.label(i),lable((i,j)),label(j))中的i>j即爲反向邊,如(3,1,Z,b,Y)是一條反向邊),下一條邊是反向邊必須保證j+1 = (i) +1 且i+1 <=i ;若下一條邊是前向邊,則也滿足類似的屬性。定理如下:
在這裏插入圖片描述
表1中列出了一個圖的三種DFS編碼,在算法中僅僅使用最小的一個編碼,即最小DFS編碼(定義8)。
在這裏插入圖片描述
gSpan算法:

  1. 根據數據庫GS中頂點和邊標籤出現的頻率給其排序;
  2. 移除掉不頻繁的頂點和邊(不頻繁:小於給定的支持度)
  3. 按照頻率的降序重新給頂點和邊relabel
  4. 將GS中所有頻繁1邊圖放入S1
  5. 按照DFS字典序(DFS字典序)排序S1中的元素

Step2: (算法8-9行) 對於1-邊的頻繁子圖,子圖挖掘增加(圖1中)以1-邊爲根的子樹的所有節點。
在這裏插入圖片描述
Step3: 依次挖掘1-邊圖的頻繁子圖,每次挖掘完一個邊圖的頻繁子圖之後,在原來的數據庫中要把之前的1-邊剔除掉。這一個過程將GS投影爲含有更加少的頂點、邊的小圖,使得挖掘的過程更加迅速。

Step4:當所有的頻繁1-邊圖和它們的後代都產生後算法停止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章