子图匹配的综合调查和实验研究:趋势、无偏性和相互作用

        子图匹配是图分析中的一个基本问题。近年来,已经提出了许多子图匹配算法,这使得比较它们的性能和识别它们的优缺点变得紧迫和具有挑战性。研究发现:(1)经典过滤有序枚举框架中的嵌入枚举在整体性能上占主导地位,因此增强回溯范式正成为当前的研究趋势;(2)单纯改变产出规模的限制,导致不同方法的排名存在较大差异,导致绩效评价存在偏倚;(3)子图匹配不同阶段使用的技术相互影响,使得单独替换和评估单一技术的可行性较低

        因此,有必要对子图匹配进行全面的调查和实验研究,以确定当前趋势,确保无偏性,并探讨潜在的相互作用。在本文中,我们全面回顾了当前趋势中的方法,并通过实验证实了它们相对于先前方法的优势。我们通过使用有效的度量,即每秒嵌入数,来公正地评估这些算法的性能。为了充分研究各种技术之间的相互作用,我们在每个阶段选择了10种具有代表性的技术,并对所有可行的组合进行了评估。

        CCS概念:•信息系统→信息检索查询处理;基于图的数据库模型。

        附加关键词:子图匹配,图挖掘,实验研究

1介绍

        在大型图中搜索特定结构是图挖掘的基本操作,正式定义为子图匹配。如图1所示,给定一个大型数据图𝐺和一个查询图𝑄,子图匹配枚举所有嵌入𝑓,这些嵌入将𝑄中的每个顶点映射到𝐺中同态子图的相应顶点。

图1.子图匹配的运行示例

 1.1背景

        子图匹配在欺诈检测[62]、社会网络分析[19]、生物信息学[9]和知识图谱[40,60]等各个领域都有广泛的应用。子图匹配是一个典型的np困难问题,其最坏情况时间复杂度为𝑂(|𝐺| |𝑄|),其中|𝐺|和|𝑄|分别表示图𝐺和图𝑄中的顶点个数[22]。尽管在实际应用场景中,查询图的大小通常是有限的,但在生物信息学[9]、社交网络[49]和知识图[48]中,数十个节点的子图查询被广泛研究。因此,这种规模的查询的计算开销仍然非常昂贵,并且可能成为应用程序中的瓶颈。许多高效的子图匹配算法[6、7、11、26、28、34、38、65、66、75、81]已经被提出。此外,也有研究探索其他设置,包括并行[32,42,84]和分布式子图匹配[93,98],连续子图匹配[41,55,76,95],以及基于gpu的[24,77,88,97]或基于fpga的方法[33,89]。

        在本文中,我们重点研究了在基本设置下单个大图内的子图匹配,即内存,基于cpu和单线程方法。这构成了研究子图匹配的基础,使其能够扩展到不同的场景。鉴于子图匹配的关键作用,有必要进行全面的调查,而不仅仅是列举现有算法,以提供对技术的公正评估和对未来研究的见解。

        我们调查的目的是解决子图匹配领域的三个核心问题。

        (1)算法发展的主流趋势是什么?

        (2)如何在没有任何偏置的情况下严格评估算法的性能?

        (3)技术之间的交互作用如何影响绩效评价?

1.2贡献

趋势

        大多数子图匹配方法遵循过滤-排序-枚举框架。在过去十年中,现有算法的主要重点是过滤和排序优化[6,7,9,26,28,35,65]。尽管有精心设计的候选过滤和排序设备,回溯算法仍然面临大量无效递归的重大问题。最近,越来越多的人努力加强回溯框架,以尽量减少回溯的次数。这导致了该领域几个值得注意的工作的发展,如DPiso [25], RM [75], VEQ [38], GuP[4]和CaLiG[95]。这些方法都对回溯框架进行了不同程度的修改,已成为当前的研究趋势。因此,我们认为有必要对这些工作进行更深入的总结和进一步研究。

        减少回溯主要可以通过两种方式实现:在枚举期间进行修剪以避免不必要和冗余的回溯(DPiso、VEQ和GuP);同时枚举多个嵌入(RM和CaLiG)。我们对这些算法进行了全面的比较分析,并通过实证评估来研究它们各自的优缺点

无偏性

        我们注意到以前的工作[4,25,38,74]在评估中遵循“常规设置”:算法在产生10^5个匹配后或达到300秒超时时终止。在子图匹配研究的早期阶段,10^5个匹配的大小可能被认为具有代表性。但是,随着查询和数据图规模的增加,继续遵循此设置可能是不合适的。我们在数据集dblp上评估了9种算法,并在图2中报告了它们在不同输出限制(即最大嵌入次数)下的排名。可以观察到,仅仅调整产出限制就会导致排名发生巨大变化。随着报道的嵌入数量的增加,先前排名较高的RI[9]和CFL[7]开始下降,而最初排名较低的RM[75]和VEQ[38]等方法上升到前列。此外,如图12(第4.5节)所示,所有扩展组合的结果显示出更显著的变化

图2.排名变化vs.输出限制

        这种现象被认为为子图匹配领域的研究人员敲响了警钟,提出了关键问题:我们如何公正地评估算法的性能?理想的解决方案是不加任何限制地进行实验,但由于子图匹配的NP-hard性质,这是不现实的[22]。在本文中,我们引入了每秒度量嵌入数(EPS),它被定义为每秒返回的嵌入数的平均值。该度量通过考虑时间成本和报告嵌入的数量提供了一个全面的度量。EPS允许跨不同时间和输出限制进行比较,从而确保性能的相对一致性,如图13所示。我们还使用度量EPS重新评估代表性子图匹配算法。

交互

        丰富的子图匹配算法可以分解为单独的技术(过滤、排序和枚举)并相互结合,从而为这些技术的效果提供了很大的研究空间。然而,以往的研究[47,74]要么使用原始算法,要么在默认算法的基础上替换个别技术,忽视了不同算法组合之间潜在的相互作用。事实上,对于每个单独的技术,可能需要不同的互补技术来达到其最佳性能。假设有𝑎过滤、𝑏排序和𝑐列举技术,结合空间覆盖𝑎×𝑏×𝑐可能的组合,但在以往的研究[74],只有𝑎+𝑏+𝑐组合进行了调查,导致大量的组合被忽视了,留下的只有未知。

        为了深入研究整个设计空间,本文为每个阶段选择了10种具有代表性的技术,并探索了可行的组合。通过综合分析,我们评估原始组合和各种算法得到的可行组合的性能。我们的实验结果显示,相互作用效应的存在具有更大的意义。具体来说,我们的实验表明,几种枚举方法受到过滤器和匹配顺序的有效性的显著影响,突出了在性能评估中考虑这些因素的重要性。

        综上所述,我们在本文中做出了以下贡献。

        •我们确定了子图匹配领域的一个显著转变,重点是从过滤和排序优化过渡到鲁棒回溯技术的发展。

        •我们发现了使用传统设置导致的潜在偏差,这限制了报告的嵌入。因此,我们引入了一个有效的度量,即每秒嵌入数(EPS),它一致地反映了算法的性能。

        •在原有方法之外,我们在每个阶段使用10种典型技术,并评估所有可行的组合,以全面研究这些技术之间的相互作用。

        •我们在各种真实世界的数据集上进行了广泛的实验,以及不同类型的合成数据集和标签分配,从而提供了对所有技术组合性能的全面分析

2初步

