CN112948591A - 适用于有向图的子图匹配方法及系统、电子设备 - Google Patents
适用于有向图的子图匹配方法及系统、电子设备 Download PDFInfo
- Publication number
- CN112948591A CN112948591A CN202110214990.9A CN202110214990A CN112948591A CN 112948591 A CN112948591 A CN 112948591A CN 202110214990 A CN202110214990 A CN 202110214990A CN 112948591 A CN112948591 A CN 112948591A
- Authority
- CN
- China
- Prior art keywords
- ind
- node
- nodes
- msq
- loop
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000012163 sequencing technique Methods 0.000 claims abstract description 8
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 139
- 238000012795 verification Methods 0.000 claims description 106
- 238000010276 construction Methods 0.000 claims description 24
- 230000008569 process Effects 0.000 claims description 16
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/36—Creation of semantic tools, e.g. ontology or thesauri
- G06F16/367—Ontology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Animal Behavior & Ethology (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及适用于有向图的子图匹配方法及系统、电子设备,该方法包括步骤:将子图中的所有节点进行排序,得到排序后的集合S;以[ind_v,out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。本发明可以极大地提高适用于有向图的子图匹配效率,降低内存消耗。
Description
技术领域
本发明涉及知识图谱技术领域,特别涉及一种适用于有向图的子图匹配方法及系统、电子设备。
背景技术
图数据在许多应用中都是重要的数据结构,包括社交网络、web和生物信息学领域等。随着数据储存能力的提升,处理大规模图结构数据的能力对于越来越多的应用场景至关重要。现有很多研究致力于提升在图数据结构上的操作效率,如子图匹配、正则表达式匹配等。子图匹配是指子图同构,即给定查询图和数据图,找出数据图中与查询图有相同结构的子图。
图谱包括有向图和无向图,有向图即是指图中的边是带箭头的,箭头即表明了方向,有的有向图中还同时给出了边的属性。针对于有向图的子图匹配,“EfficientSubgraph Matching on Billion Node Graphs”. Proceedings of the VLDB Endowment,Vol. 5, No. 9. Zhao Sun, Hongzhi Wang等,提出了一种可以在十亿级节点数的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] = 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。
上述方案中,将[ind_v, out_v]作为v的节点特征对排序后的节点进行数据化表示,再基于该数据化表示进行搜索,并以ind_v和out_v作为搜索限制条件,可以减低搜索量,提高搜索效率。具体分析,ind_v就是标记v与排列在v之前的节点之间的关系,因为排在v之前的节点先被找到,然后利用ind_v才能确定v的查找范围,S302也是通过ind_v来确定下一步的搜索范围(即for循环的范围)。Out_v是一个限制条件,限制了v满足验证二的可能性,out_v越大v满足验证二的可能性越低。ind_v决定了v满足验证一的难度,out_v决定了v满足验证二的难度,这两个验证保证了搜索高效率,因为这两个验证筛除了大部分不满足条件的点,这样就能高效找出满足适用于有向图的子图匹配条件的点。
所述步骤S302中,如果vk不满足验证一与验证二中的任一项或多项,则选取u_nbr或min_adj中的另一个节点作为vk,循环执行步骤S302,直至找到满足验证一与验证二的vk。
所述步骤S305中,判断是否满足搜索结束条件的步骤,包括:如果USM元素个数大于等于N,或者验证一与验证二进行了M次以上,或者完成所有情形的搜索,则判断为满足搜索结束条件,M和N均为正整数。
在另一种实施方案中,如果边具有属性,则ind_v中的元素表示为[坐标,方向,边的属性],out_v中的元素表示为[差值,方向,边的属性],以[ind_v, out_v,节点v的属性]作为节点v的节点特征进行数据化表示。
针对于边具有属性的情况,所述以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件的步骤,包括:
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前k+1个中属于msq的节点,并建立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’,判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
另一方面,本发明实施例提供了一种适用于有向图的子图匹配系统,包括:
排序模块,被配置为将子图中的所有节点进行排序,得到排序后的集合S;
数据化模块,被配置为以[ind_v, out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;
搜索模块,被配置为以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。
第三方面,本发明实施例提供了一种电子设备,包括:存储器,存储程序指令;处理器,与所述存储器相连接,执行存储器中的程序指令,实现本发明实施例中任一实施方式所述的适用于有向图的子图匹配方法中的步骤。
第四方面,本发明实施例提供了一种存储介质,存储有可运行程序,其特征在于,所述可运行程序被处理器运行时,实现本发明实施例中任一实施方式所述的适用于有向图的子图匹配方法中的步骤。
与现有技术相比,本发明方法及系统具有以下技术优势:
(1)实现了一种不需要join的适用于有向图的子图匹配计算方法。本方法明显的改进就是不需要产生中间结果以及join操作,通过对子图节点排序以及排序数据化表示,将join操作转换为搜索操作,在搜索过程中会不断剔除不符合条件的节点,输出结果只会是空集或者匹配成功的结果,而不会有中间结果输出,因此可以提高子图匹配效率,降低内存占用。
(2)方便对子图匹配的结果进行筛选。对起点u附近的子图匹配结果输出可以通过限制搜索到的结果数量N以及搜索次数M进行筛选,这样可以避免在某一个起点u附近进行大量的无效搜索或者搜索结果过多,这样就可以平衡在每一个节点附近的子图匹配结果数量。
(3)方便并行。本方法可以方便控制搜索起点,起点附近的搜索只需要起点附近的图信息,因此可以将全图的节点分为多份,每一份节点只需要附近的图信息进行子图匹配,这样就可以方便的进行并行,继而提高处理效率。
本发明所具有的其他优势将会在具体实施例中进行相应说明。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍, 应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为实施例中适用于有向图的子图匹配方法的流程图;
图2为步骤S10的流程图;
图3为步骤S20的流程图;
图4为步骤S30的流程图;
图5a、图5b分别为举例的一个子图的结构图;
图6为实施例中适用于有向图的子图匹配系统的组成框图;
图7为实施例中所述的电子设备的组成框图。
图8a为实施例中列举的一个全图,图8b、8c、8d分别为该全图的基本单元。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本实施例中提供的适用于有向图的子图匹配方法的流程图。如图1所示,本方法包括步骤:
S10,将子图中的所有节点进行排序,得到排序后的集合S;
S20,以[ind_v, out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;
S30,以全图中的任意节点为起点,在全图的每个节点局部,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。
通过本方法可以降低内存消耗,提高匹配效率,在于1):本算法通过子图节点排序,按排序逐个搜索匹配条件,真正变join操作为搜索操作,本算法是一个基于搜索的子图匹配算法;2)在搜索过程中可以灵活调整搜索的起点和同一起点的搜索次数,这样可以极大减少搜索的时间开销和内存开销;3)因为每一次搜索的结果输出都是匹配到的子图或者没有输出,所以不会有庞大的中间结果产生,而且可以优先输出已经产生的子图匹配结果;4)因为算法搜索起点可以任意设置,所以可以并行,按照起点不同设置不同的并行任务。
更具体地,请参阅图2,本实施例中,作为举例,将子图中的节点进行排序的步骤包括:
S101,遍历在V中且不在S中的节点v,计算节点v与S中节点相连的边数d1、v在E中的总边数d2;其中,V为子图的节点集合,E为子图的边集合,S为预先设定的一个空集。
S102,将在V中且不在S中的节点,按照(d1,d2)进行字典排序,即d1的优先级高于d2的优先级,先按照d1排序,如果多个节点的d1取值相等,再按照d2进行排序。注意,如果d1是按照由大(小)到小(大)排序,那么d2也是按照由大(小)到小(大)排序。
此处的排序可以是由大到小排序,也可以是由小到大排序。另外,本举例中,是直接按照d1和d2的个数进行排除,也可以采用其他方式,例如按照4^d1 * 2^d2计算结果来排序,但是要保障d1的优先级高于d2的优先级。
S103,选取以上排序中(d1, d2)最大的节点v加入S(即v的d1最大,同时在d1等于最大值的节点中v的d2最大),如果最大节点不止一个那么随机选取其中一个节点加入S。
S104,重复S101-S103,直到S等于V,也就是将集合V中的节点全部排序后放入集合S中。
S105,按照加入S的先后顺序输出有序集合S。
需要说明的是,本文中的字符例如S/V/E/v/q/u_nbr等等,都是为了便于区别及描述而随意选用的,容易理解的,可以有不同的表达方式,字符不用于对本方法的任何限定。
以图5a所示的有向子图为例,该子图中节点集合为{0, 1, 2},边集合为{(0, 1),(0, 2), (1, 2), (1,1)}。
第一步计算在V中且不在S中的节点的(d1, d2)数值并按照字典排序,得到排序(d1, d2)最大的节点集合为{1,2},这两个节点的(d1, d2)取值均为(0,3),,因此从{1, 2}这两个节点中随机选取1加入S,此时S = {1}。继续计算在V中且不在S中的节点的(d1, d2)并排序,此时得到的最大节点集合为{2},其(d1, d2)取值均为(2, 3), 2加入S,此时S ={1,2}。再次计算在V中且不在S中的节点的(d1, d2)并字典排序,得到集合{0}及其(d1,d2)取值为(2, 2),将0加入S,此时S = {1, 2, 0}。
数据化表示的含义就是如何通过子图的节点排序来重建子图。更具体地,如图3a所示,本实施例中,以[ind_v, out_v]作为节点v的节点特征,将排序后的节点进行数据化表示的步骤,包括:
S201,对排序后S中的所有节点v,记录S中排在v之前并且与v相邻(相邻即是指子图中与v直接相连)的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点。
此处的坐标即是指节点在S中的位置顺序,本举例中坐标从0开始(仅是基于坐标使用习惯而言,当然也可以不从0开始),因此例如当v为图5a中的节点2时,S = {1, 2, 0}中排在v之前并且与v相邻的节点在S中的节点为节点1,节点1在S中的第一个位置,故ind_v=0。此时还要同时记录节点v与节点1的边的方向,以v是否为起点规定正反方向,例如以节点v为起点的方向记为正方向,以节点v为终点的方向记为反方向(两个节点之间只有两种方向),那么此时ind_v中的元素表示为[0,正方向],[0,反方向]。也就是说v与节点1有两条边,其中一条为正方向(以v为起点),另一条为反方向。
S202,对S中的所有节点v,计算与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向]。此处的相同方向是指同为正方向或同为反方向,都为正即为都以v为起点,都为反方向即为都以v为终点。
此处仍然以v为节点2为例,此时ind_v = [[0,正方向], [0, 反方向]],与v相连的节点分别为0/1,与v=2相连的边有3条,即各个方向的边数量为3,其中以v为起点的有1条,以v为终点的有两条,所以与v相连的正方向的边数量1减去ind_v中正方向的元素个数1,得到差值为0,与v相连的反方向的边数量2减去ind_v中反方向的元素个数1,得到的差值为1,所以out_v = [[0, 正方向], [1, 反方向]]。
S203,将[ind_v, out_v]作为v的节点特征,并按照v在S中的顺序(即位置)输出该节点特征,即用节点特征代替该节点在S中的原有表示。
例如上述举例,S ={1 ,2, 0},子图的节点排序为{1, 2, 0},按照这个顺序,节点1, 2, 0对应的[ind_v, out_v]分别为:
[[],[[1, 正方向], [2, 反方向]]]
[[[0, 正方向], [0, 反方向]],[[0, 正方向], [1, 反方向]]]
[[[0, 正方向], [1, 正方向]],[[0, 正方向], [0, 反方向]]]。
得到了子图的节点排序后的数据化表示,接下来需要在全图上的指定节点(本方案中的起点可以由用户任意指定)作为起点,并按子图节点排序后的数据化表示匹配出与子图同构的子图。为了便于描述,此处将子图用q表示,全图用G表示(容易理解的是,本发明方案是针对于有向图而言的,因此子图或者全图都是指有向图),子图节点排序后的数据化表示为DS,DS = [[ind_v0, out_v0], [ind_v1, out_v1], ……[ind_vn, out_vn]],子图中节点的个数为n+1。DS[j]就是DS的第j个位置的值=[ind_vj, out_vj],DS[j][0]就是ind_vj,就是DS的第j个位置的值的第0个位置的值,DS[j][1]就是out_vj,就是DS的第j个位置的值的第一个位置的值,0≤j≤n。
如图4a所示,本实施例中,对全图G的任意节点u以及正整数M、N(M、N为搜索结束条件中的参数),u作为起点的子图匹配过程(即搜索过程),包括如下步骤:
S301,记USM = {}(用来收集最终的匹配结果),令msq = [0, …, 0]为一个长度等于q的节点数(n+1)的全0序列,对于全图G中的任意节点u,判断对于DS[0][1]中的每个元素的差值与方向,与u相连的同方向的边的数量是否都大于等于差值,如果否,则结束整个匹配流程,并输出USM为空集;如果是,则令msq[0] = u(也就是将msq中坐标为0的元素替换为u),并从全图G中取出u的邻居中不属于msq的节点组成集合u_nbr,然后创建一个for循环:(for v1 属于u_nbr),记录该循环为F1,即此时的k=1。
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。
如果vk不满足验证一与验证二中的任一项或多项,则选取u_nbr或min_adj中的另一个节点作为vk,循环执行步骤S302,直至找到满足验证一与验证二的vk。
例如,对于for循环F1中的节点v1,记ind_adj = DS[1][0], out_count = DS[1][1],验证对ind_adj的每个元素的坐标与方向,v1与msq中坐标节点之间存在同一方向的边(称为验证一),验证对out_count的每个差值与方向,与v1相连的同方向且起点和终点都不在msq前1个元素中的边的数量都大于等于差值(称为验证二),如果v1同时满足验证一与验证二,那么执行步骤S303;
如果v1不满足验证一与验证二中的任一项或两项,则选取u_nbr中的另一个节点作为v1,即验证新的v1是否同时满足验证一与验证二,循环执行本步骤S302,直至找到满足验证一与验证二的v1。
如果将u_nbr中的所有节点作为v1也找不到同时满足验证一和验证二的节点,那么输出USM为空集。
另外,在更完善的方案中,如果人为设置了外部搜索结束条件,例如USM元素个数大于等于N,或者上述验证一与验证二进行了M次以上,M和N均为由用户任意设置的正整数,则有可能搜索会因为M和N满足条件而结束搜索。因此在验证vk是否同时满足验证一与验证二之前,先进行搜索结束判断,即判断搜索是否结束,如果结束则输出USM,没有结束才验证vk是否同时满足验证一与验证二,并执行后续操作。
S303,令msq[k] = vk(也就是将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。
例如,令msq[1] = v1,并重新取ind_adj = DS[2][0],out_count = DS[2][1],取出msq中坐标在ind_adj的元素组成集合ind_nbr,选取ind_nbr中度数最小的节点的邻居min_adj,然后删除min_adj中属于msq前2个的节点,然后建立for循环F2(for v2 属于min_adj)。
S304,循环执行上述步骤S302-S303,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn(即k+1=n)则停止建立下一个循环,令ind_adj = DS[n][0],out_count =DS[n][1],对于循环Fn中还未验证过的元素vn,如果vn同时满足验证一与验证二,那么令msq[n] = vn,此时msq = [u, v1, v2, …, vn],将序列msq加入到USM,然后进入步骤S305。
例如,对于F2循环中的v2,类似步骤S302(此时的ind_adj = DS[2][0], out_count = DS[2][1]),如果v2同时满足验证一与验证二(注意此时的验证对象是v2),那么令msq[2] = v2,并重新取ind_adj = DS[3][0], out_count = DS[3][1],取出msq中坐标在ind_adj的元素组成集合ind_nbr,选取ind_nbr中度数最小的节点的邻居min_adj,然后删除min_adj中属于msq前2个的节点,然后建立for循环F3(for v3 属于min_adj)。
类似地建立循环,当建立到for循环Fn则停止建立下一个循环,其中n等于子图q的节点数减去1,令ind_adj = DS[n][0],out_count = DS[n][1](DS[n]此时即为DS的最后一行),对于Fn中的点vn,进行验证一与验证二,如果验证一与验证二都成立,即vn同时满足验证一与验证二,那么令msq[n] = vn,此时msq = [u, v1, v2, …, vn],将序列msq加入到USM。
此处需要注意的是,msq是一个序列,作为一个整体加入USM中,那么USM中的元素即为{msq1, msq2, msq3, …}的形式,其中每一个msq1、msq2…都是一个长度为n+1的序列,即msq1 = [u, v1, v2, …, vn],msq2等其他USM的元素也是长度这样的为n+1的序列。将msq加入USM中不是将msq的元素分别加入USM中,而是msq作为一个整体序列加入USM中。算法过程中可以有很多个msq加入到USM中,msq一直是在动态变化的。
S305,判断是否达到搜索结束条件,如果是就结束搜索,输出USM,否则返回步骤S302中,继续搜索,直至搜索结束。
例如,如果USM元素个数大于等于N,或者上述验证一与验证二进行了M次以上,M和N均为由用户任意设置的正整数,则可以停止本匹配过程并输出USM。
当然地,M和N为人为设定的外部搜索结束条件,以此来减少搜索量。如果还没有达到外部搜索结束条件(即USM元素个数小于N,或者上述验证一与验证二进行了不到M次)就已经搜索完了所有的情形,那么也会停止搜索,输出USM。
在有向图中,有些情况下在图谱中同时给出了边的属性,尤其是在两个节点之间同时具有正方向和反方向的情况。图3a和图4a所示的流程仅适用于没有边的属性的有向图。而对于有边的属性的有向图的步骤S20和S30分别如图3b、图4b所示。
如图3b所示,以[ind_v, out_v]作为节点v的节点特征,将排序后的节点进行数据化表示的步骤,包括:
S201’,对排序后S中的所有节点v,记录S中排在v之前并且与v相邻的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向,属性],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点,此处所述属性为边的属性。
需要注意的是,如果节点v与某个坐标节点之间有多条边,那么该坐标与每一条边的方向与属性都分别作为ind_v的元素。
例如图5b所示的有向图,节点1与节点2之间存在两条边,仍然以节点v为节点2为例,S中排在v之前并且与v相邻的节点在S中的节点为节点1,节点1在S中的第一个位置,故ind_v=0。此处仍然以节点v为起点的方向记为正方向,以节点v为终点的方向记为反方向,那么此时ind_v中的元素表示为[0,正方向,lab1]以及[0,反方向,lab2],即ind_v = [ [0,正方向,lab1], [0,反方向,lab2]]。
S202’,对S中的所有节点v,计算与v相连的各个方向与属性的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向,属性]。此处属性为边的属性,相同方向是指同为正方向或同为反方向。
提醒注意的是,此处及后文中的“各个方向与属性”,或“同一方向与属性”或“同方向与属性”等中的属性都是指边的属性。
如图5b所示,这里看节点0,与节点0相连的边有{(0, 1, lab1), (0, 2, lab2)},以节点0的角度看,与节点0相连的这两条边都是正方向的,但是一条边属性为lab1,另一条属性为lab2,所以与节点0相连的正向且属性为lab1的边数量为1, 与节点0相连的正向且属性为lab2的边的数量为1。节点0的ind_v经过计算为ind_v = [[0 ,正方向, lab1], [1,反方向, lab2]],ind_v中正方向且属性lab1的元素个数为1,反方向且属性为lab2的元素个数为1,所以得到节点0的out_v = [[0,正, lab1], [0, 反, lab2]]。
如果看节点2,那么与节点2相连的正向边有一条且属性是lab1,与节点2相连的反向边有两条且属性lab2,节点2的ind_v = [[0, 正, lab1], [0, 反, lab2]],经过计算节点2的out_v = [[0, 正, lab1], [1, 反, lab2]]。
S203’,将[ind_v, out_v,v的属性]作为v的节点特征,并按照v在S中的顺序(即位置)输出该节点特征,即用节点特征代替该节点在S中的原有表示。
此处需要注意的是,在节点表示时所述的属性为节点的属性,为了便于与边的属性进行区分,本文中将边的属性用lab表示,节点的属性用LAB表示。
如图4b所示,针对于带边的属性的有向图,定义排序后节点的数字化表示为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’。
此处提醒注意的是,vk是全图中的节点,vk的属性是指节点vk在全图中的属性,LAB是指该节点在子图中时的属性。
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’,判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
此处将以图5b为例,并假设图5b是子图也是全图,以及假设图5b上的节点属性都是账户,并取u=1,这个例子描述相对简单,以帮助更容易理解。另外,为了描述减省,文中的“正”表示正方向,“反”表示反方向。
图5b的DS为:[[[], [[1, 正,lab2], [2,反,lab1]], 账户],
[[[0, 正, lab1], [0, 反, lab2]], [[0, 正, lab1], [1, 反, lab2]], 账户],
[[[0, 正, lab1], [1, 正, lab2]], [[0, 正, lab1], [0, 正,lab2]], 账户]]。
计算过程为:
1)令USM = {}, msq=[0, 0, 0], 注意这里的0不是图5b的节点0。对DS[0][1] =[[1, 正,lab2], [2,反,lab1],账户],对u=1做以下验证: u=1的属性包含账户;对元素[1,正,lab2]验证u=1的正方向且标签为lab2的边数量大于等于1,对元素[2, 反, lab2]验证u=1的反方向且标签为lab1的边数量大于等于2。u=1满足验证,所以令msq[0] =1。取u=1的邻居构成集合u_nbr={2, 0},建立for循环F1(for v1 属于u_nbr);
2)取ind_adj = DS[1][0] = [[0, 正, lab1], [0, 反, lab2]],out_count=DS[1][1]= [[0, 正, lab1], [1, 反, lab2]],LAB=DS[1][2]=账户,对F1中还未验证过的节点v1,做以下验证:验证一,v1的属性包含LAB,且对ind_adj的每一个元素[坐标,方向,属性](也就是元素[0, 正, lab1]和元素[0, 反, lab2]),v1和msq中该坐标点之间有该方向该属性的边;验证二,对于out_count的每一个元素[差值,方向,属性](也就是元素[0, 正,lab1]和元素[1, 反,lab2]),验证v1的边起点终点都不在前1个元素(即[1])中的边中,该方向与属性的边的数量大于等于差值。v1=2满足验证1与验证2,v1=0不满足。当v1=2时,令msq[1]=v1;
3)如果v1满足验证一与验证二,令msq[1]=v1(例如v1=2), ind_adj=DS[2][0]=[[0, 正, lab1], [1, 正, lab2]]。取坐标在ind_adj中(即坐标0和坐标1)的msq的点(例如v1=2时msq=[1, 2, 0],坐标0和坐标1的点为1和2)组成集合ind_nbr=[1, 2],选取ind_nbr中读书最小的点(1和2随机选一个)的邻居并删除其中属于msq前2个的点,作为集合min_adj={0},建立for循环F2(for v2 属于min_adj);
4)对于F2中还未验证过的点v2,此时满足k等于n(子图节点数减1),那么对v2进行验证,如果v2满足验证1且满足验证2,令msq[2]=v2,并将msq加入USM,例如v2=0满足验证1与验证2,此时msq=[1, 2, 0],加入USM后USM={[1,2,0]}。
5)如果验证完全部情形或者验证次数超过预定值M或者USM中元素个数大于N,则可以停止算法并输出USM。例如以上过程对图5b得到的USM={[1,2,0]}。
整体看来,基于图5b与u=1的算法流程如下:
令msq=[1,0,0];F1={2,0};
For v1 in F1:
验证一(v1, DS[1][0],DS[1][2]); 验证二(v1,DS[1][1]);
If (验证一成立) and (验证二成立):
重新赋予msq[1] = v1;
计算F2 = min_adj(DS[2][0]);
Else: continue;
For v2 in F2:
验证一(v2, DS[2][0],DS[2][2]); 验证二(v2,DS[2][1]);
If (验证一成立)and (验证二成立):
重新赋予msq[2] = v2;
将msq加入USM;
Else: continue
也就是说,事实上建立了一个2层(层数等于子图节点数减1)嵌套的循环F1>F2,最终得到一个子图匹配结果USM={[1, 2, 0]},还是原图图5b。
如图6a和图6b所示,本实施例中同时提供了适用于有向图的子图匹配系统,包括排序模块61、数据化模块62和搜索模块63,其中,排序模块61被配置为将子图中的所有节点进行排序,得到排序后的集合S;数据化模块62被配置为以[ind_v, out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;搜索模块63被配置为以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。
更具体地,排序模块61包括边计算子模块、排序子模块和入选子模块,其中,边计算子模块被配置为遍历在V中且不在S中的节点v,计算节点v与S中节点相连的边数d1、v在E中的总边数d2;其中,V为子图的节点集合,E为子图的边集合,S为预先设定的一个空集;排序子模块被配置为将在V中且不在S中的节点,按照(d1, d2)进行字典排序;入选子模块被配置为选取排序中(d1, d2)最大的节点v加入S,直到V中所有节点都按照先后顺序加入S,且如果排序中(d1, d2)最大的节点不止一个,则随机选取其中一个节点加入S。
数据化模块62包括集合构造子模块、特征构造子模块和数据化表示子模块,其中,集合构造子模块被配置为对排序后S中的所有节点v,记录S中排在v之前并且与v相邻的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点;特征构造子模块被配置为对S中的所有节点v,计算与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向];数据化表示子模块被配置为将[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。
图6a所示结构适用于不带边的属性的有向图,如图5a所示的图结构。而针对于如图5b所示的图结构,则节点特征需要带上边的属性,因此,ind_v中的元素表示为[坐标,方向,属性],out_v中的元素表示为[差值,方向,属性],此时则以[ind_v, out_v,v的属性]作为节点v的节点特征进行数据化表示。而此时,DS = [[ind_v0, out_v0, LAB_v0], [ind_v1, out_v1, LAB_v1], ……[ind_vn, out_vn, LAB_vn]],DS[j][0]=ind_vj,DS[j][1]=out_vj,DS[j][2]=LAB_vj,0≤j≤n。
图6a所示结构中,搜索模块63包括第一首循环构造子模块、第一次循环构造子模块、第一搜索子模块和搜索结束判断子模块。
第一首循环构造子模块被配置为,记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。
第一次循环构造子模块被配置为构造次循环,所述构造次循环包括:记ind_adj =DS[k][0], out_count = DS[k][1],对于for循环Fk中还未验证过的元素vk,验证vk是否同时满足验证一和验证二,所述验证一为对于ind_adj的每一个元素,验证vk与msq中坐标节点之间存在同一方向的边,所述验证二为对于out_v的每一个元素,验证与vk相连的同方向且起点和终点都不在msq前k个元素中的边的数量都大于等于差值,如果vk同时满足验证一与验证二,那么令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;且第一次循环构造子模块还被配置为循环执行所述构造次循环的操作,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环。
第一搜索子模块被配置为,当第一次循环构造子模块构造到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。
而在图6ba所示结构中,搜索模块63包括第二首循环构造子模块、第二次循环构造子模块、第二搜索子模块和搜索结束判断子模块。
第二首循环构造子模块被配置为,记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;
第二次循环构造子模块被配置为构造次循环,所述构造次循环包括:记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同时满足验证一与验证二,令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;且第二次循环构造子模块还被配置为循环执行所述构造次循环的操作,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环;
搜索子模块被配置为,当第二次循环构造子模块构造到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。
搜索结束判断子模块被配置为,判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
搜索结束判断子模块被配置为判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。例如,如果USM元素个数大于等于N,或者验证一与验证二进行了M次以上,或者完成所有情形的搜索,则判断为满足搜索结束条件,M和N均为正整数。
本系统是与前述方法相对应的方案,此处未涉及之处可以参见前述方法实施例的相关描述。
如图7所示,本实施例同时提供了一种电子设备,该电子设备可以包括处理器71和存储器72,其中存储器72耦合至处理器71。值得注意的是,该图是示例性的,还可以使用其他类型的结构来补充或替代该结构。
如图7所示,该电子设备还可以包括:输入单元73、显示单元74和电源75。值得注意的是,该电子设备也并不是必须要包括图7中显示的所有部件。此外,电子设备还可以包括图7中没有示出的部件,可以参考现有技术。
处理器71有时也称控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该处理器71接收输入并控制电子设备的各个部件的操作。
其中,存储器72例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其他合适装置中的一种或多种,可存储上述处理器71的配置信息、处理器71执行的指令、记录的表格数据等信息。处理器71可以执行存储器72存储的程序,以实现信息存储或处理等。在一个实施例中,存储器72中还包括缓冲存储器,即缓冲器,以存储中间信息。
输入单元73例如用于向处理器71提供实体主体的数据或者数据持有方所拥有的数据。显示单元74用于显示处理过程中的各种结果,例如页面中展示的本体模型、文本框、节点表的字段等等,该显示单元例如可以为LCD显示器,但本发明并不限于此。电源75用于为电子设备提供电力。
本发明实施例还提供一种计算机可读指令,其中当在电子设备中执行所述指令时,所述程序使得电子设备执行本发明方法所包含的操作步骤。
本发明实施例还提供一种存储有计算机可读指令的存储介质,其中所述计算机可读指令使得电子设备执行本发明方法所包含的操作步骤。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成模块及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (15)
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’,判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
9.根据权利要求5或8所述的适用于有向图的子图匹配方法,其特征在于,如果USM元素个数大于等于N,或者验证一与验证二进行了M次以上,或者完成所有情形的搜索,则判断为满足搜索结束条件,M和N均为正整数。
10.一种适用于有向图的子图匹配系统,其特征在于,包括:
排序模块,被配置为将子图中的所有节点进行排序,得到排序后的集合S;
数据化模块,被配置为以[ind_v, out_v]作为节点v的节点特征,将集合S中的所有节点进行数据化表示,其中,ind_v为排在v之前并且与v相邻的节点在S中的坐标组成的集合,out_v为与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数的差值组成的集合,且ind_v和out_v中的元素都带有方向;
搜索模块,被配置为以全图中的任意节点为起点,基于排序后所有节点的数据化表示进行节点搜索,直至满足预设的搜索结束条件,并将搜索结果作为匹配结果输出。
11.根据权利要求10所述的适用于有向图的子图匹配系统,其特征在于,所述排序模块包括:
边计算子模块,被配置为遍历在V中且不在S中的节点v,计算节点v与S中节点相连的边数d1、v在E中的总边数d2;其中,V为子图的节点集合,E为子图的边集合,S为预先设定的一个空集;
排序子模块,被配置为将在V中且不在S中的节点,按照(d1, d2)进行字典排序;
入选子模块,被配置为选取排序中(d1, d2)最大的节点v加入S,直到V中所有节点都按照先后顺序加入S。
12.根据权利要求10所述的适用于有向图的子图匹配系统,其特征在于,所述数据化模块包括:
集合构造子模块,被配置为对排序后S中的所有节点v,记录S中排在v之前并且与v相邻的节点在S中的坐标的集合,记为ind_v,且ind_v中的元素表示为[坐标,方向],所述方向为节点v与坐标节点之间的边的方向,所述坐标节点为具有该坐标的节点;
特征构造子模块,被配置为对S中的所有节点v,计算与v相连的各个方向的边数量减去ind_v中有相同方向的元素个数,得到的差值记为out_v,且out_v中的元素表示为[差值,方向];
数据化表示子模块,被配置为将[ind_v, out_v]作为v的节点特征,并按照v在S中的顺序输出该节点特征。
13.根据权利要求12所述的适用于有向图的子图匹配系统,其特征在于,定义排序后节点的数字化表示为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;所述搜索模块包括:
第一首循环构造子模块,被配置为记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;
第一次循环构造子模块,被配置为构造次循环,所述构造次循环包括:记ind_adj = DS[k][0], out_count = DS[k][1],对于for循环Fk中还未验证过的元素vk,验证vk是否同时满足验证一和验证二,所述验证一为对于ind_adj的每一个元素的坐标与方向,验证vk与msq中该坐标节点之间存在同一方向的边,所述验证二为对于out_v的每一个元素的差值与方向,验证与vk相连的同方向且起点和终点都不在msq前k的元素中的边的数量都大于等于差值,如果vk同时满足验证一与验证二,那么令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;且第一次循环构造子模块还被配置为循环执行所述构造次循环的操作,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环;
第一搜索子模块,被配置为当第一次循环构造子模块构造到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;
搜索结束判断子模块,被配置为判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
14.根据权利要求12所述的适用于有向图的子图匹配系统,其特征在于,如果边具有属性,则ind_v中的元素表示为[坐标,方向,边的属性],out_v中的元素表示为[差值,方向,边的属性],以[ind_v, out_v,节点v的属性]作为节点v的节点特征进行数据化表示;
定义排序后节点的数字化表示为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;所述搜索模块包括:
第二首循环构造子模块,被配置为记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;
第二次循环构造子模块,被配置为构造次循环,所述构造次循环包括:记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同时满足验证一与验证二,令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;且第二次循环构造子模块还被配置为循环执行所述构造次循环的操作,且每循环一次k的取值加1,k=1,2,3…n,直到建立到for循环Fn则停止建立下一个循环;
搜索子模块,被配置为当第二次循环构造子模块构造到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;
搜索结束判断子模块,被配置为判断是否满足搜索结束条件,如果是,则停止搜索,并输出USM。
15.一种电子设备,其特征在于,包括:
存储器,存储程序指令;
处理器,与所述存储器相连接,执行存储器中的程序指令,实现权利要求1-9任一所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110214990.9A CN112948591B (zh) | 2021-02-25 | 2021-02-25 | 适用于有向图的子图匹配方法及系统、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110214990.9A CN112948591B (zh) | 2021-02-25 | 2021-02-25 | 适用于有向图的子图匹配方法及系统、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112948591A true CN112948591A (zh) | 2021-06-11 |
CN112948591B CN112948591B (zh) | 2024-02-09 |
Family
ID=76246373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110214990.9A Active CN112948591B (zh) | 2021-02-25 | 2021-02-25 | 适用于有向图的子图匹配方法及系统、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112948591B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741569A (zh) * | 2022-06-09 | 2022-07-12 | 杭州欧若数网科技有限公司 | 一种在图数据库中支持复合数据类型方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102254012A (zh) * | 2011-07-19 | 2011-11-23 | 北京大学 | 一种基于外存的图数据存储方法及子图查询方法 |
CN103077216A (zh) * | 2012-12-28 | 2013-05-01 | 中国科学院深圳先进技术研究院 | 子图匹配装置及子图匹配的方法 |
CN108090179A (zh) * | 2017-12-15 | 2018-05-29 | 北京海致星图科技有限公司 | 一种Spark并发子图查询的方法 |
CN108345853A (zh) * | 2018-02-08 | 2018-07-31 | 吉首大学 | 基于同构理论的字符识别方法、装置及终端设备 |
US20180329958A1 (en) * | 2017-05-12 | 2018-11-15 | Battelle Memorial Institute | Performance and usability enhancements for continuous subgraph matching queries on graph-structured data |
CN111444394A (zh) * | 2019-01-16 | 2020-07-24 | 阿里巴巴集团控股有限公司 | 获取实体间关系表达的方法、系统和设备、广告召回系统 |
-
2021
- 2021-02-25 CN CN202110214990.9A patent/CN112948591B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102254012A (zh) * | 2011-07-19 | 2011-11-23 | 北京大学 | 一种基于外存的图数据存储方法及子图查询方法 |
CN103077216A (zh) * | 2012-12-28 | 2013-05-01 | 中国科学院深圳先进技术研究院 | 子图匹配装置及子图匹配的方法 |
US20180329958A1 (en) * | 2017-05-12 | 2018-11-15 | Battelle Memorial Institute | Performance and usability enhancements for continuous subgraph matching queries on graph-structured data |
CN108090179A (zh) * | 2017-12-15 | 2018-05-29 | 北京海致星图科技有限公司 | 一种Spark并发子图查询的方法 |
CN108345853A (zh) * | 2018-02-08 | 2018-07-31 | 吉首大学 | 基于同构理论的字符识别方法、装置及终端设备 |
CN111444394A (zh) * | 2019-01-16 | 2020-07-24 | 阿里巴巴集团控股有限公司 | 获取实体间关系表达的方法、系统和设备、广告召回系统 |
Non-Patent Citations (2)
Title |
---|
TINGHUAI MA 等: "A Comparative Study of Subgraph Matching Isomorphic Methods in Social Networks", 《IEEE ACCESS》, vol. 6, pages 66621, XP011696905, DOI: 10.1109/ACCESS.2018.2875262 * |
李开宇: "大图上子图匹配算法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊 )》, no. 01, pages 138 - 645 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741569A (zh) * | 2022-06-09 | 2022-07-12 | 杭州欧若数网科技有限公司 | 一种在图数据库中支持复合数据类型方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112948591B (zh) | 2024-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zou et al. | Finding top-k maximal cliques in an uncertain graph | |
CN105389349B (zh) | 词典更新方法及装置 | |
US20170116315A1 (en) | Fast path traversal in a relational database-based graph structure | |
Zheng et al. | Graph similarity search with edit distance constraint in large graph databases | |
Semertzidis et al. | Top-$ k $ Durable Graph Pattern Queries on Temporal Graphs | |
CN109656798B (zh) | 基于顶点重排序的超级计算机大数据处理能力测试方法 | |
CN110719106B (zh) | 一种基于节点分类排序的社交网络图压缩方法及系统 | |
US9305076B1 (en) | Flattening a cluster hierarchy tree to filter documents | |
CN106156773A (zh) | 一种文本图像的分割方法及装置 | |
WO2013138441A1 (en) | Systems, methods, and software for computing reachability in large graphs | |
CN109213445A (zh) | 一种存储系统元数据的管理方法、管理系统及相关装置 | |
CN111651641A (zh) | 一种图查询方法、装置及存储介质 | |
CN112905690A (zh) | 一种基于超图的金融时序数据挖掘方法及系统 | |
CN112860685A (zh) | 对数据集的分析的自动推荐 | |
CN112948591A (zh) | 适用于有向图的子图匹配方法及系统、电子设备 | |
EP3955256A1 (en) | Non-redundant gene clustering method and system, and electronic device | |
CN112579835A (zh) | 一种子图匹配方法及系统、电子设备、存储介质 | |
CN109684185B (zh) | 基于启发式遍历的超级计算机大数据处理能力测试方法 | |
CN110807061A (zh) | 一种基于分层搜索不确定图的频繁子图的方法 | |
CN116028678A (zh) | 一种知识图谱中全量路径查找方法及系统 | |
US10902036B2 (en) | Intersection algorithm-based search method and system, and storage medium | |
CN104537279A (zh) | 一种序列聚类方法及装置 | |
CN102750263B (zh) | 互联网超链接网络图数据的简化方法 | |
CN111597396A (zh) | 异构网络社群检测方法、装置、计算机设备及存储介质 | |
Navarro et al. | A Node Linkage Approach for Sequential Pattern Mining |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |