一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

确定图数据中结点构成三角形结构个数的方法及系统与流程

2021-12-04 01:58:00 来源:中国专利 TAG:


1.本技术涉及互联网技术领域,特别涉及一种确定图数据中结点构成三角形结构个数的方法及系统。


背景技术:

2.随着互联网技术以及大数据的发展,图数据(图)被广泛的应用在各个领域中。其中,图为一种数据结构,可以包括结点和边,根据应用场景不同,结点中可以存储不同对象的数据,边可以表示不同对象之间的关系。例如,图数据可以用于存储社交软件中各账户的数据,如不同结点可以存储对应账户的属性信息(如性别、年龄等),连接结点之间的边可以表示两个账户之间为好友关系,且边还可以具有方向,用于表示好友的添加关系等。
3.在图数据中,如果对于三个结点,任意两个结点之间都存在一个边,则可以确定这个三个结点组成了一个三角形的结构。其中,图数据中包括所有三角形的个数可以反应该图数据中的各结点之间的紧密程度。例如在存储社交软件中各账户信息的图数据中,通过如果三个结点组成了一个三角形的结构,则可说明这三个结点对应的账户互为好友,或者一个账户为其他两个账户的共同好友。如此,当该图数据中的结点组成的三角形的结构越多时,说明各个账户之间的关系越紧密。因此,通常会对图数据中结点组成的三角形的结构的个数进行计算,用于执行不同的下游任务。例如,计算社交关系图中其中一个子图中结点组成的三角形的结构的个数,确定该子图中的用户是否存在同一个社交关系中,例如可能互为同学、同事等,进而可以对子图中的各用户推荐广告、内容等。
4.在相关技术中,一般是通过对边进行遍历以计算三角形的个数,即对于每条边连接的两个结点,确定该两个结点是否存在公共邻居结点,其存在公共邻居结点的个数,即为该边连接的两个结点与其他结点组成三角形结构的个数。但是图数据中的每个三角形结构都具有三个边,这样就会导致同一个三角形会被重复计算三遍,如此导致确定图数据中结点构成三角形结构个数的效率较低。


技术实现要素:

