CN115587116A - 快速查询同构子图的方法、装置、电子设备及存储介质 - Google Patents

快速查询同构子图的方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115587116A
CN115587116A CN202211592933.5A CN202211592933A CN115587116A CN 115587116 A CN115587116 A CN 115587116A CN 202211592933 A CN202211592933 A CN 202211592933A CN 115587116 A CN115587116 A CN 115587116A
Authority
CN
China
Prior art keywords
query
graph
target
nodes
node
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.)
Pending
Application number
CN202211592933.5A
Other languages
English (en)
Inventor
张涛
张弛
杜玉洁
周雅飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Anpro Information Technology Co ltd
Original Assignee
Beijing Anpro Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Anpro Information Technology Co ltd filed Critical Beijing Anpro Information Technology Co ltd
Priority to CN202211592933.5A priority Critical patent/CN115587116A/zh
Publication of CN115587116A publication Critical patent/CN115587116A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

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)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种快速查询同构子图的方法、装置、电子设备及存储介质,方法包括:获取一个目标图和若干个查询图,目标图为待测程序的程序依赖图,若干个查询图为若干个代码片段的程序依赖图;利用局部敏感哈希算法在目标图中定位出所有与查询图的查询起始节点匹配的目标起始节点,将一对匹配的查询起始节点和目标起始节点确定为一个起始节点克隆对;基于所有起始节点克隆对对目标图和查询图并行地执行切片子图匹配,将目标图与查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。通过局部敏感哈希算法快速匹配起始节点克隆对,并基于起始节点克隆对并行执行切片子图匹配,大大提高了同构子图查询的效率。

Description