2.1问题定义

        在本文中,我们主要研究无向图和有标记顶点的连通图。注意,带有标记边的图也将在4.3节中讨论。一般来说,我们认为查询图𝑄=(𝑉𝑄,𝐸𝑄,Σ,𝐿𝑄)和数据图𝐺=(𝑉𝐺,𝐸𝐺,Σ,𝐿𝐺),在𝑉𝑄和𝑉𝐺顶点集,𝐸𝑄和𝐸𝐺套边,Σ是一组标签,和𝐿𝑄:𝑉𝑄→Σ和𝐿𝐺:𝑉𝐺→Σ查询的映射(分别地。Data)顶点到它的标签。如果没有歧义,我们使用𝑢作为查询顶点,𝑣作为数据顶点。设𝑑(𝑢)表示顶点𝑢的度数;(2)表示𝑢的邻居集合。𝑣)。

        定义2.1(子图同构)

        给定一个查询图𝑄=(𝑉𝑄,𝐸𝑄,Σ,𝐿𝑄)和数据图𝐺=(𝑉𝐺,𝐸𝐺,Σ,𝐿𝐺),𝑄是子图同构与𝐺如果存在一个映射函数𝑓:𝑉𝑄→𝑉𝐺,使得

        (1)∀𝑢∈𝑉𝑄,我们有𝐿𝑄(𝑢)=𝐿𝐺(𝑓(𝑢)),𝑓(𝑢)∈𝑉𝐺,

        (2)∀𝑒(𝑢1𝑢2)∈𝐸𝑄,我们有𝑒(𝑓(𝑢1)𝑓(𝑢2))∈𝐸𝐺,和

        (3)∀𝑢𝑖,𝑢𝑗∈𝐸𝑄,𝑢𝑖≠𝑢𝑗),然后𝑓(𝑢𝑖)≠𝑓(𝑢𝑗)。

        

         映射功能𝑓也称为𝑄在𝐺中的嵌入。每个嵌入可以表示为一组一对一的顶点对{(𝑢,𝑓(𝑢))},每个顶点对称为一个赋值。

        部分嵌入𝑀:𝐼→∑𝐺,其中𝐼⫋∑𝑄是对𝑄(由𝐼诱导)的子图的嵌入。扩展是给部分嵌入的𝑀添加一个赋值(𝑢,𝑣),用𝑀∪(𝑢,𝑣)表示。

        定义2.2(子图匹配)

        给定查询图𝑄和数据图𝐺,子图匹配返回𝑄在𝐺中的所有嵌入。

        示例2.1.1

       考虑到查询𝑄和数据图𝐺在图1中,根据子图同构的定义(2.1)定义,𝑀={(𝑢0𝑣1),(𝑢1𝑣4),(𝑢2𝑣5),(𝑢3𝑣8),(𝑢4𝑣2),(𝑢5𝑣3)}是一个嵌入在𝐺𝑄。

        定义2.2返回所有嵌入,这意味着自同构可以产生多个解决方案,这在某些应用中可能是不必要的计算。一系列的研究[29,64,68]只产生诱导子图,即自同构最多产生一个嵌入。实证研究请参见4.4节。

        算法1概述了过滤-排序-枚举的一般框架。

N^+(u_i)=\left \{ u_j | \varphi (u_j) > \varphi (u_i) \right \}

算法1:子图匹配的一般框架

        过滤顶点。

        该算法首先通过过滤顶点(第1行)生成候选集。与直接遍历整个图相比,过滤方法为每个查询顶点选择候选点,并消除不可能是潜在匹配的数据顶点。查询顶点𝑢的候选点用C(u)表示。

        匹配顺序。

        该算法生成一个匹配顺序(第2行)。𝑄的匹配顺序指的是一个排列,它决定了在搜索过程中探索顶点的顺序。顶点u在变量域\varphi中的索引用变量\varphi (u)表示。向前的邻居被定义为N^+(u_i) = \left \{ u_j|\varphi (u_j) > \varphi (u_i) \right \}和后向的邻居集N^-(u_i) = \left \{ u_j|\varphi (u_j) < \varphi (u_i) \right \}

        列举的过程

        算法最后进行枚举(第3行)。基本枚举过程首先计算局部候选变量C_M(u)(第8行),然后扩展部分匹配(第13行),然后递归地执行计算(第14行)。递归枚举结果。朴素的终止条件(第5行)是纵向的,但通过一次枚举多个嵌入的技术[7,25,95],可以降低搜索深度。在枚举期间进行修剪的索引[4,25,38]也可用(第10- 11,16行)。使用额外的索引,这些方法减少了一些不必要的回溯。

2.2相关工作

2.2.1子图匹配与枚举

        子图匹配与枚举。由于子图匹配的重要性,已经提出了各种算法[4,6,7,11,25,34,35,38,75,81]。术语“子图枚举”也在以前的著作中被使用[39,42,45,72,86]来指代子图匹配的相同问题定义。在他们的实验中使用的查询图通常在顶点大小和标签大小方面不同于子图匹配方法。在本文中,我们统一使用“子图匹配”这个术语来描述这个问题

        子图匹配的解决方法可以分为三大类,即基于连接的方法、基于探索的方法和混合方法。为了实现并行计算,基于join的方法被广泛采用并行[39,72]或分布式方式[1,36,44,45,61,87,90,96,99]。对于基于连接的方法,Lai等人将连接策略分为二元连接[44,45,61,78]和最坏情况最优连接(WCOJ)[1,3,5,36,57 - 59,82,96]。大多数内存中的单线程方法[4,6,7,11,25,28,34,38]采用基于探索的方法。我们将在第3节中详细介绍和比较代表性算法。Wang等人[86,87]在分布式系统中开发了一种基于探索的方法,而研究人员[54,99]则探索混合方法。

        与现有调查的比较。

        与已有的子图匹配调查[47,74]不同,我们回顾了新的枚举技术[4,25,31,38,95],在只评估原始算法[47]或替换原始算法中的一种技术[74]的情况下,对不同技术的所有可行组合进行了评估。此外,我们使用更多更大的真实世界数据集以及更多类型的合成数据集和标签分配。我们还扩展了这些算法,并在同时带有顶点和边标签的图上对它们进行了评估。此外,我们采用了一种新的EPS指标,可以更公正地评估性能。

2.2.2子图搜索

        子图搜索,也称为子图包含,是在图的数据库中搜索,而不是在单个大图中搜索。给定一组图𝐷={𝐺1,𝐺2,···,𝐺𝑛},子图搜索的目的是找到包含查询图𝑄的所有图。

        过滤-索引-验证框架在早期子图搜索工作中被广泛使用。这种研究的重点是设计有效的指标来过滤掉不满意的实例,而不进行计算代价高昂的子图同构测试。一组作品[94,101]提取了数据图中出现的频繁特征,而另一组[8,17,23,43]考虑了所有特征,直到有界大小。空间复杂度为\left |D \right |\left | F \right |,其中\left | F \right |是特征集的大小,而\left | F \right |可能相当大。

        最近,利用子图匹配的技术已经出现,可以在不需要索引的情况下有效地处理子图搜索[52,73]。特别是,VEQ[38]将相同的算法方法应用于子图搜索,并且优于依赖索引的先前方法。

2.2.3图分析系统

        为了促进大规模图计算,许多图分析系统被提出,如以顶点为中心的框架[50,53,69,91]和以子图为中心的框架[18,63,79,93]。已经提出了一系列关注图挖掘系统的工作[15,16,20,51,70,85,100],例如Fractal [18], G-Thinker [93], Peregrine[30]和Sandslash[14]。

        这些系统通常根据系统设计提供特定的子图匹配算法。

        G-thinker采用类似于VF2的子图匹配方法,先进行局部过滤,然后枚举所有匹配项。变体可以接受用户自定义的滤波函数来迭代化简数据图和扩展顶点。Peregrine首先匹配核心子图,然后用聚合器枚举所有嵌入。Sandslash从密集的子模式开始生成匹配顺序,并提供用于回溯搜索的 toExtend和toAdd接口。SketchTree[99]在Pregel+[92]中实现。

3方法比较

3.1过滤技术

3.1.1概述

        过滤方法用于识别每个查询顶点的候选顶点集C(u),目的是提前去除多余的顶点。值得注意的是,虽然最坏情况下的时间复杂度仍然是O(\Pi_{ui}\left | C(u_i) \right |) = O(\left | V_G \right |^{\left | V_Q \right |}),但在实践中,通过候选滤波可以大大减少顶点的数量。本文综述的十种代表性滤波方法如表1所示。

