适用于有向图的子图匹配方法及系统、电子设备技术方案

技术编号:28837784 阅读:31 留言:0更新日期:2021-06-11 23:35
本发明专利技术涉及适用于有向图的子图匹配方法及系统、电子设备,该方法包括步骤:将子图中的所有节点进行排序,得到排序后的集合S;以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。本发明专利技术可以极大地提高适用于有向图的子图匹配效率,降低内存消耗。

【技术实现步骤摘要】
适用于有向图的子图匹配方法及系统、电子设备
本专利技术涉及知识图谱
,特别涉及一种适用于有向图的子图匹配方法及系统、电子设备。
技术介绍
图数据在许多应用中都是重要的数据结构,包括社交网络、web和生物信息学领域等。随着数据储存能力的提升,处理大规模图结构数据的能力对于越来越多的应用场景至关重要。现有很多研究致力于提升在图数据结构上的操作效率,如子图匹配、正则表达式匹配等。子图匹配是指子图同构,即给定查询图和数据图,找出数据图中与查询图有相同结构的子图。图谱包括有向图和无向图,有向图即是指图中的边是带箭头的,箭头即表明了方向,有的有向图中还同时给出了边的属性。针对于有向图的子图匹配,“EfficientSubgraphMatchingonBillionNodeGraphs”.ProceedingsoftheVLDBEndowment,Vol.5,No.9.ZhaoSun,HongzhiWang等,提出了一种可以在十亿级节点数的web网络上进行快速子图匹配的算法,文献中作者实验认为该算法可在Facebook网络(数十亿节点)上实现20s内的快速子图匹配(其他算法基本耗时几个小时以上)。然而该方法依赖于join操作,join操作就是sql语言(可以用其他语言实现)的两个表内连接操作的实现,例如图8a-d所示,图8a分解为三个基本单元q1,q2,q3,假设子图匹配算法在全图G上匹配q1的所有同构子图集合作为表S1,q2的同构子图集合表S2,q3的同构子图集合表S3,join操作就是S1与S2进行内连接,S1有列名[d,b,c,e,f],S2有列名[c,a,f],S1与S2按列[c,f]进行内连接得到表S12,S12有列名[d,b,c,e,f,a],然后再S12与表S3按列[b,a,f]进行内连接。join操作会产生大量的通信开销(相当于单机的时候多个表格联合查询)以及中间结果,导致算法的时间开销以及内存开销都很大。另外,由于有中间结果,所以在中间结果庞大的时候难以对最终的子图匹配结果进行筛选。
技术实现思路
本专利技术的目的在于改善现有技术中所存在的时间开销和内存开销大的问题,提供一种新的适用于有向图的适用于有向图的子图匹配方法及系统,可以降低内存消耗,以及提高匹配效率。为了实现上述专利技术目的,本专利技术实施例提供了以下技术方案:一方面,本专利技术实施例提供了一种图匹配方法,包括以下步骤:将子图中的所有节点进行排序,得到排序后的集合S;以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。上述方案中,通过对子图中的节点进行排序,且排序后以[ind_v,out_v]作为节点v的特征表示,然后再基于节点表示进行搜索,将传统子图匹配操作中的join操作替换为节点搜索操作,且通过对子图中的节点进行排序,基于排序后的节点进行搜索,可以以全图中的任意节点为起点,也可以任意设置搜索结束条件,且搜索过程中不会产生中间结果(要么为空,要么搜索到结果),因此可以极大地提高有向图的子图匹配效率,降低内存消耗。所述将子图中的所有节点进行排序的步骤,包括:S101,遍历在V中且不在S中的节点v,计算节点v与S中节点相连的边数d1、v在E中的总边数d2;其中,V为子图的节点集合,E为子图的边集合,S为预先设定的一个空集;S102,将在V中且不在S中的节点,按照(d1,d2)进行字典排序;S103,选取排序中(d1,d2)最大的节点v加入S;S104,重复S101-S103,直到V的中所有节点都加入S;S105,按照加入S的先后顺序输出有序集合S。上述方案中,按照(d1,d2)进行字典排序,即d1的优先级高于d2的优先级,这样做的好处是,在全图按排序的数据化表示进行节点搜索的时候,d1可以降低下一步搜索的节点范围,减少搜索次数,继而进一步提高匹配效率。对于下一步需要搜索的节点v,d1越大,v需要与已经搜索到的节点集合S中越多的节点相连。实际上d1等于下文中提到的ind_v中的元素个数,ind_v元素个数越多,v要满足验证一就越困难,这样就可以减少搜索次数。另外,(d1,d2)越大的节点,对全图进行节点搜索的时候越难以满足条件,因此S103中选取排序中(d1,d2)最大的节点v加入S,可以实现搜索次数的最小化,进一步提高匹配效率。所述以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示的步骤,包括:S201,对排序后S中的所有节点v,记录S中排在v之前并且与v相邻的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点;S202,对S中的所有节点v,计算与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向];S203,将[ind_v,out_v]作为v的节点特征,并按照v在S中的顺序输出该节点特征。定义排序后节点的数字化表示为DS=[[ind_v0,out_v0],[ind_v1,out_v1],……[ind_vn,out_vn]],n为子图中节点的个数减1,DS[j][0]=ind_vj,DS[j][1]=out_vj,0≤j≤n;所述以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件的步骤,包括:S301,记USM={},令msq=[0,…,0]为一个长度等于子图的节点数的全0序列,对于全图G中的任意节点u,判断对于DS[0][1]中的每个元素的差值与方向,与u相连的同方向的边的数量是否都大于等于差值,如果否,则结束整个搜索流程,并输出USM为空集;如果是,则令msq[0]=u,并从全图G中取出u的邻居中不属于msq的节点组成集合u_nbr,然后创建一个for循环F1,且循环F1中的元素v1∈u_nbr,并执行步骤S302;S302,记ind_adj=DS[k][0],out_count=DS[k][1],对于for循环Fk中还未验证过的元素vk,验证vk是否同时满足验证一和验证二,所述验证一为对于ind_adj的每一个元素的坐标与方向,验证vk与msq中坐标节点之间存在同一方向的边,所述验证二为对于out_v的每一个元素的差值与方向,验证与vk相连的同方向且起点和终点都不在msq前k个元素中的边的数量都大于等于差值,如果vk同时满足验证一与验证二,执行步骤S303;S303,令msq[k]=本文档来自技高网
...