快速查询同构子图的方法、装置、电子设备及存储介质
技术领域
本公开主要涉及计算机技术应用领域,特别涉及一种快速查询同构子图的方法、装置、电子设备及存储介质。
背景技术
子图匹配是一种常用的图查询操作,其核心概念在于,对于一个目标图G和给定的查询图Q,查询出所有Q在G中的子图同构映射。在代码克隆检测技术领域中,程序依赖图由于包含了源代码的语法信息,常被用于表征代码特征。一旦获得了待测程序的程序依赖图,就可以使用子图匹配算法来寻找克隆代码。然而现有技术很大的一个局限性在于,当作为匹配目标的子图库(查询图库)容量较大时,或者当待测程序的程序依赖图包含大量的节点和边时,子图匹配面临着极高的计算负荷和时间开销问题。因此,如何快速地进行同构子图的查询已经成为目前本领域技术人员面临的一个技术难题。
发明内容
本申请公开的实施例旨在提供一种快速查询同构子图的方法、装置、电子设备及存储介质,以解决上述问题。
在本公开的第一方面中,提供了一种快速查询同构子图的方法,包括以下步骤:
获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
可选地,所述利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,包括以下步骤:
将所述目标图中的节点通过预设的局部敏感哈希函数映射到多个哈希桶内;
获取所有所述查询图的查询起始节点,并分别对所述查询起始节点通过所述预设的局部敏感哈希函数计算待查询桶号;
计算所述查询起始节点与所述待查询桶号对应的所述哈希桶内的所述目标图中的节点之间的距离;
将距离小于预设阈值的所述目标图中的节点标记为目标起始节点。
可选地,所述基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,包括以下步骤:
为每一个所述起始节点克隆对创建一个执行切片子图匹配的子任务;
将所述起始节点克隆对中的查询起始节点所在的查询图和所述目标图下发至所述子任务;
并行地执行所有所述子任务。
可选地,所所述同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点,包括以下步骤:
分别将所述目标起始节点和所述查询起始节点作为所述目标图和所述查询起始节点所在的查询图的切片点;
从所述切片点开始,基于相同切片规则同时对所述目标图和所述查询图执行切片,逐步获取与所述目标起始节点和所述查询起始节点存在控制或数据依赖关系的其余节点;
对所述其余节点进行相似度比较,从中确定匹配的节点对,直到切片结束。
可选地,所述利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点之前,还包括以下步骤:
获取所述目标图的节点集合和所述若干个查询图的所有节点集合;
对所述目标图的节点集合和所述若干个查询图的所有节点集合计算交集;
基于所述交集,去除所述目标图和所述若干个查询图中不存在于所述交集中的节点。
在本公开的第二方面中,提供了一种快速查询同构子图的装置,包括:
图获取单元,用于获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
起始节点克隆对确定单元,用于利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
切片子图匹配单元,用于基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
本公开的实施例提供的技术方案可以有以下有益效果:
通过局部敏感哈希算法在目标图中快速定位与查询图的查询起始节点匹配的目标起始节点,并基于起始节点克隆对并行执行切片子图匹配,不仅能够以节点为粒度进行精确的同构子图查询,还能够大大减少节点间匹配的次数,提高子图查询的速度。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为根据一示例性实施例示出的一种快速查询同构子图的方法流程图;
图2为根据一示例性实施例示出的一种快速查询同构子图的方法流程图;
图3为根据一示例性实施例示出的一种快速查询同构子图的方法流程图;
图4为根据一示例性实施例示出的一种快速查询同构子图的方法流程图;
图5为根据一示例性实施例示出的一个目标图和两个查询图的示意图;
图6为根据一示例性实施例示出的一种快速查询同构子图的装置的结构示意图;
图7为根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
实施例一:
参照图1,本公开的实施例提出了一种快速查询同构子图的方法,包括步骤S101-S103:
S101:获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
具体地,本公开的实施例将获取一个待测程序的程序依赖图作为目标图,获取若干个代码片段的程序依赖图作为查询图。子图匹配是一种常用的图查询操作,其核心概念在于,对于一个目标图G和给定的查询图Q,查询出所有Q在G中的子图同构映射。图同构(Graph Isomorphism)是指对于给定的两个图G1=(V1, E1)和G2=(V2, E2),如果存在一个定义在V1→V2双射函数f满足对于(u, v) ϵ E1→(f(u), f(v)) ϵ E2,那么就称这两个图是同构的。子图同构(Subgraph Isomorphism)是指如果图G1和图G2的子图是同构的,就称G2关于G1是子图同构的,也可以说G1是G2的子图。本公开的实施例提出的快速查询同构子图的方法的目标就是为了快速查找目标图与查询图之间是否存在一个或多个同构的子图。
程序依赖图(Program Dependency Graph, PDG)主要描述代码指令之间相互依赖、相互影响的关系,程序依赖图包含了语句间的控制依赖和数据依赖关系。其中,每个节点表示语句(如赋值语句、方法调用语句等)或者控制谓词;每条边表示控制或数据依赖关系,数据依赖边反映一个变量对另一个变量的值的影响,控制依赖边则是某个语句对变量值的影响所相对应的控制相关性的边。例如,可以采用开源代码分析工具Joern生成C/C++源代码的程序依赖图。
程序依赖图常被用于表征源代码的代码特征,进而结合子图匹配算法用于代码克隆检测。以待测程序的程序依赖图作为目标图,以若干个代码片段的程序依赖图作为查询图,进行子图匹配,能够应用于检测待测程序中是否对某些代码片段进行了克隆。
S102:利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
具体地,对于每一个查询图,均有一个查询起始节点,通过局部敏感哈希算法可以在目标图中快速查找到所有与查询图的查询起始节点相同或相似的节点,并将这些节点确定为目标起始节点。由此,获得与所有查询起始节点相同或相似的节点,即目标起始节点,并确定出这些目标起始节点在目标图中的位置。对于每一对匹配的目标起始节点和查询起始节点,将它们确定为一个起始节点克隆对。确定目标图中的目标起始节点的位置及起始节点克隆对是进行后续子图匹配的前提和基础。其中,查询图的查询起始节点可以根据实际的需求确定,本公开对此不作具体限制。例如,可以将代码片段中感兴趣的代码语句所在的节点作为查询起始节点。
其中,局部敏感哈希算法(Locality-Sensitive Hashing, LSH)是一种针对海量高维数据的快速最近邻查找算法。LSH的基本思想在于:在原空间中很近(相似)的两个点,经过LSH哈希函数的映射后,有很大概率它们的哈希是一样的;而两个离的很远(不相似)的两个点,映射后,它们的哈希值相等的概率很小。
据统计,在对一个代码量约为两千行左右的源文件进行解析后,得到的程序依赖图包含了约4万个节点、16万条边。如果采用循环遍历逐个匹配节点相似度或者传统哈希两两匹配的方式,计算复杂度都将会相当高。而采用LSH算法则可以大大加快节点匹配的速度。
进一步地,参照图2,利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,可以包括以下步骤:
S1021:将所述目标图中的节点通过预设的局部敏感哈希函数映射到多个哈希桶内;
具体地,目标图中有一定相似度的节点经过预设的局部敏感哈希函数的映射变换后,在新的数据空间中仍然相似的概率很大,经过局部哈希变换后会落到同一个哈希桶中;目标图中不相似的节点经过预设的局部敏感哈希函数的映射变换后,在新的数据空间中仍然不相似的概率很大,经过局部哈希变换后会落到不同的哈希桶中。这样,经过局部哈希变换后,就将目标图包含的大量节点分散到了多个哈希桶内,每个桶内包含了一些节点数据。
预设的局部敏感哈希函数是指预先选定的一个或多个哈希函数,例如simhash函数、minhash函数等,本公开对此不作限制。
S1022:获取所有所述查询图的查询起始节点,并分别对所述查询起始节点通过所述预设的局部敏感哈希函数计算待查询桶号;
具体地,获取所有的查询图的查询起始节点,对这些节点数据也采用与步骤S1021中相同的预设的局部敏感哈希函数进行映射变换,从而获取每一查询起始节点相应的哈希桶号,即待查询桶号。
S1023:计算所述查询起始节点与所述待查询桶号对应的所述哈希桶内的所述目标图中的节点之间的距离;
具体地,获取每一查询起始节点对应的待查询桶号对应的哈希桶内的所有目标图节点,计算该查询起始节点与这些目标图节点之间的距离。常用的距离计算方法有欧式距离、Jaccard距离、海明距离、余弦距离、曼哈顿距离等,本公开对此不作限制。
S1024:将距离小于预设阈值的所述目标图中的节点标记为目标起始节点。
具体地,通过计算节点间的距离可以确定节点间的相似度,将与查询起始节点之间的距离小于预设阈值的目标图中的节点确定为与查询起始节点匹配的节点,标记为目标起始节点。预设阈值用于评价节点间的相似度,当目标图中的某一节点与查询起始节点之间的距离小于预设阈值时,则认为该节点与查询起始节点匹配。
利用局部敏感哈希算法,能够将目标图中的海量节点分散到不同哈希桶内,并对所有查询图的查询起始节点实施相同的局部敏感哈希变换获得对应的待查询桶号,从而只需要将查询起始节点与其待查询桶号对应的哈希桶内的目标图节点进行相似度匹配,达到大大减少节点匹配次数,快速在目标图中定位目标起始节点的效果。
S103:基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
具体地,步骤S103基于步骤S102确定的起始节点克隆对,并行地执行切片子图匹配,从起始节点克隆对开始查找目标图与查询图中匹配的其余节点。其中,切片子图匹配是指对目标图和查询图分别从目标起始节点和查询起始节点开始,基于预设的切片规则进行切片,查找其余匹配的节点,从而确定目标图与查询图中是否存在同构的子图。
进一步地,参照图3,基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,可以包括以下步骤:
S1031:为每一个所述起始节点克隆对创建一个执行切片子图匹配的子任务;
具体地,每一个起始节点克隆对,包含一个查询起始节点和目标起始节点,一个查询起始节点对应着一个查询图,因此,对于每一个起始节点克隆对,每一个查询起始节点对应的查询图都要和目标图进行一次切片子图匹配,本公开将对每一个起始节点克隆对创建一个执行切片子图匹配的子任务。若有m个起始节点克隆对,则创建m个子任务。
S1032:将所述起始节点克隆对中的查询起始节点所在的查询图和所述目标图下发至所述子任务;
具体地,对每一个子任务,分别下发一个起始节点克隆对中的查询起始节点所在的查询图和标记有该起始节点克隆对中的目标起始节点的目标图。也就是说,若有m个起始节点克隆对,对应着m个子任务,则将m个起始节点克隆对中的查询起始节点对应的m个查询图一一分配给m个子任务。
在一种可选的实施方式中,将目标图复制成m个副本,也一一发送给m个子任务,每个副本标记了该子任务对应的起始节点克隆对中的目标起始节点。在这一种实施方式中,多个子任务间处理的数据是相互独立、隔离的。
在另一种可选的实施方式中,仅将目标起始节点的信息一一发送给m个子任务,m个子任务在执行时共享目标图数据。
本领域技术人员可根据实际情况选择子任务间数据分发的形式,本公开对此不作限制。
S1033:并行地执行所有所述子任务。
具体地,采用单机或者分布式***并行执行所有的子任务。采用单机时,可以通过多个虚拟机、多个容器、多个处理器或者一个处理器中的多个内核来实现并行计算;采用分布式***时,可以将子任务分配至集群中的不同节点来实现并行计算。本公开对实现并行计算的具体方式不作限制。
在一种可选的实施方式中,为每一个子任务创建一个单独的线程,多线程并行执行子任务。
在另一种可选的实施方式中,采用分布式***执行所述多个子任务。
在步骤S102快速在目标图中定位目标起始节点之后,步骤S103通过对所有起始节点克隆对创建切片子图匹配的子任务,并向各子任务下发用于子图匹配的查询图和目标图,进而并行执行子图匹配,大大提高了在目标图中查询同构子图的效率。
进一步地,参照图4,所述同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点,包括以下步骤:
S1041:分别将所述目标起始节点和所述查询起始节点作为所述目标图和所述查询起始节点所在的查询图的切片点;
具体地,程序切片是一种程序分解技术,其目的是为了从程序代码中提取出需要的或者感兴趣的部分。其中,切片点就是程序切片的起点。本公开的实施例将目标起始节点作为对目标图切片的切片点,将查询起始节点作为对查询图切片的切片点。
S1042:从所述切片点开始,基于相同切片规则同时对所述目标图和所述查询图执行切片,逐步获取与所述目标起始节点和所述查询起始节点存在控制或数据依赖关系的其余节点;
具体地,从切片点开始,基于相同的切片规则对目标图和查询图同步实施切片操作,通过切片逐步分别获取目标图中和查询图中与目标起始节点和查询起始节点存在控制或数据依赖关系的其余节点。其中,切片规则包括切片方向、切片方法等,切片方向包括前向、后向,切片方法包括静态切片、动态切片,本公开对切片规则不作具体限制。由于目标图和查询图均为包含一系列节点和边的程序依赖图,节点间通过控制或数据依赖边连接起来,因此,从切片点开始对目标图和查询图进行切片可以逐步获取到与切片点存在控制或数据依赖关系的其余节点。
S1043:对所述其余节点进行相似度比较,从中确定匹配的节点对,直到切片结束。
具体地,将从目标图中切片获取到的节点和从查询图中切片获取到的节点逐个进行相似度比较,查找是否存在匹配的节点对。
可选地,相似度比较的方法是基于预先存储的节点哈希值。步骤S1043所述的相似度比较与步骤S1042所述的切片操作可以同步进行。
在一种可选的实施方式中,图5为一个目标图和两个查询图的示意图,其中,(a)为目标图,包含若干个节点和若干条边,(b)和(c)为两个查询图,也包含若干个节点和若干条边。假设将标号为3的节点作为(b)和(c)的查询起始节点,同时,匹配到目标图(a)中也存在一个相同节点3,确定为目标起始节点。对图5所示的目标图和查询图执行步骤S1041-S1042,包括:
将目标图(a)中的节点3作为目标图(a)的切片点,将查询图(b)中的节点3作为查询图(b)的切片点。分别从节点3开始对目标图(a)和查询图(b)进行后向静态切片。在目标图(a)中,沿着指向节点3的控制依赖边获得了节点2、4、8;在查询图(b)中,沿着指向节点3的控制依赖边获得了节点2、4,其中,目标图(a)和查询图(b)中的节点2、4匹配。继续,在目标图(a)中,沿着指向节点2的控制依赖边获得了节点1;在查询图(b)中,沿着指向节点2的控制依赖边获得了节点1,目标图(a)和查询图(b)中的节点1匹配。至此,对查询图(b)的切片结束,在目标图(a)中匹配到了与查询图(b)同构的子图。
通过将同时进行程序切片和相似度比较相结合,能够实现提取出目标图与查询图之间相似的节点和相应的边,从而实现子图匹配。
进一步地,在步骤S102利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点之前,还包括以下步骤:
S1011:获取所述目标图的节点集合和所述若干个查询图的所有节点集合;
S1012:对所述目标图的节点集合和所述若干个查询图的所有节点集合计算交集;
S1013:基于所述交集,去除所述目标图和所述若干个查询图中不存在于所述交集中的节点。
具体地,由于只有交集中的节点才可能构成目标图与查询图的同构子图,不存在交集中的节点就可以从目标图和查询图中去除,以避免后续对这些无关节点进行匹配。
通过对目标图的所有节点集合和所有查询图的所有节点集合求交集,并基于交集结果对目标图和查询图的节点进行过滤,排除掉不可能构成同构子图的节点,由此能够达到降低计算负荷、缩短计算时间的效果。
本公开实施例一提供了一种快速查询同构子图的方法,通过局部敏感哈希算法在目标图中快速定位与查询图的查询起始节点匹配的目标起始节点,并基于起始节点克隆对并行执行切片子图匹配,不仅能够以节点为粒度进行精确的同构子图查询,还能够大大减少节点间匹配的次数,提高子图查询的速度。
实施例二:
基于同一发明构思,本公开实施例二提供了一种快速查询同构子图的装置,该快速查询同构子图的装置的具体实施可参见上述方法实施例一的相关描述,重复之处不再赘述,如图6所示,该快速查询同构子图的装置600主要包括:
图获取单元610,用于获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
起始节点克隆对确定单元620,用于利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
切片子图匹配单元630,用于基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
实施例三:
参照图7,本公开的实施例还提出了一种电子设备700,该电子设备700包括至少一个处理器710;以及,与所述至少一个处理器710通信连接的存储器720;其中,所述存储器720存储有可被所述至少一个处理器710执行的指令,所述指令被所述至少一个处理器710执行,以使所述至少一个处理器710能够执行本公开的实施例一所述的快速查询同构子图的方法。
上述电子设备700中的上述元件可通过总线彼此连接,总线例如数据总线、地址总线、控制总线、扩展总线和局部总线之一或其任意组合。
实施例四:
本公开的实施例还提出了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本公开的实施例一所述的快速查询同构子图的方法。
本领域内的技术人员应当明白,本公开的实施例可提供为方法、***、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开的实施例的方法、装置、设备和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (8)

