關於Efficient Subgraph Matching by Postponing Cartesian的批註

問題定義

子圖匹配:假設有兩個圖 H=(V_H,E_H) 和圖G=(V,E)子圖 同構即從HG存在這樣一個函數f:V_H→V 而且 (u,v)∈E_H使得(f(u),f(v))∈E 一樣成立 f叫作子圖同構的一個映射。在這篇論文中,兩個圖的頂點都是帶label屬性的,這樣還須要知足l(f(u))=l(u),l(f(v))=l(v).算法

論文的核心想法

主要討論如何經過推遲笛卡爾積操做來減小子圖匹配運算的中間結果數量數據結構

  • 在一個個查詢點進行匹配的過程當中,實時構建一個叫壓縮路徑索引(compact path-index,CPI)的數據結構來存儲全部查詢點的候選以及候選之間的鏈接關係。

算法的大致流程

  • 基於查詢圖q和數據圖G構建CPI
  • 將查詢圖q進行CFL分解(對於不一樣類型點的進行的不一樣的匹配策略
    • 將查詢圖上的點分紅三種:核心點(Core)、森林點(Forest)和葉子點(Leaf)
    • 核心點就是查詢圖中知足以下要求的點:任意一個生成樹中這個點都不會包含生成樹之外的相鄰邊;
    • 葉子點就是查詢圖中度數爲1的點;
    • 森林點就是其它點
    • 步驟
      • 拿出一個查詢圖中全部度數爲1的點,這些點做爲葉子點;
      • 而後,去掉葉子點以後,度數爲1的點就是森林點;
      • 這些森林點再被去掉,剩下的結構中度數爲1的點仍是森林點,如此迭代,直到圖中沒有剩下度數爲1點;
      • 剩下的點就是核心點。

  • 直接使用CPI,查詢點匹配順序必定按照核心點,森林點和葉子點計算qG全部映射。

算法的具體過程

CPI 簡介

本文根據查詢圖構建一個所謂的壓縮路徑索引(compact path-index,CPI)來實現查詢匹配。框架

  • 壓縮路徑索引就是一個基於查詢圖寬度優先搜索樹的數據圖組織方式。函數

  • 在這個查詢圖寬度優先搜索樹之上,每一個查詢點u都對應一個候選集合u.C來存儲u的匹配候選。3d

E7W18U.png

算法流程

  • 挑選候選匹配少且相鄰邊多的點做爲CPI的根,進而獲得CPI背後的寬度優先搜索樹(CPI構建的具體過程參考下面)
  • 根據這個CPI來肯定查詢點匹配,查詢點匹配順序列表爲seq。
  • 核心部分
    • 首先,對於核心點部分,本文能夠根據CPI獲得從根到葉子的k條路徑p1, p2, …, pk。
    • 而後,本文定義一個代價模型肯定各個路徑的匹配代價,假設k條路徑代價從大到小仍然是p1, p2, …, pk
    • 最後,依次將p1, p2, …, pk中各個查詢點放到seq中,seq中出現過的點不重複出現。
  • 森林點和核心部分相似,也是先獲得若干條路徑,再依次放進seq中。
  • 葉子點匹配順序按照葉子點匹配數量來定

CPI的構建

構建過程

  • 按寬度優先搜索樹的層次從頂向下依次獲得每一個查詢點的匹配。
  • 對於每一層,都儘量多地利用每一個點的父親節點的匹配候選以及這層中其餘兄弟節點的匹配候選來剪枝掉其的匹配候選。
  • 利用每一個匹配候選的鄰接表來獲得CPI。
  • 在這個CPI上進行自底向上地剪枝,即利用每一個點的孩子節點的匹配候選來剪枝掉其的匹配候選。

例子

自上向下的構建

考慮圖7(a)中的查詢q和圖7(b)中的BFS樹,其中u_0是根頂點。而後q的頂點被劃分爲三個級別,u_0級別爲1,u_1,u_2級別爲2,u_3級別爲3級。rest

  • 處理級別1的頂點(即u_0)。u_0的候選集合被指定爲u_0.C=\{v_1,v_2\}
  • 考慮級別2的頂點(即u_1u_2)。
    • 正向處理,咱們首先處理u_1,u_1.N = \{u_0\}u_1.UN = \{u_2\};u_1.C被指定爲具備相同標籤lq(u_1)的頂點集合,而且與頂點u_0.C相鄰,而且u_1.C = \{v_3; v_5; v_7; v_9\}。其次處理u_2.N = \{u_0,u_1\}u_1.UN = \{\};u_2.C被指定爲具備相同標籤lq(u_2)的頂點集合,而且與頂點u_0.C和u_1.C相鄰,而且u_1.C = \{v_4; v_6; v_8\},但因爲須要u_2是標籤爲D節點的鄰居,所以由CandVerify修剪v_{10}
    • 後向處理,v_9因爲在u_2.C中沒有鄰居,也從u_1.C中刪除,u_1.UN = \{u_2\}。3)
    • 鄰接列表構造,鄰接列表構造如圖7(d)所示。
  • 依次類推第三層

自下向上的改進

  • 繼續上面例子咱們以q^T的自下而上的方式細化q的查詢頂點的候選者;假設它們按u_3; u_2; u_1; u_0的順序處理。
    • 首先,u_3沒有較低級別的鄰居,咱們什麼都不作。在處理u_2時,咱們經過u_3的候選u_3.C來細化u_2的候選u_2.C;v_8u_2.C中刪除,由於它在u_3.C中沒有鄰居。
    • 接下來,在處理u_1時,從u_1.C中刪除v_7,而且還刪除v_7的鄰v_7接列表,如圖7(e)所示。
    • 最後,咱們處理u_0;

實驗

和現有方法方法比

新框架的有效性

相關文章
相關標籤/搜索