5.本技术实施例提供了一种确定图数据中结点构成三角形结构个数的方法及系统,能够提高在图数据中确定结点构成三角形结构个数的效率。所述技术方案如下:
6.第一方面,提供了一种确定图数据中结点构成三角形结构个数的方法,所述方法包括:
7.基于图数据中各结点之间的各边,确定所述各结点对应第一邻居结点的数目,基于所述各结点对应第一邻居结点的数目,为所述各结点分配编号,其中,所述第一邻居结点的数目越多的结点对应的编号越小;
8.基于所述图数据中每个边连接两个结点对应编号的大小,确定所述每个边的第一方向;
9.对于任一结点,确定所述任一结点所连接边的第一方向指向的其他结点,将所述
其他结点确定为所述任一结点的第二邻居结点;
10.对于所述图数据中的任一边连接的两个结点,确定所述两个结点是否都存在对应的第二邻居结点,如果所述两个结点都存在对应的第二邻居结点,则将所述两个结点确定为任务结点对;
11.确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将所述每个任务结点对应的目标数目之和,确定为所述图数据中由结点组成的三角形结构的个数。
12.可选的,所述确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目之前,所述方法还包括:
13.基于所述各结点对应的第二邻居结点的个数,将所述各结点分为第一类结点和第二类结点,其中,所述第一类结点对应的第二邻居结点的个数大于所述第二类结点对应的第二邻居结点的个数。
14.可选的,所述确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,包括:
15.将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对;
16.确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目;
17.所述将所述每个任务结点对应的目标数目之和,确定为所述图数据中由结点组成的三角形结构的个数,包括:
18.将所述第一数目、所述第二数目、以及所述第三数目的和,确定为所述图数据中由结点组成的三角形结构的个数。
19.可选的,其特征在于,所述方法还包括:
20.确定所述第一类结点对应的邻接表信息,所述邻接表信息中包括二进制数组,其中,所述二进制数组由所述各第一类结点对应的二进制子数组按照所述第一类结点对应的编号顺序拼接得到,在任一第一类结点对应的二进制子数组中,若第n位的数值为1,则表示编号为n的结点为所述任一第一类结点的第二邻居结点,若第n位的数值为0,则表示编号为n的结点不是所述任一第一类结点的第二邻居结点,其中,n为大于等于0的整数。
21.可选的,其特征在于,所述方法还包括:
22.对于所述二进制数组中任一第一类结点对应的二进制子数组,将所述二进制子数组按照预设的划分个数,划分为多个数组块,并确定每个数组块的顺序标识;去除元素全为0的数组块,将剩余的数组块组成所述任一第一类结点对应的压缩后的二进制子数组;
23.将压缩后的二进制子数组对应的数组块的顺序标识组成数组块指示数组,将压缩后的二进制子数组组成压缩后的二进制数组。
24.可选的,所述确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目,包括:
25.对于每个第一类任务结点对,获取所述第一类任务结点对中两个结点分别对应的数组块指示数组,若所述数组块指示数组中包括相同的目标顺序标识,则分别在所述第一
类任务结点对中两个结点对应的二进制子数组中,获取所述目标顺序标识对应的第一数组块和第二数组块,对所述第一数组块和所述第二数组块进行按位与操作,得到所述第一类任务结点对中两个结点具有相同第二邻居结点的数目;将所述每个第一类任务结点对中两个结点具有相同第二邻居结点的数目求和,得到所述第一数目。
26.可选的,确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目,包括:
27.对于每个第二类任务结点对,获取所述第二类任务结点对中第一类结点对应的目标数组块指示数组,并获取所述第二类任务结点对中第二类结点的各第二邻居对应的目标编号;
28.对于每个目标编号,基于所述目标编号以及所述划分个数,将所述目标编号转换为对应数组块的第一顺序标识;若所述目标数组块指示数组存在所述第一顺序标识,确定目标编号对应的结点为第二类任务结点对中两个结点对应的相同第二邻居结点;
29.将所述每个第二类任务结点对应的相同第二邻居结点的个数确定为所述第二数值。
30.可选的,所述确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目,包括:
31.基于第一计算模块,执行所述确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目的处理;基于第二计算模块,执行所述确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目的处理,基于第三计算模块,执行所述确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目的处理;
32.分别检测所述第一计算模块、所述第二计算模块以及所述第三计算模块的任务处理情况,当存在任一计算模块完成对应的处理时,则控制所述任一计算模块执行所述其他计算模块对应的处理。
33.可选的,所述图数据为存储用户信息的图数据,所述图数据中的结点为对应用户的属性信息,所述边用于表示所述边连接的两个结点对应的用户互为好友;
34.所述确定为所述图数据中由结点组成的三角形结构的个数之后,所述方法还包括:
35.将所述图数据中由结点组成的三角形结构的个数,输入到聚集系数分析模型,得到所述图数据各结点对应的用户之间的关系紧密程度。
36.第二方面,提供了一种确定图数据中结点构成三角形结构个数的系统,所述系统包括cpu和fpga,其中:
37.所述cpu,用于基于图数据中各结点之间的各边,确定所述各结点对应第一邻居结点的数目,基于所述各结点对应第一邻居结点的数目,为所述各结点分配编号,其中,所述第一邻居结点的数目越多的结点对应的编号越小;基于所述图数据中每个边连接两个结点对应编号的大小,确定所述每个边的第一方向;对于任一结点,确定所述任一结点所连接边的第一方向指向的其他结点,将所述其他结点确定为所述任一结点的第二邻居结点;对于所述图数据中的任一边连接的两个结点,确定所述两个结点是否都存在对应的第二邻居结点,如果所述两个结点都存在对应的第二邻居结点,则将所述两个结点确定为任务结点对;
38.所述fpga,用于确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将所述每个任务结点对应的目标数目之和,确定为所述图数据中由结点组成的三角形结构的个数。
39.可选的,所述cpu,用于:
40.基于所述各结点对应的第二邻居结点的个数,将所述各结点分为第一类结点和第二类结点,其中,所述第一类结点对应的第二邻居结点的个数大于所述第二类结点对应的第二邻居结点的个数。
41.可选的,其特征在于,
42.所述cpu,用于:将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对;
43.所述fpga,用于:确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目,将所述第一数目、所述第二数目、以及所述第三数目的和,确定为所述图数据中由结点组成的三角形结构的个数。
44.可选的,所述cpu,用于:
45.确定所述第一类结点对应的邻接表信息,所述邻接表信息中包括二进制数组,其中,所述二进制数组由所述各第一类结点对应的二进制子数组按照所述第一类结点对应的编号顺序拼接得到,在任一第一类结点对应的二进制子数组中,若第n位的数值为1,则表示编号为n的结点为所述任一第一类结点的第二邻居结点,若第n位的数值为0,则表示编号为n的结点不是所述任一第一类结点的第二邻居结点,其中,n为大于等于0的整数。
46.可选的,所述cpu,用于:
47.对于所述二进制数组中任一第一类结点对应的二进制子数组,将所述二进制子数组按照预设的划分个数,划分为多个数组块,并确定每个数组块的顺序标识;去除元素全为0的数组块,将剩余的数组块组成所述任一第一类结点对应的压缩后的二进制子数组;
48.将压缩后的二进制子数组对应的数组块的顺序标识组成数组块指示数组,将压缩后的二进制子数组组成压缩后的二进制数组。
49.可选的,所述fpga,用于:
50.对于每个第一类任务结点对,获取所述第一类任务结点对中两个结点分别对应的数组块指示数组,若所述数组块指示数组中包括相同的目标顺序标识,则分别在所述第一类任务结点对中两个结点对应的二进制子数组中,获取所述目标顺序标识对应的第一数组块和第二数组块,对所述第一数组块和所述第二数组块进行按位与操作,得到所述第一类任务结点对中两个结点具有相同第二邻居结点的数目;将所述每个第一类任务结点对中两个结点具有相同第二邻居结点的数目求和,得到所述第一数目。
51.可选的,所述fpga,用于:
52.对于每个第二类任务结点对,获取所述第二类任务结点对中第一类结点对应的目标数组块指示数组,并获取所述第二类任务结点对中第二类结点的各第二邻居对应的目标编号;
53.对于每个目标编号,基于所述目标编号以及所述划分个数,将所述目标编号转换为对应数组块的第一顺序标识;若所述目标数组块指示数组存在所述第一顺序标识,确定目标编号对应的结点为第二类任务结点对中两个结点对应的相同第二邻居结点;
54.将所述每个第二类任务结点对应的相同第二邻居结点的个数确定为所述第二数值。
55.可选的,所述fpga包括第一计算单元、第二计算单元、第三计算单元;
56.所述第一计算单元,用于执行所述确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目的处理;
57.所述第二计算单元,用于执行所述确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目的处理;
58.所述第三计算单元,用于所述确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目的处理;
59.所述cpu,用于:分别检测所述第一计算单元、所述第二计算单元以及所述第三计算单元的任务处理情况,当存在任一计算单元完成对应的处理时,则控制所述任一计算单元执行所述其他计算单元对应的处理。
60.可选的,所述图数据为存储用户信息的图数据,所述图数据中的结点为对应用户的属性信息,所述边用于表示所述边连接的两个结点对应的用户互为好友;
61.所述cpu,还用于:将所述图数据中由结点组成的三角形结构的个数,输入到聚集系数分析模型,得到所述图数据各结点对应的用户之间的关系紧密程度。
62.第三方面,提供了一种确定图数据中结点构成三角形结构个数的装置,所述装置包括:
63.第一确定模块,用于基于图数据中各结点之间的各边,确定所述各结点对应第一邻居结点的数目,基于所述各结点对应第一邻居结点的数目,为所述各结点分配编号,其中,所述第一邻居结点的数目越多的结点对应的编号越小;
64.第二确定模块,用于基于所述图数据中每个边连接两个结点对应编号的大小,确定所述每个边的第一方向;
65.第三确定模块,用于对于任一结点,确定所述任一结点所连接边的第一方向指向的其他结点,将所述其他结点确定为所述任一结点的第二邻居结点;
66.第四确定模块,用于对于所述图数据中的任一边连接的两个结点,确定所述两个结点是否都存在对应的第二邻居结点,如果所述两个结点都存在对应的第二邻居结点,则将所述两个结点确定为任务结点对;
67.第五确定模块,用于确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将所述每个任务结点对应的目标数目之和,确定为所述图数据中由结点组成的三角形结构的个数。
68.可选的,所述装置还包括划分模块,用于:
69.基于所述各结点对应的第二邻居结点的个数,将所述各结点分为第一类结点和第二类结点,其中,所述第一类结点对应的第二邻居结点的个数大于所述第二类结点对应的第二邻居结点的个数。
70.可选的,所述第五确定模块,用于:
71.将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对;
72.确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目;
73.将所述第一数目、所述第二数目、以及所述第三数目的和,确定为所述图数据中由结点组成的三角形结构的个数。
74.可选的,所述装置还包括第六确定模块,用于:
75.确定所述第一类结点对应的邻接表信息,所述邻接表信息中包括二进制数组,其中,所述二进制数组由所述各第一类结点对应的二进制子数组按照所述第一类结点对应的编号顺序拼接得到,在任一第一类结点对应的二进制子数组中,若第n位的数值为1,则表示编号为n的结点为所述任一第一类结点的第二邻居结点,若第n位的数值为0,则表示编号为n的结点不是所述任一第一类结点的第二邻居结点,其中,n为大于等于0的整数。
76.可选的,所述第六确定模块,还用于:
77.对于所述二进制数组中任一第一类结点对应的二进制子数组,将所述二进制子数组按照预设的划分个数,划分为多个数组块,并确定每个数组块的顺序标识;去除元素全为0的数组块,将剩余的数组块组成所述任一第一类结点对应的压缩后的二进制子数组;
78.将压缩后的二进制子数组对应的数组块的顺序标识组成数组块指示数组,将压缩后的二进制子数组组成压缩后的二进制数组。
79.可选的,所述第五确定模块,用于:
80.对于每个第一类任务结点对,获取所述第一类任务结点对中两个结点分别对应的数组块指示数组,若所述数组块指示数组中包括相同的目标顺序标识,则分别在所述第一类任务结点对中两个结点对应的二进制子数组中,获取所述目标顺序标识对应的第一数组块和第二数组块,对所述第一数组块和所述第二数组块进行按位与操作,得到所述第一类任务结点对中两个结点具有相同第二邻居结点的数目;将所述每个第一类任务结点对中两个结点具有相同第二邻居结点的数目求和,得到所述第一数目;
81.可选的,所述第五确定模块,用于:
82.对于每个第二类任务结点对,获取所述第二类任务结点对中第一类结点对应的目标数组块指示数组,并获取所述第二类任务结点对中第二类结点的各第二邻居对应的目标编号;
83.对于每个目标编号,基于所述目标编号以及所述划分个数,将所述目标编号转换为对应数组块的第一顺序标识;若所述目标数组块指示数组存在所述第一顺序标识,确定目标编号对应的结点为第二类任务结点对中两个结点对应的相同第二邻居结点;
84.将所述每个第二类任务结点对应的相同第二邻居结点的个数确定为所述第二数值。
85.可选的,所述第五确定模块,用于:
86.基于第一计算模块,执行所述确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目的处理;基于第二计算模块,执行所述确定各第二类任务结点对中
两个结点对应的相同第二邻居结点的第二数目的处理,基于第三计算模块,执行所述确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目的处理;
87.分别检测所述第一计算模块、所述第二计算模块以及所述第三计算模块的任务处理情况,当存在任一计算模块完成对应的处理时,则控制所述任一计算模块执行所述其他计算模块对应的处理。
88.可选的,所述图数据为存储用户信息的图数据,所述图数据中的结点为对应用户的属性信息,所述边用于表示所述边连接的两个结点对应的用户互为好友;
89.所述装置还包括分析模块,用于:将所述图数据中由结点组成的三角形结构的个数,输入到聚集系数分析模型,得到所述图数据各结点对应的用户之间的关系紧密程度。
90.第四方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如第一方面所述的确定图数据中结点构成三角形结构个数的方法所执行的操作。
91.第五方面,一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如第一方面所述的确定图数据中结点构成三角形结构个数的方法所执行的操作。
92.本技术实施例提供的技术方案带来的有益效果是:
93.本技术实施例,根据结点的第一邻居结点的数目,对每个邻居结点进行编号,并根据编号的大小对每条边分配对应的第一方向,根据第一方向确定每个结点对应的第二邻居结点,并可以根据每个边连接结点对应的第二邻居结点对边进行滤除,(即只保留连接的两个结点都存在第二邻居结点的边),如此可以在确定图数据中结点构成三角形结构个数时,由于边数量的减少,可以提高确定图数据中结点构成三角形结构个数的效率。另外,根据分配结点编号的大小确定边的第一方向,并根据边的第一方向确定结点对应的第二邻居结点,这样对于组成一个三角形结构的三个边,只有一个边连接的两个结点具有相同的第二邻居结点,如此也不会对三角形结构的三个边重复计算三遍,能进一步提高确定图数据中结点构成三角形结构个数的效率。
附图说明
94.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
95.图1是本技术实施例提供的一种实施环境的示意图;
96.图2是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示意图;
97.图3是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法流程图;
98.图4是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示意图;
99.图5是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示
意图;
100.图6是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示意图;
101.图7是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法流程图;
102.图8是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的装置结构示意图;
103.图9是本技术实施例提供的一种计算机设备结构示意图。
具体实施方式
104.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
105.图1是本技术实施例提供的一种实施环境的示意图。参见图1,本技术提供的确定图数据中结点构成三角形结构个数的方法。该方法可以通过计算机设备实现,该计算机设备可以是终端或服务器等。在该计算机设备中可以具备cpu(central processing unit,中央处理器)、fpga(field programmable gate array,现场可编程门阵列)等处理模块、以及机械硬盘、ssd(solid state disk,固态硬盘)等存储模块。其中,在存储模块中可以存储有执行本技术提供的确定图数据中结点形成的三角形结构个数的方法对应的程序指令(如程序代码)以及对应的执行数据(如图数据)等。处理模块执行存储模块中的程序指令,对存储模块中的执行数据进行处理,进而实现本技术提供的确定图数据中结点形成的三角形结构个数的方法。
106.在本技术中,图数据是指具有图结构的存储数据,如图2所示,在图中包括多个结点,任意两个结点之间可以通过连接边来表示两个结点之间的关系。例如,图数据可以是社交应用程序的后台服务器存储的社交关系图,在社交关系图中的每个结点中可以存储用户的属性信息,例如性别、年龄、喜好等。结点之间的边可以表示连接的两个结点的对应用户的好友关系、关注关系等。如果对于三个结点,任意两个结点之间都存在一个边,则可以确定这个三个结点组成了一个三角形结构,如图2中的结点a、结点b、结点c组成的三角形abc。如果在社交关系图中的一个子图中,包括的三角形结构的个数较多时,则该子图中的用户可能存在同一个社交关系中,例如可能互为同学、同事等。因此,可以通过对社交关系图中各个结点形成的三角形结构进行计数,进而确定社交关系图中各个结点对应的用户之间的紧密程度。
107.图3是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示意图,参见图3,该方法包括:
108.步骤301、基于图数据中各结点之间的各边,确定各结点对应第一邻居结点的数目,基于各结点对应第一邻居结点的数目,为各结点分配编号。
109.其中,第一邻居结点的数目越大的结点对应的编号越小。在本技术实施例中,图数据可以是社交应用程序的后台服务器中存储的社交网络图,即图数据中的结点中可以存储用户的属性信息,例如性别、年龄、喜好等。结点之间的边,可以表示两个结点分别对应的用户之间的好友关系。
110.在实施中,可以根据图数据(后续可称为图)中各结点之间的边,确定每个结点对应的邻居结点(第一邻居结点)。其中,当图为无向图时,对于任一结点,该结点的第一邻居结点可以为该结点通过边直接连接的结点;当图为有向图时,对于任一结点,该结点的第一邻居结点可以为该结点通过出边指向的结点。
111.在确定每个结点对应的第一邻居结点的数目后,可以根据每个结点对应的第一邻居结点的数目,对每个结点进行编号。对于第一邻居结点的数目越大的结点对应的编号越小,例如,第一邻居结点的数目最多的结点的编号为0,第一邻居结点的数目次多的结点的编号为1,以此类推可以确定每个结点对应的编号。其中,对于具有相同数目个第一邻居结点的结点,对应的编号可以随机排列。
112.步骤302、基于图数据中每个边连接两个结点对应编号的大小,确定每个边的第一方向。
113.在对图中的每个结点分配对应的编号后,可以根据每个结点编号的大小,为每个边重新分配方向(第一方向)。对于原来存在边的两个结点,对应边的第一方向可以由编号较小的结点指向编号较大的结点。
114.步骤303、对于任一结点,确定任一结点所连接边的第一方向指向的其他结点,将其他结点确定为任一结点的第二邻居结点。
115.在对图中的结点进行编号,并对每个边分配第一方向后,可以根据每个边的第一方向确定每个结点对应的第二邻居结点。即对于任一结点,可以将该结点所连接边的第一方向指向的结点确定为该结点的第二邻居结点。
116.步骤304、对于图数据中的任一边连接的两个结点,确定两个结点是否都存在对应的第二邻居结点,如果两个结点都存在对应的第二邻居结点,则将两个结点确定为任务结点对。
117.在本技术中,在确定图数据中结点构成三角形结构个数(后续可称为确定图中三角形的个数)之前,可以根据边连接的两个结点,对边进行滤除处理。其中,对于任一条边,可以通过该边连接的两个结点的编号表示。例如对于连接编号为2和3两个结点的边,可通过(2,3)进行表示。
118.对于边的滤除处理如下:可以确定任一边连接的两个结点,并确定该两个结点是否都存在第二邻居结点,如果存在一个结点没有对应的第二邻居结点,则可以将该边滤除。这是因为一个边连接的两个结点中,其中一个结点不存在对应的第二邻居结点,那该结点肯定也不会与另一个结点存在相同的邻居结点,也就是该结点与另一个结点不会和其他的结点通过边构成三角形的结构。反之,如果该两个结点都存在第二邻居结点,可说明这两个结点可能存在相同的第二邻居结点,可能与其他的结点通过边构成三角形的结构。因此,可以将任一边连接的两个结点都存在对应的第二邻居结点,则可以对对应的边进行保留,可以通过记录这两个结点对应的编号,以表示保留的边,其中,记录的两个结点对应的编号即为任务结点对。
119.如图4所示,图4为编号为0、1、2、3、4组成的图,由图可知,结点0(编号为0的结点)的第二邻居结点为结点1和结点2,结点1的第二邻居结点为结点2和结点3,结点2的第二邻居结点为结点4,而结点3、4没有第二邻居结点。因此可以将边(1,3)、边(2,4)滤除,保留边(0,1)、边(0,2)和边(1,2),也就是将编号为结点0、1,结点0、2和结点1、2,确定为任务结点
对。
120.由于预先对边进行了滤除处理,所以在后续根据边确定图中包括三角形的个数时,可以减少一部分的计算量,能够提高确定图中包括三角形的个数的效率。
121.步骤305、确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将每个任务结点对应的目标数目之和,确定为图数据中由结点组成的三角形结构的个数。
122.在对图数据中的边进行滤除处理之后,可以对保留的边(各个任务结点对)进行遍历,确定每个任务结点对中两个结点对应的公共的第二邻居结点个数(目标数目),将每个任务结点对的目标数目求和,即可得到图数据中由结点组成的三角形结构的个数。
123.由于在本技术中,每个结点的邻居结点都是对应的边的第一方向指向的结点,也就是每个结点的邻居结点的编号都是小于该邻居结点的编号的。这样,对于图中的任一个三角形结构来说,可为图5所示的结构。其中,结点a和结点b的编号小于结点c的编号。这样,对于三角形abc来说,只能通过边ab确定该三角形。即通过确定结点a和结点b的公共结点c来确定该三角形。而对于边bc,结点a不属于结点b、c的公共结点;对于边ac,由于结点b不属于结点a、c的公共结点,因此无法通过边bc和边ac来确定该三角形。如此,在本技术中也不会存在对同一个三角形进行重复计数的问题。
124.在一种可实现的方式中,在执行上述步骤305之前,可以对各任务结点进行分类,对于不同类别的各任务结点,可以通过不同的处理方式确定对应的目标数目,相应的处理如下:
125.步骤3051、基于各结点对应的第二邻居结点的个数,将各结点分为第一类结点和第二类结点,其中,第一类结点对应的第二邻居结点的个数大于第二类结点对应的第二邻居结点的个数。
126.在实施中,可以根据各结点对应的第二邻居结点的个数,对每个结点所属的类别进行分类。其中,在本技术中可以将结点所属的类别分为两类,即将对应第二邻居结点个数较多的结点分为一类(在本技术中称为第一类结点或重量级结点),将对应第二邻居结点个数较少的结点分为一类(在本技术中称为第二类结点或轻量级结点)。例如技术人员可以预先设置将两个结点类别进行区分的第二邻居结点个数阈值,根据设置的阈值,以及每个结点对应的第二邻居结点的个数,将各结点划分为第一类结点和第二类结点。
127.或者,可以将结点按照编号大小,从小到大进行遍历,依次将遍历到的结点标记为第一类结点,当已标记的第一类结点的第二邻居结点的个数之和,大于或等于图数据中总边数的ρ倍时,则停止遍历,剩余未遍历到的结点即为第二类结点。其中0<ρ<1,ρ是一个经验性的参数,例如可以设置为0.5。
128.步骤3052、确定第一类结点对应的邻接表信息和第二类结点对应的邻接表信息。
129.为了便于区分,在本技术中可以将第一类结点对应的邻接表信息称为第一邻接表信息,将第二类结点对应的邻接表信息称为第二邻接表信息。
130.在确定第一邻接表信息和第二邻接表信息之前,可以先通过csr(compressed sparse row,列稀疏压缩存储)结构对图进行表示。如图6所示图数据,图6的csr结构由边列表和偏移量列表组成,其中,边列表为每个结点按照编号从小到大的顺序,依次将各结点对应第二邻居结点的编号拼接而成,偏移量列表用于表示每个结点的第一个第二邻居结点在边列表中的位置。对应图6中的图数据,边列表l1=123423434,偏移量列表为l2=047899。
131.在本技术中,第一邻接表信息和第二邻接表信息可以是在图对应的csr结构基础上得到的。对于第一邻接表信息的确定过程如下:
132.其中,第一邻接表信息中包括二进制数组和数组块指示数组。
133.二进制数组由各第一类结点对应的二进制子数组按照第一类结点对应的编号顺序拼接得到,在任一第一类结点对应的二进制子数组中,若第n位的数值为1,则表示编号为n的结点为任一第一类结点的第二邻居结点,若第n位的数值为0,则表示编号为n的结点不是任一第一类结点的第二邻居结点,其中,n为大于等于0的整数。
134.在实施中,对于任一个第一类结点对应的二进制子数组,可以确定该第一类结点的第二邻居结点的编号,然后将二进制子数组中对应编号的位置的元素的值置为1,将其他位置的元素的值置为0。这样就可以通过一个二进制子数组,表示该第一类结点的第二邻居结点。例如图6中的图数据中的结点0、结点1为第一类结点,则结点0对应的二进制子数组为01111000,结点1对应的二进制子数组为00111000。然后可以将每个第一类结点对应的二进制子数组按照第一类结点的编号从小到大的顺序进行拼接得到第一邻接表信息中包括二进制数组,即图6中的图数据中的第一类结点对应的二进制数组为0111100000111000。
135.由于在实际应用中,图中结点的个数可能会很多,例如可能存在上万、或上亿个。因此,可以对每个二进制子数组进行压缩处理,如下:对于二进制数组中任一第一类结点对应的二进制子数组,将二进制子数组按照预设的划分个数,划分为多个数组块,并确定每个数组块的顺序标识;去除元素全为0的数组块,将剩余的数组块组成任一第一类结点对应的压缩后的二进制子数组。将压缩后的二进制子数组对应的数组块的顺序标识组成数组块指示数组,将压缩后的二进制子数组组成压缩后的二进制数组。也就是在,第一邻接表信息中可以包括压缩后的二进制数组和数组块指示数组。
136.在实施中,可以按照预设的划分个数将二进制子数组划分为多个数组块。可以去除元素全为0的数组块,例如划分个数为4,则可以将二进制子数组0001001100000001划分为0001、0011、0000、0001四个数组块,为每个数组块分配一个顺序标识,即0001对应的顺序标识为0、0011对应的顺序标识为1、0000对应的顺序标识为2、0001对应的顺序标识为3。这样在去除元素全为0的数组块,得到为000100110001。对应的数组块指示数组为013。
137.另外,还可以按照每个第一类的结点的编号从小到的顺序,可以将数组块组成顺序标识列表,并基于顺序标识列表生成顺序标识偏移量列表。在顺序标识偏移量列表中,可以每个第m个元素的值,用于表示编号为m的第一类结点对应的数组块中的第一个顺序标识,在顺序标识列表中的位置。在第一邻接表信息中,还可以包括顺序标识列表和顺序标识偏移量列表。
138.对于第二邻接表信息的确定过程如下:
139.第二邻接表信息包括对第二类结点对应的编号进行映射处理后,由第二类结点确定的偏移量列表和边列表。对第二类结点对应的编号进行映射处理。即可以每个第二类结点的编号减去l,使得第二类结点的编号从0开始。例如将图6中的第二类结点2、3、4的编号都减去2,得到的第二类结点的编号从2、3、4映射为0、1、2。然后再根据映射之后的第二类结点的编号,确定第二类结点组成的csr结构中的偏移量列表和边列表。如图6中的第二类结点2、3、4,对应的边列表l3=34,偏移量列表为l4=0122。
140.步骤3053、将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括
第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对。
141.在本技术中,可以预先根据结点所属的类型对任务结点对(后续可称为边任务)的类别进行划分,通过不同的处理方法,计算不同类别的任务结点对与其他结点形成三角形结构的个数。其中,可以将任务结点对分为,只包括第一类结点的第一类任务结点对(第一类边任务),包括第一类结点和第二类结点的第二类任务结点对(第二类边任务)以及只包括第二类结点的任务结点对的第三类任务结点(第三类边任务)对。由于第一类结点的邻居结点的个数较多,第二类结点的邻居结点的个数较少,这样将边按照连接结点所属的类型,进行分类,基于不同的方法,确定不同边与其他结点组成三角型的个数,可以提高确定图中三角形个数的效率。
142.步骤3054、确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目。
143.在确定不同类别的任务结点对后,可以通过不同的处理方法,计算不同类别的任务结点对与其他结点形成三角形结构的个数,如下:
144.1)确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目,包括:
145.对于每个第一类任务结点对,获取第一类任务结点对中两个结点分别对应的数组块指示数组,若数组块指示数组中包括相同的目标顺序标识,则分别在第一类任务结点对中两个结点对应的二进制子数组中,获取目标顺序标识对应的第一数组块和第二数组块,对第一数组块和第二数组块进行按位与操作,得到第一类任务结点对中两个结点具有相同第二邻居结点的数目;将每个第一类任务结点对中两个结点具有相同第二邻居结点的数目求和,得到第一数目。
146.在实施中,由于第一类任务结点对中包括两个第一类结点,所以根据两个第一类结点分别对应的编号,以及第一邻接表信息中的顺序标识列表和顺序标识偏移量列表,分别确定两个第一类结点对应的数组块指示数组。如果在两个数组块指示数组中存在有相同的目标顺序标识,则可以根据目标顺序标识获取属于第一类任务结点对中第一数据块和第二数据块。第一数据块和第二数据块对应第一类任务结点对中不同的结点。然后对第一数组块和第二数组块进行按位与操作,并确定按位与操作后,得到结果中“1”的个数。将每个目标顺序标识对应的1的个数进行求和,得到第一类任务结点对中两个结点具有相同第二邻居结点的数目。然后再将每个第一类任务结点对中两个结点具有相同第二邻居结点的数目求和,得到第一数目。
147.其中,对于确定两个第一类结点分别对应的数组块指示数组中相同的目标顺序标识,可以通过维护两个指针,依次对指针指向的两个第一类结点分别对应的数组块指示数组中的顺序标号进行比较进行确定,如下:
148.1.维护两个指针,在迭代开始之前,两个指针分别指向两个数组块指示数组的第一个元素。
149.2.开始迭代,判断两个指针指向的列表元素中编号部分的大小关系,若两个顺序标号相等,则执行步骤3,否则,执行步骤4。
150.3.若顺序标号相等,这说明有可能存在0~k个公共元素(k为数组块指示数组中元素的个数),对两个顺序标号对应的数组块执行按位与操作,随后统计结果中各位为1的个数,三角形计数相应增加。
151.4.若编号不相等,则指向较小顺序标号的指针下移一个位置,当至少一个指针指向对应数组块指示数组的末尾时,迭代结束。
152.2)确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目,包括:
153.对于每个第二类任务结点对,获取第二类任务结点对中第一类结点对应的目标数组块指示数组,并获取第二类任务结点对中第二类结点的各第二邻居对应的目标编号;对于每个目标编号,基于目标编号以及划分个数,将目标编号转换为对应数组块的第一顺序标识;若目标数组块指示数组存在第一顺序标识,确定目标编号对应的结点为第二类任务结点对中两个结点对应的相同第二邻居结点;将每个第二类任务结点对应的相同第二邻居结点的个数确定为第二数值。
154.在实施中,第二类任务结点中包括第一类结点和第二类结点。对于第二类结点,可以根据第二邻接表信息,获取第二类结点对应的第二邻居的编号。例如,第二类结点的编号,在第二邻接表信息中的偏移量列表中,确定第二类结点的第二邻居结点在边列表中的第一起始位置,以及第二类结点在编号上对应的下一个第二类结点的第二邻居结点在边列表中的第二起始位置,根据第一起始位置和第二起始位置,可以确定第二类结点的第二邻居结点的编号。然后根据之前记录的l值,将第二邻居结点的编号再次映射回原来根据第二邻居结点分配的编号。再根据编号的值,将该编号转换为顺序标识。也就是将编号除以l,并向下取整,得到将目标编号转换为对应数组块的第一顺序标识。
155.然后根据第一类结点的编号,在第一邻接表信息获取第一类结点对应的数组块指示数组。如果数组块指示数组中存在对应的第一顺序标识,则确定第一类结点和第二类任点对应有一个相同的第二邻居结点。如此可以依次确定第二类结点的每个第二邻居结点,在否在第一类结点对应的第二邻居结点中可以找到相同的第二邻居结点,进而可以确定每个第二类任务结点对中两个结点具有相同第二邻居结点的个数,并将对应的个数之和确定为第二数值。
156.其中,确定第一类任务结点对应的数组块指示数组中是否存在对应的第一顺序标识的处理如下:
157.1.遍历第二类结点的第二邻居结点中的每一个编号,分别将每个编号确定为目标值,循环执行下述步骤2~5。
158.2.维护两个记录数组块指示数组中元素位置的寄存器,记为左下标与右下标,分别初始化为数组块指示数组中元素的第一个位置及最后一个位置。
159.3.计算两个寄存器的平均值并取整,记为中下标,比较在第一类结点的第二邻居列表中位置为中下标的值与目标值的大小关系,若大小相等,则转步骤4,否则,转步骤5
160.4.若大小相等,说明找到了一个公共元素,三角形计数器加一,跳出循环,将当前目标值对应的下个编号确定为目标值,并转至执行步骤2的处理。
161.5.若中下标的值比目标值的编号大,则将右下标赋值为中下标减一,否则,将左下标赋值为中下标加一,重复步骤3。
162.3)其中,确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目,的处理如下:
163.获取第三类任务结点对中两个结点分别对应的第二邻居结点的编号,确定两个结点分别对应的第二邻居结点的编号中,包括相同的第二邻居结点的编号的个数。将每个三类任务结点对对应的包括相同的第二邻居结点的编号的个数求和,得到各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目。
164.在实施中,第三类任务结点中包括两个第二类结点,可以根据第二邻接表信息,获取第二类结点对应的第二邻居的编号。例如,第二类结点的编号,在第二邻接表信息中的偏移量列表中,确定第二类结点的第二邻居结点在边列表中的第一起始位置,以第二类结点在编号上对应的下一个第二类结点的第二邻居结点在边列表中的第二起始位置,根据第一起始位置和第二起始位置,可以确定第二类任务结点对中,两个第二类结点的第二邻居结点的编号。进而确定两个结点分别对应的第二邻居结点的编号中,包括相同的第二邻居结点的编号的个数。然后将每个第三类任务结点对应相同的第二邻居结点的编号的个数进行求和,得到第三数目。
165.其中,确定两个结点分别对应的第二邻居结点的编号中,包括相同的第二邻居结点的编号的个数的处理可以如下:
166.1.维护两个指针,在迭代开始之前,两个指针分别指向两个邻居列表的第一个元素,其中两个邻居列表分别为两个第二类结点对应的第二邻居结点对应的编号组成的邻居列表。
167.2.开始迭代,判断两个指针指向的邻居列表元素的大小关系:若两个元素相等,说明找到了一个公共元素,三角形计数加一,两个指针均指向列表中的下一个元素;若两个元素不相等,则修改指向较小的元素的指针指向下一个元素,另一个指针不变。
168.3.重复上述步骤2,直到其中至少一个指针已经指向邻居列表的末尾,此时已经无法再找到新的公共元素,计算结束。
169.步骤3055、将第一数目、第二数目、以及第三数目的和,确定为图数据中由结点组成的三角形结构的个数。
170.在实施中,当确定第一类边任务对应的第一数目、第二类边任务对应的第二数目、第三类边任务对应的第三数目之后,可以将第一数目、第二数目、以及第三数目的和,确定为图数据中由结点组成的三角形结构的个数。
171.另外,在本技术中,还提供了一种任务动态调度的方法,其中,可以将第一类边任务、第二类边任务、第三类边任务通过不同的计算模块处理。该计算模块可以是虚拟的计算模块,例如不同的处理进程。也可以是实体的处理单元,如fpga中不同的计算单元。
172.其中,执行确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目的处理,可由第一计算模块执行;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目的处理,可由第二计算模块执行;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目的处理,可由第二计算模块执行。在第一计算模块、第二计算模块、第三计算模块执行相应处理的过程中,可以分别检测在图数据中确定结点构成三角形结构个数的效率。第一计算模块、第二计算模块以及第三计算模块的任务处理情况,当存在任一计算模块完成对应的处理时,则控制在图数据中确定结点构成三角形
结构个数的效率。任一计算模块执行在图数据中确定结点构成三角形结构个数的效率。其他计算模块对应的处理。进而实现不同计算模块处理任务的动态调度,进而提高确定图数据中结点构成三角形结构个数的效率。
173.在本技术中,图数据为存储用户信息的图数据,如社交应用程序的后台服务器中存储的社交网络图,图数据中的结点为对应用户的属性信息,,例如性别、年龄、喜好等。边用于表示边连接的两个结点对应的用户互为好友。在确定社交网络图中的三角形结构的个数之后,还可以将将图数据中由结点组成的三角形结构的个数,输入到聚集系数分析模型,得到图数据各结点对应的用户之间的关系紧密程度。
174.在实施中,在社交媒体中,通常使用图数据的方式表示用户与用户之间的相关关系,此类图数据通常称为社交网络图。在此类图数据中,结点通常代表用户,图中的边通常代表用户之间的各类关系,例如好友关系、关注关系、拉黑关系等等。通过挖掘社交网络图中的一些性质,能够帮助上层诸如广告、内容推荐等应用进行优化。例如可以确定社交网络图中三角形的个数,进而计算出社交网络图中结点的聚集系数,从而判断某个结点的邻居结点结合的紧密程度,邻居结点结合得越紧密,邻居结点与该结点越可能构成一个社群,那么这些用户的兴趣和关注点就越有可能相似,从而能够更加准确地进行推荐。
175.其中,应用于社交媒体的社群发现与推荐的具体实施步骤可以如下所示:
176.对于变化不频繁的社交网络图,可以先离线地将整张社交网络图的三角形个数计算完毕,存储在内存或硬盘中,当需要计算整个社交网络图中某个子图的聚集系数时,直接读取预先计算好的数据即可。对于变化较为频繁的社交网络图,可以采取计算局部聚集系数的方法,每次以一个社交网络图的子图作为输入,计算其中的边涉及的三角形个数。
177.聚集系数有局部聚集系数与全局聚集系数两种,局部聚集系数的计算方式如下为:其中r
u
为经过给定结点及其邻居结点的三角形个数,k
u
表示给定结点的度数。而全局聚集系数的计算可以用局部聚集系数的归一化求和得到。
178.根据聚集系数,判断社群的稳定性与联系紧密程度,以指导上层的推荐系统等具体应用。若输入的社交网络图具有较高的聚集系数,则说明该社交网络图中的结点所代表的用户有更大的可能处于一个紧密的社群中。例如,这些用户可能是同班同学、同一个部门的同事、亲密好友等等。处在紧密的社群中的用户群体通常具有较高的共同倾向、共同爱好与共同关注,因此,在为社群中的用户呈现广告与推荐内容的时候,利用同一社群内的其他用户的信息可以帮助上层的广告与内容分发推荐系统提取更多更准确的特征。
179.本技术实施例,根据结点的第一邻居结点的数目,对每个邻居结点进行编号,并根据编号的大小对每条边分配对应的第一方向,根据第一方向确定每个结点对应的第二邻居结点,并可以根据每个边连接结点对应的第二邻居结点对边进行滤除,(即只保留连接的两个结点都存在第二邻居结点的边),如此可以在确定图数据中结点构成三角形结构个数时,由于边数量的减少,可以提高确定图数据中结点构成三角形结构个数的效率。另外,根据分配结点编号的大小确定边的第一方向,并根据边的第一方向确定结点对应的第二邻居结点,这样对于组成一个三角形结构的三个边,只有一个边连接的两个结点具有相同的第二邻居结点,如此也不会对三角形结构的三个边重复计算三遍,能进一步提高确定图数据中结点构成三角形结构个数的效率。
180.图7是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的方法示意图,该方法流程图应用于cpu与fpga组成的系统中。该系统中cpu和一个或多个fpga建立连接。cpu和fpga可分别负责下述不同步骤的处理。参见图7,具体处理过程如下:
181.步骤701、cpu基于图数据中各结点之间的各边,确定各结点对应第一邻居结点的数目,基于各结点对应第一邻居结点的数目,为各结点分配编号。
182.步骤702、cpu基于图数据中每个边连接两个结点对应编号的大小,确定每个边的第一方向。
183.步骤703、cpu对于任一结点,确定任一结点所连接边的第一方向指向的其他结点,将其他结点确定为任一结点的第二邻居结点。
184.步骤704、cpu对于图数据中的任一边连接的两个结点,确定两个结点是否都存在对应的第二邻居结点,如果两个结点都存在对应的第二邻居结点,则将两个结点确定为任务结点对。
185.在本技术实施例中,步骤701