1.一种快速查询同构子图的方法,其特征在于,包括以下步骤:
获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
2.如权利要求1所述的快速查询同构子图的方法,其特征在于,所述利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,包括以下步骤:
将所述目标图中的节点通过预设的局部敏感哈希函数映射到多个哈希桶内;
获取所有所述查询图的查询起始节点,并分别对所述查询起始节点通过所述预设的局部敏感哈希函数计算待查询桶号;
计算所述查询起始节点与所述待查询桶号对应的所述哈希桶内的所述目标图中的节点之间的距离;
将距离小于预设阈值的所述目标图中的节点标记为目标起始节点。
3.如权利要求1所述的快速查询同构子图的方法,其特征在于,所述基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,包括以下步骤:
为每一个所述起始节点克隆对创建一个执行切片子图匹配的子任务;
将所述起始节点克隆对中的查询起始节点所在的查询图和所述目标图下发至所述子任务;
并行地执行所有所述子任务。
4.如权利要求1所述的快速查询同构子图的方法,其特征在于,所述同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点,包括以下步骤:
分别将所述目标起始节点和所述查询起始节点作为所述目标图和所述查询起始节点所在的查询图的切片点;
从所述切片点开始,基于相同切片规则同时对所述目标图和所述查询图执行切片,逐步获取与所述目标起始节点和所述查询起始节点存在控制或数据依赖关系的其余节点;
对所述其余节点进行相似度比较,从中确定匹配的节点对,直到切片结束。
5.如权利要求1-4所述的快速查询同构子图的方法,其特征在于,所述利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点之前,还包括以下步骤:
获取所述目标图的节点集合和所述若干个查询图的所有节点集合;
对所述目标图的节点集合和所述若干个查询图的所有节点集合计算交集;
基于所述交集,去除所述目标图和所述若干个查询图中不存在于所述交集中的节点。
6.一种快速查询同构子图的装置,其特征在于,包括:
图获取单元,用于获取一个目标图和若干个查询图,所述目标图为待测程序的程序依赖图,所述若干个查询图为若干个代码片段的程序依赖图;
起始节点克隆对确定单元,用于利用局部敏感哈希算法在所述目标图中定位出所有与所述查询图的查询起始节点匹配的目标起始节点,将一对匹配的所述查询起始节点和所述目标起始节点确定为一个起始节点克隆对;
切片子图匹配单元,用于基于所有所述起始节点克隆对对所述目标图和所述查询图并行地执行切片子图匹配,其中,对于任一所述起始节点克隆对,所述切片子图匹配包括:
同时从所述目标起始节点和所述查询起始节点开始对所述目标图和所述查询起始节点所在的查询图进行切片,寻找所述目标图与所述查询起始节点所在的查询图中匹配的其余节点;
将所述目标图与所述查询起始节点所在的查询图中所有匹配的节点及相应的边构成的子图确定为同构子图。
7.一种电子设备,其特征在于,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-5任一项所述的快速查询同构子图的方法。
8.一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-5任一项所述的快速查询同构子图的方法。
CN202211592933.5A 2022-12-13 2022-12-13 快速查询同构子图的方法、装置、电子设备及存储介质 Pending CN115587116A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211592933.5A CN115587116A (zh) 2022-12-13 2022-12-13 快速查询同构子图的方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211592933.5A CN115587116A (zh) 2022-12-13 2022-12-13 快速查询同构子图的方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN115587116A true CN115587116A (zh) 2023-01-10