表1。不同方法中使用的过滤技术
方法过滤类型轮数过滤规则使用的邻居
LDF一轮1标签和度N_G(v)
NLF一轮1邻居安全N_G(v)
GQL传播1内射的匹配N_G(v)
TSO传播1候选人的存在N_T^+(u,v)
CFL传播2候选人的存在N_T(u,v)
CECI传播2候选人的存在N_{CS}(u,v)
DPiso传播3候选人的存在N_{CS}^{+(-)}(u,v)
RM 结合2全减速器
VEQ传播3邻居安全N_{CS}^{+(-)}(u,v)
CaLiG传播3内射的匹配N_{CS}^{+(-)}(u,v)

        对过滤方法进行分类,可以从三个方面进行

        (1)过滤类型。

        早期的滤波方法,如LDF[81]或NLF[7],采用一轮滤波方法,仅利用单个节点的局部特征。为了减少误报的发生,现代算法通常采用传播滤波技术来获得更准确的候选集。在一个顶点被过滤掉后,结果可以用来改进它的邻居的结果。特别地,RM[75]使用join来执行过滤。在实践中,传播方法还指定遍历和优化候选对象的轮数,以及遍历顺序。

        (2)过滤规则。

        过滤规则通常是根据子图匹配的必要条件设计的。对于局部过滤,LDF[81]收集与𝑢具有相同标签的数据顶点𝑣,使得𝑣的度数大于或等于𝑢。对于每个标签𝑙,NLF[7]检查候选顶点𝑣与标签𝑙的邻居是否不少于顶点𝑢。对于传播过滤,过滤规则本质上是相似的,但应用于候选集而不是原始图,忽略了修剪的顶点。例如,VEQ[38]提出的邻居安全过滤器可以被视为NLF在传播场景中的扩展。

        (3)使用的邻居。

        用于过滤的邻域使用(即考虑到的邻居)多种多样,如表1所示。不同的算法设计了不同的辅助数据结构A.例如,CFL和TSO只维护树的边缘(使用N_T),而CECI和DPiso维护所有的边缘(N_{CS})。此外,为了提高效率,有些算法在单轮传播中只考虑前向响应(子节点)相邻的操作N^+(u)或反向操作(父节点)N^-(u)

3.1.2最新工作

        最新的工作主要集中在设计严格的过滤规则,以实现具有更少误报的候选集

        过滤规则3.1(候选人存在)

        为每个𝑣∈𝐶(𝑢),如果存在u'∈𝑁(𝑢)使得𝐶(u')∪𝑁(𝑣)=∅,。

        RM[75]

        RM采用关系过滤器,根据标签为每条查询边建立关系。它将𝑄分解为一组树结构的子查询,如图3(a)所示,并使用完整的减少器删除不必要的元组。全减少其(图3(b))迭代选择末端顶点为叶子的𝑒和与𝑒共享末端顶点的e'。𝑒的关系被𝑅𝑒”←𝑅𝑒”⋉𝑅𝑒过滤。RM的剪枝能力与Filter Rule 3.1相当。Filter Rule 3.1下的过滤技术的复杂度为O(\left | E_Q \right |\left | E_G \right |)。对于这样的规则,一个顶点𝑣可能被计算在多个候选集中,违反了内射约束并导致误报。

        VEQ[38]。

        VEQ引入了一个邻居安全过滤器,在候选集上扩展了NLF。如果𝑣∈𝐶(𝑢)在CS中的标签𝑙邻居数不少于𝑢,𝑣∈𝐶(𝑢)对于𝑢是邻居安全的。

        过滤规则3.2。(邻居安全)

        为每个𝑣∈𝐶(𝑢),如果存在𝑙∈Σ使得\left | N_Q(u,l) \right | >\left | N_{CS}(u,v,l) \right |,从𝐶(𝑢)除去v,其中N_{CS}(u,v,l)表示(u,v)在CS中标签为l的邻居

        VEQ将NLF实现为具有4个\left | \sum \right |\left | V_G \right |位的位数组,以表示\left | N_{CS(u,v,l)} \right |到4。采用Filter Rule 3.1和3.2,邻居安全滤波器的复杂度为O(\left | E_Q \right |\left | E_G \right |)

        CaLiG[95]。过滤规则3.3的直觉是,顶点𝑣匹配𝑢只有当𝑣的邻居匹配𝑢的邻居。CaLiG对每个𝑣∈𝐶(𝑢)构建一个二部图,并检查是否存在内射匹配,类似于GraphQL[28]。GraphQL沿着顶点顺序遍历(𝑢),而CaLiG在本地传播状态,因为它是为流图设计的。

        过滤规则3.3。(单射匹配)

        为每个𝑣∈𝐶(𝑢),一个二分图是使用两组顶点集合N_Q(u)N_G(v)构造的,其中如果v_j \in C(u_i),在v_j \in N_G(v)u_i \in N_Q(u)之间有一条边,如果在图中没有发现单射匹配,我们从𝐶(𝑢)删除v

        虽然Filter Rule 3.3的剪叶能力最强,但由于需要进行图匹配,复杂度为O(d_Q^{2.5}\left | E_Q \right |\left | E_G \right |),其中d_QQ的最大顶点度。

       示例 3.1.1

        考虑图1中的运行示例,由NLF初始化的候选集如图3(c)所示。没有进一步的候选人可以被过滤规则3.1修剪,至于任何𝑢𝑣,𝑣∈𝐶(𝑢)和任何𝑢‘∈𝑁(𝑢),存在一个对应的邻居𝑣‘∈𝑁(𝑣)和𝑣‘∈𝐶(𝑢”)。然而,对于𝑣2∈扮成(𝑢1),𝑣2只有一个邻居标记为“变量”,而对于𝑢1则需要两个邻居标记为“变量”。因此,𝑣2不是邻居安全的,可以从(𝑢1)中移除。经Filter Rule 3.1和3.2细化后的候选集如图3(d)所示。对于𝑣7∈𝑣7(𝑢0),虽然𝑣7是邻居安全的,但是它的邻居𝑣3在其各自的变量中被使用了两次,违反了单射约束。通过Filter Rule 3.3,可以从(𝑢0)中剔除𝑣7,最终的候选集(图3(e))更加紧密,假阳性更少。

        