【技术保护点】
1.一种适用于有向图的子图匹配方法,其特征在于,包括以下步骤:/n将子图中的所有节点进行排序,得到排序后的集合S;/n以[ind_v, out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;/n以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。/n

【技术特征摘要】
1.一种适用于有向图的子图匹配方法,其特征在于,包括以下步骤:
将子图中的所有节点进行排序,得到排序后的集合S;
以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;
以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。


2.根据权利要求1所述的适用于有向图的子图匹配方法,其特征在于,所述将子图中的所有节点进行排序的步骤,包括:
S101,遍历在V中且不在S中的节点v,计算节点v与S中节点相连的边数d1、v在E中的总边数d2;其中,V为子图的节点集合,E为子图的边集合,S为预先设定的一个空集;
S102,将在V中且不在S中的节点,按照(d1,d2)进行字典排序;
S103,选取排序中(d1,d2)最大的节点v加入S;
S104,重复S101-S103,直到V的中所有节点都加入S;
S105,按照加入S的先后顺序输出有序集合S。


3.根据权利要求2所述的适用于有向图的子图匹配方法,其特征在于,所述S103中,如果排序中(d1,d2)最大的节点不止一个,则随机选取其中一个节点加入S。


4.根据权利要求1所述的适用于有向图的子图匹配方法,其特征在于,所述以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示的步骤,包括:
S201,对排序后S中的所有节点v,记录S中排在v之前并且与v相邻的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点;
S202,对S中的所有节点v,计算与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向];
S203,将[ind_v,out_v]作为v的节点特征,并按照v在S中的顺序输出该节点特征。