Family

ID=84783394

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211592933.5A Pending CN115587116A (zh) 2022-12-13 2022-12-13 快速查询同构子图的方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115587116A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104391908A (zh) * 2014-11-17 2015-03-04 南京邮电大学 一种图上基于局部敏感哈希的多关键字索引方法
CN107943516A (zh) * 2017-12-06 2018-04-20 南京邮电大学 基于llvm的克隆代码检测方法
CN114168804A (zh) * 2021-12-17 2022-03-11 中国科学院自动化研究所 一种基于异质子图神经网络的相似信息检索方法和***
WO2022247868A1 (zh) * 2021-05-27 2022-12-01 华为技术有限公司 一种多子图匹配方法、装置及设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104391908A (zh) * 2014-11-17 2015-03-04 南京邮电大学 一种图上基于局部敏感哈希的多关键字索引方法
CN107943516A (zh) * 2017-12-06 2018-04-20 南京邮电大学 基于llvm的克隆代码检测方法
WO2022247868A1 (zh) * 2021-05-27 2022-12-01 华为技术有限公司 一种多子图匹配方法、装置及设备
CN114168804A (zh) * 2021-12-17 2022-03-11 中国科学院自动化研究所 一种基于异质子图神经网络的相似信息检索方法和***

Similar Documents