704的处理与上述实施例中步骤301

302的处理相同,其具体过程不再赘述。其中,步骤701

704的处理可称为数据预处理,即通过cpu对图数据进行处理,得到fpga待处理的每个边任务(每个任务结点对),然后可以将每个图数据以及每个任务结点对发送至fpga进行处理。由fpga确定与每个任务结点对组成三角形的结点的个数。
186.步骤705、fpga确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将每个任务结点对应的目标数目之和,确定为图数据中由结点组成的三角形结构的个数。
187.另外,本技术还提供了一种对于调度任务的方法,用于fpga执行上述步骤705,具体方法如下:
188.步骤7051、cpu对边任务进行分类,并基于fpga的数量和/或fpga中计算模块的数量,确定每个fpga和/或fpga中计算模块执行的边任务的类别。
189.在本技术中,可以边任务分为三类,将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对。其中,具体分类方法可参见上述实施例中的步骤3051

3053,在本技术实施例中,可以将第一类任务结点对称为第一类边任务、将第一类任务结点对称为第二类边任务、将第三类任务结点对称为第三类任务。
190.如果cpu连接有多个fpga,则可以根据fpga的个数确定每个fpga执行边任务的类型。例如,cpu连接有3个fpga,则可以确定每个fpga执行一种边任务的类型。或者,当cpu仅连接有一个fpga时,则可以就fpga中计算模块的个数,确定每个计算模块执行的边任务的类型。例如,fpga中包括9个计算模块,则可以确定fpga中每三个fpga执行同一类型的边任务。
191.在本技术中,以cpu连接有一个fpga为例,对fpga执行不同类型的边任务进行说明,其他情况与之类似,不再赘述。其中,cpu在确定每个fpga中的计算单元对应边任务的类型后。可以针对每个计算单元生成对应的任务表,用于维护fpga中每个计算单元执行边任务的情况,在任务表中,包括对应计算单元需要执行的边任务(即任务结点对)。并且,cpu可
以将第一类结点对应的第一邻接表信息与第二类结点对应的第二邻接表信息,发送至fpga的共享存储区域,该共享存储区域可由多个计算单元共同访问。并且可以每个计算单元对应的任务表发送至对应的计算单元。
192.步骤7052、fpga中的第一计算单元,用于执行确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目的处理;第二计算单元,用于执行确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目的处理;第三计算单元,用于确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目的处理。
193.其中,在fpga中用于执行第一类边任务的可称为第一计算单元,用于执行第二类边任务的可称为第二计算单元,用于执行第三类边任务的可称为第三计算单元。
194.在实施中,第一计算单元可以根据对应任务表中记录的第一类任务结点对,从fpga共享内存中存储的第一类任务对应的第一邻接表信息中,获取每个任务结点中两个第一类结点分别对应的数组块指示数组,以确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目,具体处理可参见步骤3054,此处不再赘述。
195.第二计算单元可以根据对应任务表中记录的第二类任务结点对,从fpga共享内存中存储的第一邻接表信息和第二邻接表信息中,获取每个第二类任务结点中第一类结点对应的数组块指示数组,以及第二类结点第二邻居结点的编号。以确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目,具体处理可参见步骤3054,此处不再赘述。
196.第三计算单元可以根据对应任务表中记录的第三类任务结点对,从fpga共享内存中存储的第二类结点对应的第二邻接表信息中,获取每个第三任务结点中两个第二类结点分别对应的编号,以确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第三数目,具体处理可参见步骤3054,此处不再赘述。
197.步骤7053、cpu分别检测第一计算单元、第二计算单元以及第三计算单元的任务处理情况,当存在任一计算单元完成对应的处理时,则控制任一计算单元执行其他计算单元对应的处理。
198.在实施中,cpu可以根据每个计算单元对应的任务表,向fpga中的计算单元发送对应的任务执行指令,任务执行指令中可以携带有任务结点对,fpga可以根据任务执行指令携带的任务结点对,执行对应的边任务,fpga中的每个计算单元在执行对应的边任务后,即确定与任务结点对形成三角形的结点个数后,可以向cpu发送对应的执行完成通知。cpu可以根据边任务列表,向对应的fpga计算单元发送下一个任务结点对。当cpu确定执行同一类别边任务的计算单元,执行对应类型所有的边任务时,可以从其他类型的边任务对应的任务表中获取任务结点对,并发送至计算单元进行执行。
199.另外,对于执行同一边任务类型的多个计算单元之间,也可以实现处理同一任务的多个计算单元之间的调度。
200.例如,对于执行同一边任务类型的多个计算单元,当cpu确定其中一个目标计算单元执行完其对应的任务表中的所有边任务时,则可以确定其他几个计算单元对应的任务表中,暂未执行的边任务的数量。然后可以将剩余边任务数量最多的任务表中,获取待执行的下个目标边任务,并将向目标计算单元发送对应目标边任务的执行指令,如此实现执行同一边任务类型的多个计算单元之间的任务动态调度。
201.这样,对于执行同一边任务类型的多个计算单元之间可实现任务的动态调度,可以提高多个计算单元执行同一边任务类型的效率,对于执行不同的边任务类型的计算单元之间也可以实现任务的动态调度,可以提高计算单元执行边任务类型的效率。
202.在本技术实施例中,图数据为存储用户信息的图数据,如社交应用程序的后台服务器中存储的社交网络图,图数据中的结点为对应用户的属性信息,,例如性别、年龄、喜好等。边用于表示边连接的两个结点对应的用户互为好友。在确定社交网络图中的三角形结构的个数之后,还可以将图数据中由结点组成的三角形结构的个数,输入到聚集系数分析模型,得到图数据各结点对应的用户之间的关系紧密程度。
203.在实施中,在社交媒体中,通常使用图数据的方式表示用户与用户之间的相关关系,此类图数据通常称为社交网络图。在此类图数据中,结点通常代表用户,图中的边通常代表用户之间的各类关系,例如好友关系、关注关系、拉黑关系等等。通过挖掘社交网络图中的一些性质,能够帮助上层诸如广告、内容推荐等应用进行优化。例如可以确定社交网络图中三角形的个数,进而计算出社交网络图中结点的聚集系数,从而判断某个结点的邻居结点结合的紧密程度,邻居结点结合得越紧密,邻居结点与该结点越可能构成一个社群,那么这些用户的兴趣和关注点就越有可能相似,从而能够更加准确地进行推荐。
204.其中,应用于社交媒体的社群发现与推荐的具体实施可以由cpu实现,具体步骤可以如下所示:
205.对于变化不频繁的社交网络图,可以先离线地将整张社交网络图的三角形个数计算完毕,存储在内存或硬盘中,当需要计算整个社交网络图中某个子图的聚集系数时,直接读取预先计算好的数据即可。对于变化较为频繁的社交网络图,可以采取计算局部聚集系数的方法,每次以一个社交网络图的子图作为输入,计算其中的边涉及的三角形个数。
206.聚集系数有局部聚集系数与全局聚集系数两种,局部聚集系数的计算方式如下:其中r
u
为经过给定结点及其邻居结点的三角形个数,k
u
表示定结点的度数。而全局聚集系数的计算可以用局部聚集系数的归一化求和得到。
207.根据聚集系数,判断社群的稳定性与联系紧密程度,以指导上层的推荐系统等具体应用。若输入的社交网络图具有较高的聚集系数,则说明该社交网络图中的结点所代表的用户有更大的可能处于一个紧密的社群中。例如,这些用户可能是同班同学、同一个部门的同事、亲密好友等等。处在紧密的社群中的用户群体通常具有较高的共同倾向、共同爱好与共同关注,因此,在为社群中的用户呈现广告与推荐内容的时候,利用同一社群内的其他用户的信息可以帮助上层的广告与内容分发推荐系统提取更多更准确的特征。
208.本技术实施例,根据结点的第一邻居结点的数目,对每个邻居结点进行编号,并根据编号的大小对每条边分配对应的第一方向,根据第一方向确定每个结点对应的第二邻居结点,并可以根据每个边连接结点对应的第二邻居结点对边进行滤除,(即只保留连接的两个结点都存在第二邻居结点的边),如此可以在确定图数据中结点构成三角形结构个数时,由于边数量的减少,可以提高确定图数据中结点构成三角形结构个数的效率。另外,根据分配结点编号的大小确定边的第一方向,并根据边的第一方向确定结点对应的第二邻居结点,这样对于组成一个三角形结构的三个边,只有一个边连接的两个结点具有相同的第二邻居结点,如此也不会对三角形结构的三个边重复计算三遍,能进一步提高确定图数据中
结点构成三角形结构个数的效率。
209.图8是本技术实施例提供的一种确定图数据中结点构成三角形结构个数的装置的示意图,该装置可以是上述实施例中的计算机设备,该装置包括:
210.第一确定模块810,用于基于图数据中各结点之间的各边,确定所述各结点对应第一邻居结点的数目,基于所述各结点对应第一邻居结点的数目,为所述各结点分配编号,其中,所述第一邻居结点的数目越多的结点对应的编号越小;
211.第二确定模块820,用于基于所述图数据中每个边连接两个结点对应编号的大小,确定所述每个边的第一方向;
212.第三确定模块830,用于对于任一结点,确定所述任一结点所连接边的第一方向指向的其他结点,将所述其他结点确定为所述任一结点的第二邻居结点;
213.第四确定模块840,用于对于所述图数据中的任一边连接的两个结点,确定所述两个结点是否都存在对应的第二邻居结点,如果所述两个结点都存在对应的第二邻居结点,则将所述两个结点确定为任务结点对;
214.第五确定模块850,用于确定各任务结点对中两个结点对应的相同第二邻居结点的目标数目,将所述每个任务结点对应的目标数目之和,确定为所述图数据中由结点组成的三角形结构的个数。
215.可选的,所述装置还包括划分模块,用于:
216.基于所述各结点对应的第二邻居结点的个数,将所述各结点分为第一类结点和第二类结点,其中,所述第一类结点对应的第二邻居结点的个数大于所述第二类结点对应的第二邻居结点的个数。
217.可选的,所述第五确定模块850,用于:
218.将只包括第一类结点的任务结点对,确定为第一类任务结点对;将包括第一类结点和第二类结点的任务结点对,确定为第二类任务结点对;将只包括第二类结点的任务结点对,确定为第三类任务结点对;
219.确定各第一类任务结点对中两个结点对应的相同第二邻居结点的第一数目;确定各第二类任务结点对中两个结点对应的相同第二邻居结点的第二数目;确定各第三类任务结点对中两个结点对应的相同第二邻居结点的第三数目;
220.将所述第一数目、所述第二数目、以及所述第三数目的和,确定为所述图数据中由结点组成的三角形结构的个数。
221.可选的,所述装置还包括第六确定模块,用于:
222.确定所述第一类结点对应的邻接表信息,所述邻接表信息中包括二进制数组,其中,所述二进制数组由所述各第一类结点对应的二进制子数组按照所述第一类结点对应的编号顺序拼接得到,在任一第一类结点对应的二进制子数组中,若第n位的数值为1,则表示编号为n的结点为所述任一第一类结点的第二邻居结点,若第n位的数值为0,则表示编号为n的结点不是所述任一第一类结点的第二邻居结点,其中,n为大于等于0的整数。
223.可选的,所述第六确定模块,还用于:
224.对于所述二进制数组中任一第一类结点对应的二进制子数组,将所述二进制子数组按照预设的划分个数,划分为多个数组块,并确定每个数组块的顺序标识;去除元素全为0的数组块,将剩余的数组块组成所述任一第一类结点对应的压缩后的二进制子数组;
layer iii,动态影像专家压缩标准音频层面3)、mp4(moving picture experts group audio layer iv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。计算机设备900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。当计算机设备900为服务器时,该服务器可以是单独一个服务器,也可以是由多个服务器组成的服务器组,不同的服务器可以负责上述实施例中不同的处理,具体可由技术人员根据实际场景进行设置。
239.通常,计算机设备900包括有:处理器901和存储器902。
240.处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用dsp(digital signal processing,数字信号处理)、fpga(field-programmable gate array,现场可编程门阵列)、pla(programmable logic array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以集成有gpu(graphics processing unit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括ai(artificial intelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
241.存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本技术中方法实施例提供的确定图数据中结点构成三角形结构个数的方法。
242.在一些实施例中,计算机设备900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、显示屏905、摄像头组件906、音频电路907、定位组件908和电源909中的至少一种。
243.外围设备接口903可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
244.射频电路904用于接收和发射rf(radio frequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wireless fidelity,无线保真)网络。在一些实施例中,射
频电路904还可以包括nfc(near field communication,近距离无线通信)有关的电路,本技术对此不加以限定。
245.显示屏905用于显示ui(user interface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置在计算机设备900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在计算机设备900的不同表面或呈折叠设计;在另一些实施例中,显示屏905可以是柔性显示屏,设置在计算机设备900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用lcd(liquid crystal display,液晶显示屏)、oled(organic light

emitting diode,有机发光二极管)等材质制备。
246.摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtual reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
247.音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。
248.定位组件908用于定位计算机设备900的当前地理位置,以实现导航或lbs(location based service,基于位置的服务)。定位组件908可以是基于美国的gps(global positioning system,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
249.电源909用于为计算机设备900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
250.在一些实施例中,计算机设备900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。
251.加速度传感器911可以检测以计算机设备900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。
252.陀螺仪传感器912可以检测计算机设备900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对计算机设备900的3d动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。
253.压力传感器913可以设置在计算机设备900的侧边框和/或显示屏905的下层。当压力传感器913设置在计算机设备900的侧边框时,可以检测用户对计算机设备900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在显示屏905的下层时,由处理器901根据用户对显示屏905的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
254.指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置在计算机设备900的正面、背面或侧面。当计算机设备900上设置有物理按键或厂商logo时,指纹传感器914可以与物理按键或厂商logo集成在一起。
255.光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制显示屏905的显示亮度。具体地,当环境光强度较高时,调高显示屏905的显示亮度;当环境光强度较低时,调低显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。
256.接近传感器916,也称距离传感器,通常设置在计算机设备900的前面板。接近传感器916用于采集用户与计算机设备900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与计算机设备900的正面之间的距离逐渐变小时,由处理器901控制显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与计算机设备900的正面之间的距离逐渐变大时,由处理器901控制显示屏905从息屏状态切换为亮屏状态。
257.本领域技术人员可以理解,图9中示出的结构并不构成对计算机设备900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
258.在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述实施例中确定图数据中结点构成三角形结构个数的方法。该计算机可读存储介质可以是非暂态的。例如,所述计算机可读存储介质可以是rom(read

only memory,只读存储器)、ram(random access memory,随机存取存储器)、cd

rom、磁带、软盘和光数据存储设备等。
259.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件
来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
260.以上所述仅为本技术的较佳实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献