5.根据权利要求4所述的适用于有向图的子图匹配方法,其特征在于,定义排序后节点的数字化表示为DS=[[ind_v0,out_v0],[ind_v1,out_v1],……[ind_vn,out_vn]],n为子图中节点的个数减1,DS[j][0]=ind_vj,DS[j][1]=out_vj,0≤j≤n;所述以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件的步骤,包括:
S301,记USM={},令msq=[0,…,0]为一个长度等于子图的节点数的全0序列,对于全图G中的任意节点u,判断对于DS[0][1]中的每个元素的差值与方向,与u相连的同方向的边的数量是否都大于等于差值,如果否,则结束整个搜索流程,并输出USM为空集;如果是,则令msq[0]=u,并从全图G中取出u的邻居中不属于msq的节点组成集合u_nbr,然后创建一个for循环F1,且循环F1中的元素v1∈u_nbr,并执行步骤S302;
S302,记ind_adj=DS[k][0],out_count=DS[k][1],对于for循环Fk中还未验证过的元素vk,验证vk是否同时满足验证一和验证二,所述验证一为对于ind_adj的每一个元素的坐标与方向,验证vk与msq中该坐标节点之间存在同一方向的边,所述验证二为对于out_v的每一个元素的差值与方向,验证与vk相连的同方向且起点和终点都不在msq前k个元素中的边的数量都大于等于差值,如果vk同时满足验证一与验证二,执行步骤S303;
S303,令msq[k]=vk,并重新取ind_adj=DS[k+1][0],out_count=DS[k+1][1],选取msq中坐标在ind_adj的元素组成集合ind_nbr,选取ind_nbr中度数最小的节点的邻居min_adj,然后删除min_adj中属于msq前k+1个的节点,并建立for循环F(k+1),且循环F(k+1)中的元素v(k+1)∈min_adj;
S304,循环执行上述步骤S302-S303,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环,令ind_adj=DS[n][0],out_count=DS[n][1],对于循环Fn中还未验证过的元素vn,如果vn同时满足验证一与验证二,那么令msq[n]=vn,此时msq=[u,v1,v2,…,vn],将序列msq加入到USM;
S305,判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。


6.根据权利要求5所述的适用于有向图的子图匹配方法,其特征在于,所述步骤S302中,如果vk不满足验证一与验证二中的任一项或多项,则选取u_nbr或min_adj中的另一个节点作为vk,循环执行步骤S302,直至找到满足验证一与验证二的vk。


7.根据权利要求4所述的适用于有向图的子图匹配方法,其特征在于,如果边具有属性,则ind_v中的元素表示为[坐标,方向,边的属性],out_v中的元素表示为[差值,方向,边的属性],以[ind_v,out_v,节点v的属性]作为节点v的节点特征进行数据化表示。


8.根据权利要求7所述的适用于有向图的子图匹配方法,其特征在于,定义排序后节点的数字化表示为DS=[[ind_v0,out_v0,LAB_v0],[ind_v1,out_v1,LAB_v1],……[ind_vn,out_vn,LAB_vn]],n为子图中节点的个数减1,DS[j][0]=ind_vj,DS[j][1]=out_vj,DS[j][2]=LAB_vj,0≤j≤n;所述以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件的步骤,包括:
S301’,记USM={},令msq=[0,…,0]为一个长度等于子图的节点数的全0序列,对于全图G中的任意节点u,计算u是否满足以下条件:1)u的属性是否包含DS[0][2]=lab_v0,2)对于DS[0][1]中的每一个元素的差值、方向与边的属性,与u相连的同方向与属性的边的数量都大于等于差值,如果u不满足1)和2)中的任意一个,则结束整个搜索流程,并输出USM为空集;如果u同时满足1)和2),则令msq[0]=u,并从全图G中取出u的邻居中不属于msq的节点组成集合u_nbr,然后创建一个for循环F1,且循环F1中的元素v1∈u_nbr,并执行步骤S302’;
S302’,记ind_adj=DS[k][0],out_count=DS[k][1],LAB=DS[k][2],对于for循环Fk中还未验证过的元素vk,验证vk是否同时满足验证一和验证二,所述验证一为验证vk的属性包含LAB,且对于ind_adj的每一个元素的坐标、方向与边的属性,vk与msq中该坐标的点之间存在同一方向与属性的边,所述验证二为验证对于out_v的每一个元素的差值、方向与边的属性,与vk相连的同方向与属性且起点和终点都不在msq前k个元素中的边的数量都大于等于差值,如果vk同时满足验证一与验证二,执行步骤S303’;
S303’,令msq[k]=vk,并重新取ind_adj=DS[k+1][0],out_count=DS[k+1][1],选取msq中坐标在ind_adj中的节点组成集合ind_nbr,选取ind_nbr中度数最小的节点的邻居min_adj,然后删除min_adj中属于msq前k+1个的节点,并建立for循环F(k+1),且循环F(k+1)中的元素v(k+1)∈min_adj;
S304’,循环执行上述步骤S302’-S303’,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环,令ind_adj=DS[n][0],out_count=DS[n][1],LAB=DS[n][2],对于循环Fn中还未验证过的元素vn,如果vn同时满足验证一与验证二,那么令msq[n]=vn,此时msq=[u,v1,v2,…,vn],将序列msq加入到USM;
S305’,判断是...

【专利技术属性】
技术研发人员:史晓春陈文周凡吟吴桐
申请(专利权)人:成都数联铭品科技有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1