Publication Publication Date Title
Wang et al. Performance prediction for apache spark platform
Liao et al. Gunther: Search-based auto-tuning of mapreduce
JP5995409B2 (ja) コンピュータ解析のためにテキスト文書を表現するためのグラフィカル・モデル
US10613785B1 (en) Scalable binning for big data deduplication
WO2018054221A1 (en) Pipeline dependent tree query optimizer and scheduler
US9922133B2 (en) Live topological query
US11288266B2 (en) Candidate projection enumeration based query response generation
US8938443B2 (en) Runtime optimization of spatiotemporal events processing
US20170091073A1 (en) Detection of antipatterns through statistical analysis
US9424032B2 (en) List vector processing apparatus, list vector processing method, storage medium, compiler, and information processing apparatus
JP2021502658A5 (zh)
CN106648839B (zh) 数据处理的方法和装置
US8392393B2 (en) Graph searching
CN109165201B (zh) 日志的归并方法及终端设备
US20240095241A1 (en) Data search method and apparatus, and device
CN114048816A (zh) 一种图神经网络数据采样方法、装置、设备及存储介质
EP2728490A1 (en) Application execution method in computing
Gupta et al. Map-based graph analysis on MapReduce
CN115587116A (zh) 快速查询同构子图的方法、装置、电子设备及存储介质
CN115586920B (zh) 脆弱代码片段克隆检测方法、装置、电子设备及存储介质
CN111143456B (zh) 基于Spark的Cassandra数据导入方法、装置、设备及介质
WO2017088547A1 (zh) 一种数据升级方法和装置
US20160098411A1 (en) Querying input data
Li et al. Fast approximate attribute reduction with MapReduce
CN110309139B (zh) 高维近邻对搜索方法和***

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20230110