一种基于图测度的子图相似查询方法
技术领域
本发明属于数据库技术领域,具体涉及一种基于图测度的子图相似查询方法。
背景技术
近年来,图数据(graph-structured data)在很多领域得到了广泛应用。如化学信息学,生物信息学,社交网络, 智能交通,计算机视觉,医学信息学等。子图相似查询(subgraph similarity queries)是图数据上一类非常重要的查询,应用范围很广。如在社交网络上,子图相似查询可用于寻找网络中具有某些特定关系的人;在化学分子数据库中,用于寻找包含某特定结构的分子;在蛋白质交互网络中,用来寻找一组满足特定功能联系的蛋白质;在医学上用于医生的辅助诊断等。
现有的子图相似查询方法主要有以下几种:(1)基于图闭包的CTree方法。该方法首先定义了两个图之间的闭包。然后为数据库(D)中的数据图构建一棵闭包树CTree。CTree的思想是树中每个节点为子节点的闭包。CTree能够支持子图相似查询,但是有两个不足。一是仅支持图编辑距离定义下的相似查询,不能支持其他距离定义下的相似查询。二是仅能找到近似解。(2)基于图分割的方法。该方法的思想是对一个数据图G,枚举出所有的大小为k的子图。通过比较查询图q和这些子图的哈希值来进行子图相似查询。该方法的不足是G会有2k个大小为k的子图,枚举难以完成。(3)基于图特征过滤的方法。该方法是从D中的数据图中提取频繁子图作为特征,通过比较查询图q所包含的特征数目和某个数据图G所包含的特征数目来进行子图相似查询。但该方法要建立一个非常大的稀疏矩阵,存储的效率很低。(4)基于三角不等式的过滤方法。该方法所使用的子图相似距离满足三角不等式,通过三角不等式估算查询图q和某个数据图G的距离,如果估算的距离肯定大于t,则G肯定不是答案,该方法只能支持连通子图的相似查询,不支持非连通子图的相似查询。近来,有人利用图测度来进行子图相似查询,他们的子图相似的定义和本方案所研究的子图相似的定义不同。本方案所描述子图相似为:给定数据图的集合D={G1, G2, …, Gn}、查询图q和子图相似距离阈值s,从D中找出所有和q的子图相似距离小于s的数据图。
发明内容
为了解决上述的技术问题,本发明提供了一种基于图测度的子图相似查询方法。
本发明是通过下述的技术方案来解决以上的技术问题的,本方案所描述子图相似为:给定数据图的集合D={G1, G2, …, Gn}、查询图q和子图相似距离阈值s,从D中找出所有和q的子图相似距离小于s的数据图。
先将不同测度的子图相似距离的估算转化为图测度距离的估算,再根据图测度距离的估算进行过滤,完成子图相似查询,所述的基于图测度的子图相似查询方法,进一步构建图测度树,基于图测度树进行子图相似查询;方案给出子图相似距离计算方法为:给定查询图q和数据图G,则子图相似距离 为 ,其中,mcs(q,G)为q和G的最大公共子图,|mcs(q,G)|和|q|分别为mcs(q,G)和q的大小;方案给出图测度距离的计算方法为:两个图G1和G2之间的图测度距离d如下
,其中,mcs(G1,G2)是G1和G2的最大公共子图,|mcs(G1,G2)|、|G1|和|G2|分别为mcs(G1,G2)、G1和G2的大小;所述的将不同测度的子图相似距离的估算转化为图测度距离的估算的转化方法是,给定查询图q,数据图G1和G2和子图相似距离阈值t,如果,则;近一步引入扩展图,将图G1相对于G2的扩展图G1*定义为:若|G1|>=|G2|, G1*=G1;否则G1* = G1∪A,A为一个图,其任何一个点都不在G1和G2中。可得出,若,则。
根据图测度距离的估算进行过滤的过滤方法是,从D中选取一个锚数据图P,计算P的扩展图P*和D中任一数据图G之间的图测度距离d(P*,G),根据用户提交的查询图q,计算图测度距离d(q,P*)。然后根据,则来判断是否大于t,如果是,则G被过滤掉,如果不是,需要进一步计算的确切值。对锚数据图p进一步说明,给定数据图的集合D={G1,G2,…,Gn}和图测度距离d,D和d一起构成了一个测度空间U=(D,d)。锚数据图P是D中的某个数据图或D中某个数据图的子图。以P为中心,通过c个半径r0,r1,…,rc-1,可以把测度空间U分割成c个环形的没有交集的子空间U0,U1,…,Uc-1,如下所示
·U0={G|r0<=d(P*,G)<=r1, GU},其中r0=0
·对任意的0<i<c-1,Ui={G|ri<=d(P*,G)<=ri+1,GU}
·Uc-1={G|d(P*,G)>rc-1, GU}。
图测度树构建方法是,由于D中可能包含非常多的数据图,只靠一个锚数据图进行过滤性能不佳,在D中选取某个数据图或某个数据图的子图,作为锚图p,计算D中所有数据图和锚图之间的图测度最大距离b,以b/2为界,把D分为两个子集D1和D2,其中把D中和锚图的图测度距离小于b/2的数据图归为D1,把D中和锚图的图测度距离大于等于b/2的归为D2,把D分成了两个子集D1和D2,递归地对D1和D2进行分割,直到集合足够小而不需进一步分割,把D进行递归式地分割成多个子集,对每个子集建立一个锚数据图。这样便形成了一个树形结构,称为图测度树。以p为锚图对D的分割为树根锚图。对图测度树进一步说明,图测度树T是一个4元组(V,E,r,c),其中V,E,r,c分别为T的节点集、T的边集,树根和T的扇出。更进一步地
· T的叶子节点vl是一个数据图的集合,数据图的数目小于c
· T的中间节点v是一个4元组(P, |P*|, TP, RP),1、 P为在v所对应的测度空间U中选取的锚数据图(P*为锚数据图的扩展图; TP={TP 0,TP 1,…,TP c-1}为以v为树根的子树的集合;RP={rP 0, rP 1,…,rP c-1}为半径的集合;使得U被均匀分割成c个子空间① U0={G|d(P*,G)<=rp 0,GU},被TP 0所覆盖②Ui={G|rP i-1<=d(P*,G)<rp i,GU},被TP i所覆盖③Uc-1={G|rP c-2<=d(P*,G)<rp c-1,GU},被TP c-1所覆盖。
基于图测度树进行子图相似查询方法是,首先计算查询图q和树根锚图的图测度距离,递归判断是否进一步访问。图测度树上的子图相似查询算法的思想是从树根开始,计算查询图q和树根锚点的图测度距离,根据上述“给定查询图q,数据图G1的扩展图G1*,数据图G2和子图相似距离阈值t,若,则。”对树根的子树进行过滤,如果树根的某个子树所覆盖的所有的数据图都可以被过滤掉,则对该子树进行剪枝。然后递归地方位所有未被剪枝的子树。当到达测度树的叶子节点之后,因为无法进一步的过滤,便对叶子节点中的所有的数据图和q一一去计算子图相似距离,如果子图相似距离小于给定的阈值则为答案,否则不是答案。
本发明的有益效果在于,将非同意测度的子图相似距离的估计转化为图测度距离的估计,进而可使用三角不等式进行过滤;既支持连通子图的相似查询,也可以支持不连通的子图相似查询;设计一个图测度树来对数据图合集中的数据图进行索引,大大提高查询的效率。
具体实施方式
下面结合具体实施方式来对本发明作更进一步的说明,以便本领域的技术人员更了解本发明,但并不以此限制本发明。
给定数据图的集合D={G1, G2, …, Gn}、查询图q和子图相似距离阈值s,从D中找出所有和q的子图相似距离小于s的数据图。
对于子图相似查询而言,最简单的方法是对D中所有的图计算与q的子图相似距离,将子图相似距离小于s的返回。然而该方法的时间开销非常大,因此本方案提出一种过滤方法。即对于D中的某个图G,估算一下G和q的子图相似距离,如果该距离肯定大于s,尽管不知道确切的子图相似距离的值,但仍可以把G过滤掉。对于无法过滤掉的图才去和q计算子图相似距离。这样总体的计算时间得到大大减少。
然而子图相似距离不是一个测度,因为它不满足三角不等式,就要将子图相似距离转换成一个图测度距离。给定查询图q,数据图G1和G2和子图相似距离阈值t,如果,则,近一步引入扩展图,将图G1相对于G2的扩展图G1*定义为:若|G1|>=|G2|, G1*=G1;否则G1* = G1∪A,A为一个图,其任何一个点都不在G1和G2中。若,则。已经把子图相似距离的估算转换为了图测度距离的估算。
过滤方法是从D中选取一个锚数据图,记为P,计算P的扩展图P*和D中任一数据图G之间的图测度距离d(P*,G),根据用户提交的查询图q,计算图测度距离d(q,P*)。然后根据,则来判断是否大于t,如果是,则G被过滤掉,如果不是,需要进一步计算的确切值。
由于D中可能包含非常多的数据图,只靠一个锚数据图进行过滤性能不佳。因此需要把D进行递归式地分割成多个子集,对每个子集建立一个锚数据图。这样便形成了一个树形结构,称为图测度树。在D中选取某个数据图或某个数据图的子图,作为锚图p,计算出D中所有数据图和锚图之间的图测度最大距离b,以b/2为界,把D分为两个子集D1和D2,其中把D中和锚图的图测度距离小于b/2的数据图归为D1,把D中和锚图的图测度距离大于等于b/2的归为D2,把D分成了两个子集D1和D2,递归地对D1和D2进行分割,直到集合足够小而不需进一步分割,构建图测度树。以p为锚图对D的分割为树根锚图。首先计算查询图q和树根锚图的图测度距离,递归判断是否进一步访问。