图3所示。过滤方法(a)-(e)的说明和另一个数据图(f)。

        

3.2匹配顺序

3.2.1概述

        排序方法是生成一个匹配的顺序来探索搜索空间。排序算法大致可分为三类。

        (1)数据无关顺序

        与数据无关的排序方法仅利用查询图的信息来生成订单。RI[9]首先选择度最大的顶点作为起始顶点,迭代选择后向邻居最多的顶点。RM[75]为查询图构造了一个密度树,并从最密集部分到最稀疏部分排列匹配顺序。与数据无关的顺序通常是有效的和经验有效的。如[74]所述,RI是稀疏查询的推荐排序技术。

        (2)数据依赖顺序

        大多数算法通常采用依赖于数据的顺序方法,它利用查询和数据图来生成有效的匹配顺序。

        首先要考虑的是标签的选择性。为简单起见,我们在数据图表示一个标签的出现\left | L_G(u) \right |=\left | \left \{ v \in V_G | L_Q(u)=L_G(v)\right \} \right |。VF2++[35]首先选取最小\left | L_G(u) \right |的顶点,迭代选取后向近邻最多的顶点。QuickSI[65]通过选择性地为边缘分配权重,并以最小的权重选择未访问的边缘(其一个顶点被选中)。

        由于采用了过滤方法,通过候选集的大小\left | C(u) \right |可以更准确地估计查询顶点𝑢的选择性。GraphQL[28]迭代地选择候选值最少的查询顶点(即最小值\left | C(u) \right |),CECI[6]选择最小值\frac{\left | C(u) \right |}{d(u)}的顶点作为起点。CFL[7]提出了核心-森林-树叶分解,并提出了一种基于路径的核心顶点匹配顺序排序方法。CFL生成一个BFS树,枚举所有从根到叶的路径,并选择估计嵌入数最少的路径。

        3.2.2最新工作

        VEQ[38]。CFL[7]提出了叶片分解(如第3.3.3节所述),该方法已被DPiso等后续算法广泛采用。VEQ遵循DPiso的候选大小顺序,但生成一个新的自适应顺序。在CFL和DPiso中,叶子分解需要将叶子顶点(即度数为1的顶点)的匹配推迟到匹配顺序的末尾。然而,当叶子顶点匹配失败时,会浪费更多的无效回溯。因此,VEQ的动态顺序检查一级可扩展顶点𝑢的剩余候选点的大小是否小于或等于所需的大小,从而提前检测到失败。

       示例 3.2.1

        让我们考虑图1(a)中的查询图𝑄和图3(f)中的数据图𝐺'。在𝐺'中没有嵌入𝑄,因为没有足够的被标记为变量B的顶点来分配给叶子顶点𝑢4和𝑢5。但是,如果我们按照匹配顺序(𝑢0、𝑢1、𝑢2、𝑢3、𝑢4、𝑢5)推迟叶子顶点的匹配,则需要遍历从𝑣5到𝑣104的100个候选节点以确定失败。对于VEQ的自适应顺序,将𝑣3赋值为𝑢1,将𝑣4赋值为𝑢2后,叶顶点𝑢4只有一个候选,因此选择𝑢4而不是𝑢3。因为𝑢5不存在候选,并且已经检测到失败。并且可以避免无效的遍历。

        RM[75]。RM认为子查询的基数估计具有挑战性,因此回到𝑄的图结构。CFL提出核心-森林-树叶分解,从密集部分(即核心顶点)开始枚举。RM扩展了这一思想,并利用了核心顶点的密集子结构。它构造了一个具有核分解的密度树[67],可以找到具有多层次层次结构的密集子图。然后RM从最密集的部分开始搜索,并在最稀疏的部分结束。

3.3列举范式

        如算法1所述,现有的改进嵌入枚举的技术可分为三类:(1)局部候选计算。(2)枚举时剪枝。

(3)一次枚举多个嵌入

        局部候选计算(第8行)指的是在每个回溯步骤中计算可扩展数据顶点的方法。提出了多种算法和数据结构[74]。对于子图匹配,回溯的次数可以是O\left ( \left | V_G \right |^{\left | V_Q \right |} \right ),回溯会遭受大量重复或无效的回溯。最近,越来越多的努力试图减少回溯的数量,而不是加速每个个体的回溯本身。一般来说,有两种方法可以减少回溯的次数。一种是在枚举期间执行修剪(第10- 12,16行),以避免重复或无效的回溯,而另一种是一次枚举多个嵌入,提前停止搜索过程(第5-6行)。

3.3.1局部候选计算

       对于候选人计算,没有辅助数据结构,我们必须循环N(M(u.p))\left (\mathrm{ QAI,RI }\right )C(u)\mathrm{(GQL)}中的所有顶点,然后对于所有𝑢'∈𝑁(𝑢)检查𝑣和𝑀(𝑢')之间是否存在边。存储在A中的补充数据将被证明是有益的。它允许算法直接检索到在C(u)中𝑣的邻居。CFL维持树边,CECI和DPiso维持所有边,并使用集合交集计算局部候选点。

3.3.2枚举时剪枝

        在枚举期间进行修剪是通过消除重复的搜索子树来避免重复回溯的一种方法。它包括两个方面:(1)记录过去的失败,以防止它们再次发生;(2)重用以前的成功结果,以避免重复的回溯。为了记录故障,引入了nogood的概念[4,71]。

定义3.1(NOGOOD)

        定义集合D \subset V_Q \times V_G,Dnogood如果没有完整嵌入M: V_Q \rightarrow V_G,D \subset M

        Nogood是指不出现在任何结果中的部分嵌入。通过标识nogoods,可以安全地终止无效的搜索路径。

失败集

        在DPiso[25]中提出了失败集。DPiso通过BFS构建了一个根DAG_{q_D},捕获了对分配的依赖。失败分为两类:(i)冲突类,其中一个数据顶点在单个嵌入中被使用两次;(ii) 空集类,其中用于𝑢扩展的本地候选者为空。对于(i)失败集F_M = anc(u) \cup anc(u')然而对于(ii),F_M = anc(u),其中anc(u')表示在q_D中包括𝑢本身的所有𝑢的祖先。搜索树中内部节点的失败集F_M从其子节点F_{M_i}中更新。对于搜索树(𝑢,𝑣)中的一个搜索节点(即部分嵌入),如果u \notin F_M,则节点𝑀的所有兄弟节点都是冗余的。也就是说,失败集中采用的nogood发现为D = \left \{ \left ( u,M(u) |u \in F_M\right ) \right \},DPiso采用后跳,直到nogood中的赋值发生变化。

示例3.3.1

        考虑图1(a)中的查询图𝑄和图3(f)中的数据图𝐺',为𝑄生成的DAG如图4(a)所示。部分映射\left ( u_5,v_{105 }\right )失败并且属于冲突类,F_M = anc(u_4) \cup anc(u_5) = \left \{ u_0,u_1,u_4,u_5 \right \}。失败以自底向上的方式更新。因为u_3 \notin F_M\left ( u_3,v_5 \right )的兄弟姊妹是冗余的。然而,由于失败集在完成回跳后被丢弃,因此对于部分嵌入(u_0,v_1)(u_0,v_2)仍然需要相同的过程。图4(b)中用黄色表示修剪后的空间。

        

图4.枚举期间的修剪说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值