发明内容
本发明实施例提供了一种多跳邻居节点的获取方法和装置,用于提升在大图中查询多跳邻居节点的计算效率。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种多跳邻居节点的获取方法,包括:
获取拓扑网络中每个节点的0跳邻居,得到全节点0跳邻居集合,所述全节点0跳邻居集合包括:每个起始节点和对应的目的节点构成的节点对,其中,所述起始节点指的是所述拓扑网络中的任意一个节点,所述目的节点指的是在所述拓扑网络中与所述起始节点存在连边关系的节点;
当第一节点作为指定节点时,通过如下的迭代计算过程计算所述第一节点的k+1跳邻居集合,所述k为大于等于0且小于预置的跳数阈值kmax的自然数,所述迭代计算过程包括如下的步骤a和步骤b,其中,
步骤a、获取所述第一节点的k跳邻居集合,所述第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对;
步骤b、将所述第一节点的k跳邻居集合中k跳目的节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合,其中,所述两个节点对分别来自所述第一节点的k跳邻居集合、所述全节点0跳邻居集合;
在计算出所述第一节点的k+1跳邻居集合之后,当所述第一节点的k+1跳邻居集合中的跳数k+1等于所述kmax时,将所述第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。
结合第一方面,在第一方面的第一种可能的实现方式中,所述方法还包括:
当所述第一节点的k+1跳邻居集合中的跳数k+1小于所述kmax时,按照所述步骤a和步骤b的迭代计算方式计算所述第一节点的k+2跳邻居集合;
在计算出所述第一节点的k+2跳邻居集合之后,当所述第一节点的k+2跳邻居集合中的跳数k+2等于所述kmax时,将所述第一节点的k+2跳邻居集合以及对应的k+1跳路径输出。
结合第一方面,在第一方面的第二种可能的实现方式中,所述步骤a执行之后,所述迭代计算过程还包括:步骤a+1,其中,
步骤a+1,对所述第一节点的k跳邻居集合中的节点对进行反转,得到所述第一节点的反转指定节点k跳邻居集合,所述第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对,所述反转后的k跳起始节点为所述第一节点的k跳邻居集合中的k跳目的节点,所述反转后的k跳目的节点为所述第一节点的k跳邻居集合中的k跳起始节点;
所述步骤b,具体为:步骤b’,其中,
步骤b’、将所述第一节点的反转指定节点k跳邻居集合中反转后的k跳起始节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
结合第一方面,在第一方面的第三种可能的实现方式中,所述步骤b,包括:步骤b”和步骤b”’,其中,
步骤b”、从所述全节点0跳邻居集合中筛选出所有起始节点与所述第一节点的k跳邻居集合中k跳目的节点相同的节点对,筛选节点对完成之后得到所述第一节点的筛选指定节点k跳邻居集合;
步骤b”’、将所述第一节点的k跳邻居集合中k跳目的节点,和所述第一节点的筛选指定节点k跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述步骤b,还包括:步骤b””,其中,
步骤b””、判断所述k+1是否等于1,或判断所述第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件;
若所述k+1等于1,则执行步骤b”和步骤b”’;
若所述第一节点的k跳邻居集合中包括的节点对个数满足所述节点对条件,则执行步骤b”和步骤b”’。
结合第一方面,在第一方面的第五种可能的实现方式中,若所述第一节点存在至少两个的指定节点k+1跳邻居集合时,所述迭代计算过程是并行的计算所述第一节点的各个指定节点k+1跳邻居集合。
第二方面,本发明实施例还提供一种多跳邻居节点的获取装置,包括:获取模块、迭代计算模块和输出模块,其中,
所述获取模块,用于获取拓扑网络中每个节点的0跳邻居,得到全节点0跳邻居集合,所述全节点0跳邻居集合包括:每个起始节点和对应的目的节点构成的节点对,其中,所述起始节点指的是所述拓扑网络中的任意一个节点,所述目的节点指的是在所述拓扑网络中与所述起始节点存在连边关系的节点;
所述迭代计算模块,用于当第一节点作为指定节点时,通过如下的迭代计算过程计算所述第一节点的k+1跳邻居集合,所述k为大于等于0且小于预置的跳数阈值kmax的自然数,所述迭代计算过程包括如下的步骤a和步骤b,其中,
步骤a、获取所述第一节点的k跳邻居集合,所述第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对;
步骤b、将所述第一节点的k跳邻居集合中k跳目的节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合,其中,所述两个节点对分别来自所述第一节点的k跳邻居集合、所述全节点0跳邻居集合;
所述输出模块,用于在计算出所述第一节点的k+1跳邻居集合之后,当所述第一节点的k+1跳邻居集合中的跳数k+1等于所述kmax时,将所述第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。
结合第二方面,在第二方面的第一种可能的实现方式中,所述迭代计算模块,还用于当所述第一节点的k+1跳邻居集合中的跳数k+1小于所述kmax时,按照所述步骤a和步骤b的迭代计算方式计算所述第一节点的k+2跳邻居集合;
所述输出模块,还用于在计算出所述第一节点的k+2跳邻居集合之后,当所述第一节点的k+2跳邻居集合中的跳数k+2等于所述kmax时,将所述第一节点的k+2跳邻居集合以及对应的k+1跳路径输出。
结合第二方面,在第二方面的第二种可能的实现方式中,所述迭代计算模块,还用于所述步骤a执行之后,执行所述迭代计算过程还包括的步骤a+1,其中,
步骤a+1,对所述第一节点的k跳邻居集合中的节点对进行反转,得到所述第一节点的反转指定节点k跳邻居集合,所述第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对,所述反转后的k跳起始节点为所述第一节点的k跳邻居集合中的k跳目的节点,所述反转后的k跳目的节点为所述第一节点的k跳邻居集合中的k跳起始节点;
所述迭代计算模块,具体用于执行步骤b’,其中,
步骤b’、将所述第一节点的反转指定节点k跳邻居集合中反转后的k跳起始节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
结合第二方面,在第二方面的第三种可能的实现方式中,所述迭代计算模块,具体用于执行步骤b”和步骤b”’,其中,
步骤b”、从所述全节点0跳邻居集合中筛选出所有起始节点与所述第一节点的k跳邻居集合中k跳目的节点相同的节点对,筛选节点对完成之后得到所述第一节点的筛选指定节点k跳邻居集合;
步骤b”’、将所述第一节点的k跳邻居集合中k跳目的节点,和所述第一节点的筛选指定节点k跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述迭代计算模块,具体用于执行步骤b””,其中,
步骤b””、判断所述k+1是否等于1,或判断所述第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件;
若所述k+1等于1,则执行步骤b”和步骤b”’;
若所述第一节点的k跳邻居集合中包括的节点对个数满足所述节点对条件,则执行步骤b”和步骤b”’。
结合第二方面,在第二方面的第五种可能的实现方式中,若所述第一节点存在至少两个的指定节点k+1跳邻居集合时,所述迭代计算模块,具体用于并行的计算所述第一节点的各个指定节点k+1跳邻居集合。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,首先根据拓扑网络中所有节点之间的连边关系得到全节点0跳邻居集合,当第一节点作为指定节点时,从第一节点的k跳邻居集合通过本发明实施例中的迭代计算过程可以计算出第一节点的k+1跳邻居集合,由于全节点0跳邻居集合中记录有所有节点作为起始节点时对应的目的节点,步骤b中第一节点的k跳邻居集合和全节点0跳邻居集合中满足k跳目的节点和全节点0跳邻居集合中起始节点相同时的两个节点对连接为一个节点对,第一节点的k+1跳邻居集合相对于第一节点的k跳邻居集合增加了具有连边关系的节点,当跳数k+1等于预置的kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出,从第一节点的kmax跳邻居集合可以获取到第一节点的多跳邻居节点。本发明实施例中通过节点对之间的连接操作可以完成多跳邻居节点的计算,而不需要在拓扑网络中发送消息,从而可以提升在大图中查询多跳邻居节点的计算效率。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明多跳邻居节点的获取方法的一个实施例,可应用于大图中对指定节点的多跳邻居节点的确定中,请参阅图1所示,本发明一个实施例提供的多跳邻居节点的获取方法,可以包括如下步骤:
101、获取拓扑网络中每个节点的0跳邻居,得到全节点0跳邻居集合。
其中,全节点0跳邻居集合包括:每个起始节点和对应的目的节点构成的节点对,起始节点指的是拓扑网络中的任意一个节点,目的节点指的是在拓扑网络中与起始节点存在连边关系的节点。
在本发明实施例中,拓扑网络可以是包括很多的节点(本发明实施例中节点也可以称为顶点)和连边,该拓扑网络可以是一个大图,在大图中节点个数和节点之间的连边都很多,本发明实施例中提供的多跳邻居节点的获取方法中可以根据拓扑网络中的节点和节点之间的连边关系构造出节点对,例如,拓扑网络中的一个节点作为起始节点,与该起始节点之间存在连边关系的节点作为该起始节点对应的目的节点,一个起始节点和一个目的节点可以构成一个节点对,该节点对可以表示为(起始节点,对应的目的节点)。若一个起始节点存在多个目的节点,则该起始节点可以多个目的节点构成多个节点对,拓扑网络中的所有节点都作为起始节点时分别可以构造出该从该起始节点对应的节点对,当以所有的节点都作为起始节点构造出节点对之后,可以得到本发明实施例中所述的全节点0跳邻居集合,其中0跳指的是具有连接关系的起始节点和目的节点之间的跳数。举例说明如下,全节点0跳邻居集合中包括:节点对1和节点2,节点对1为(节点1,节点2),节点对2为(节点2,节点3),则节点1和节点2为0跳邻居,节点2和节点3为0跳邻居节点。
需要说明的是,在本发明实施例中,全节点0跳邻居集合中记录有所有节点作为起始节点时对应的目的节点,在后续实施例中每一轮的迭代计算中都需要从全节点0跳邻居集合中来获取存在连边关系的起始节点和目的节点。另外本发明实施例中,只需要从拓扑网络中提取到全节点0跳邻居集合即可,而不需要每次迭代过程中都在拓扑网络中发送消息,因此本发明实施例提供的方法可以适用于查询大图的多跳邻居节点,不会造成网络的阻塞。
102、当第一节点作为指定节点时,通过如下的迭代计算过程计算第一节点的k+1跳邻居集合,k为大于等于0且小于预置的跳数阈值kmax的自然数,迭代计算过程包括如下的步骤a和步骤b。其中,
步骤a、获取第一节点的k跳邻居集合,第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对;
步骤b、将第一节点的k跳邻居集合中k跳目的节点,和全节点0跳邻居集合中起始节点相同的两个节点对连接(英文名称:join)为一个节点对,完成节点对的连接后得到第一节点的k+1跳邻居集合,其中,两个节点对分别来自第一节点的k跳邻居集合、全节点0跳邻居集合。
在步骤102中用户可以指定拓扑网络中的任何一个节点进行多跳邻居节点的查询,本发明实施例中将用户从拓扑网络中选择的指定顶点定义为第一节点,步骤102和步骤103中以计算第一节点的多跳邻居节点进行说明,进一步的,在步骤102中可以包括步骤a和步骤b,具体以迭代计算过程中从第一节点的k跳邻居集合到第一节点的k+1跳邻居集合的迭代进行详细说明。其中,k可以指的是从0到kmax之间的任何一个值(k可以取0,1,2,…,kmax-1中的任何一个值),另外在每一轮的迭代计算过程中输入值均来自上一轮的迭代计算结果,即每一轮的迭代计算结果都可以作为下一轮的输入值。
需要说明的是,在初始的第一轮迭代计算中,k的取值为0,此时第一节点的0跳邻居集合指的是从全节点0跳邻居集合中筛选出的以第一节点为起始节点的所有节点对,即在全节点0跳邻居集合中选择出起始节点为第一节点的节点对,这些节点对构成了第一节点的0跳邻居集合。得到第一节点的0跳邻居集合之后,通过执行本发明实施例中描述的步骤a和步骤b可以得到第一节点的1跳邻居集合,然后以第一节点的1跳邻居集合作为输入值来继续执行步骤a和步骤b,则可以得到第一节点的2跳邻居集合,以此类型。需要说明的是,在每完成一轮的迭代计算之后,都需要判断是否满足跳数k+1等于kmax的条件,若满足该条件,则需要执行步骤103,否则更新k的取值继续执行步骤a和步骤b,接下来对本发明实施例中一轮的迭代计算过程进行详细说明。
在步骤a中,获取第一节点的k跳邻居集合,第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对。由前述描述可知,第一节点的k跳邻居集合可以通过上一轮的迭代计算结果来获取到,在第一节点的k跳邻居集合中记录有从0跳到k跳的所有邻居节点。其中,第一节点的k跳邻居集合中包括有k跳起始节点和k跳目的节点构成的节点对,该节点对中k跳起始节点表示的是在第k跳的迭代计算过程中具有连边关系的起始节点,该节点对中k跳目的节点表示的是在第k跳的迭代计算过程中需要继续扩展连边关系的节点。举例说明如下,全节点0跳邻居集合中包括:节点对1和节点2,节点对1为(节点1,节点2),节点对2为(节点2,节点3),则节点1和节点2为0跳邻居,节点2和节点3为0跳邻居节点。节点1和节点3之间为1跳邻居节点,并且节点1和节点3通过节点2成为1跳邻居节点,为了能够表示节点1和节点3之间的连接节点都有哪些,可以将节点2写入到节点对中,将1跳邻居节点对表示为(节点2,(节点1,节点3))。
在第k跳的迭代计算过程中,步骤a执行之后就执行步骤b,判断第一节点的k跳邻居集合中k跳目的节点,和全节点0跳邻居集合中的哪些起始节点相同,从全节点0跳邻居集合中查找到起始节点为第一节点的k跳邻居集合中的k跳目的节点的节点对,将第一节点的k跳邻居集合中k跳目的节点,和全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到第一节点的k+1跳邻居集合,其中,两个节点对分别来自第一节点的k跳邻居集合、全节点0跳邻居集合。本发明实施例中将两个节点对连接为一个节点对,是将两个节点对中的所有节点表示在同一个连接后形成的节点对中。举例说明如下,第一节点的k跳邻居集合的节点对为(节点x,节点y),则k跳起始节点为节点x,k跳目的节点为节点y,全节点0跳邻居集合的节点对未(节点y,节点z),则全节点0跳邻居集合中的起始节点为节点y,全节点0跳邻居集合的目的节点为节点z,则由于两个节点对中均有节点y,则两个节点可以连接为一个节点对,连接后的节点对可以表示为(节点y,(节点x,节点z))。
需要说明的是,在本发明实施例中,可以连接为一个节点对的两个节点对分别来自第一节点的k跳邻居集合、全节点0跳邻居集合,并且两个节点对中,第一节点的k跳邻居集合的节点对的k跳目的节点和全节点0跳邻居集合的节点对的起始节点相同。
在本发明的一些实施例中,步骤a执行之后,本发明实施例中步骤102所述的迭代计算过程还可以包括:步骤a+1,其中,
步骤a+1,对第一节点的k跳邻居集合中的节点对进行反转,得到第一节点的反转指定节点k跳邻居集合,第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对,反转后的k跳起始节点为第一节点的k跳邻居集合中的k跳目的节点,反转后的k跳目的节点为第一节点的k跳邻居集合中的k跳起始节点。
具体的,在步骤a中获取到第一节点的k跳邻居集合之后,第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对,则对第一节点的k跳邻居集合进行反转指的是对第一节点的k跳邻居集合中的起始节点和目的节点进行对调,则第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对。通过步骤a+1的反转步骤,可以使得第一节点的k跳邻居集合中的起始节点和目的节点进行对调,方便于后续步骤的两个节点对的连接操作。
在本发明实施例的迭代计算过程中执行步骤a+1的情况下,上述的步骤b,具体为:步骤b’,其中,
步骤b’、将第一节点的反转指定节点k跳邻居集合中反转后的k跳起始节点,和全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到第一节点的k+1跳邻居集合。
通过前述步骤a和步骤a+1的描述可知,可以获取到第一节点的反转指定节点k跳邻居集合,则可以从第一节点的反转指定节点k跳邻居集合和全节点0跳邻居集合中选择两个集合采用相同起始节点的两个节点对,从而便于步骤b’中两个节点对的连接操作,其中,步骤b’中的连接操作的方式与前述步骤b中所述的连接操作相类似,此处不再赘述。
在本发明的一些实施例中,前述的步骤b,具体包括:步骤b”和步骤b”’,其中,
步骤b”、从全节点0跳邻居集合中筛选出所有起始节点与第一节点的k跳邻居集合中k跳目的节点相同的节点对,筛选节点对完成之后得到第一节点的筛选指定节点k跳邻居集合;
步骤b”’、将第一节点的k跳邻居集合中k跳目的节点,和第一节点的筛选指定节点k跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到第一节点的k+1跳邻居集合。
其中,步骤b的一种可实现方式是通过步骤b”和步骤b”’来完成。步骤b”中首先对全节点0跳邻居集合进行筛选,从而可以得到第一节点的筛选指定节点k跳邻居集合,通过步骤b”的筛选操作,可以节省后续步骤中的连接操作的数据量,从而可以有效提高节点对的连接效率。在步骤b”中,筛选出全节点0跳邻居集合中以第一节点的k跳邻居集合中k跳目的节点作为起始节点的节点对,全节点0跳邻居集合中起始节点不是上述k跳目的节点的节点对与本次的迭代计算过程无关,因此可以在根据第一节点的k跳邻居集合对全节点0跳邻居集合进行过滤,减少步骤b”’中的连接操作的计算量。
进一步的,在本发明的一些实施例中,在执行步骤b”和步骤b”’之前,步骤b还可以包括:步骤b””,其中,
步骤b””、判断k+1是否等于1,或判断第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件;
若k+1等于1,则执行步骤b”和步骤b”’;
若第一节点的k跳邻居集合中包括的节点对个数满足节点对条件,则执行步骤b”和步骤b”’。
例如,若k=0,则说明步骤b”和步骤b”’中是0跳的迭代计算,此时可以执行步骤b”和步骤b”’,通过根据第一节点的k跳邻居集合对全节点0跳邻居集合进行过滤,减少步骤b”’中的连接操作的计算量。例如,还可以根据第一节点的k跳邻居集合中包括的节点对个数来判断是否执行步骤b”和步骤b”’,具体的,可以设置节点对条件,例如节点对条件为小于节点对个数阈值,或者小于全节点0跳邻居集合包括的节点对个数的某个比例值,当设置完成节点对条件设置后,可以先判断第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件,在条件满足时执行步骤b”和步骤b”’。
需要说明的是,在本发明实施例中,为了保证迭代计算过程的计算效率,可以采用并行的计算方式,若第一节点存在至少两个的指定节点k+1跳邻居集合时,迭代计算过程是并行的计算第一节点的各个指定节点k+1跳邻居集合。其中,当本发明实施例中拓扑网络的规模很大时,可以对该拓扑网络中划分为多个块图,在每一个块图中都可以执行步骤a和步骤b,则在每一个块图中都可以得到第一节点的一个指定节点k+1跳邻居集合,则第一节点存在至少两个的指定节点k+1跳邻居集合,在这种情况下,可以对每个指定节点k+1跳邻居集合并行的执行迭代计算过程,从而可以进一步的提高多跳邻居节点的获取效率。
103、在计算出第一节点的k+1跳邻居集合之后,当第一节点的k+1跳邻居集合中的跳数k+1等于kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。
在本发明实施例中,步骤102中的包括的步骤a和步骤b只描述了第k跳的迭代计算过程,则随着k取值的依次递增,可以计算出多轮的迭代计算过程,在每完成一轮的迭代计算之后,都需要判断是否满足跳数k+1等于kmax的条件,若满足该条件,则需要执行步骤103,否则更新k的取值继续执行步骤a和步骤b。在通过步骤a和步骤b的迭代计算之后,当第一节点的k+1跳邻居集合中的跳数k+1等于kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。其中,k+1跳邻居集合对应的k+1跳路径,指的是在k+1跳邻居集合中的节点对包括的所有节点的之间的连接关系路径,举例说明,若节点对可以示为(节点y,(节点x,节点z)),则可以输出的2跳路径为:节点x->2节点y->节点z。在第一节点的k+1跳邻居集合中包含了第一节点的多跳邻居节点,用户可以通过第一节点的k+1跳邻居集合确定出第一节点的多跳邻居节点。
由前述内容对本发明实施例的描述可知,本发明实施例中,步骤a和步骤b中通过迭代计算实现节点对的连接,从而可以将第一节点的多跳邻居节点增加到连接后的节点对中,在达到跳数阈值时可以输出第一节点的多跳邻居节点,本发明实施例中,只需要从拓扑网络中提取到全节点0跳邻居集合进行后续的迭代计算过程,而不需要每次迭代过程中都在拓扑网络中发送消息,因此本发明实施例提供的方法可以适用于查询大图的多跳邻居节点,不会造成网络的阻塞。
在本发明的一些实施例中,本发明实施例提供的多跳邻居节点的获取方法,还可以包括如下步骤:
当第一节点的k+1跳邻居集合中的跳数k+1小于kmax时,按照步骤a和步骤b的迭代计算方式计算第一节点的k+2跳邻居集合;
在计算出第一节点的k+2跳邻居集合之后,当第一节点的k+2跳邻居集合中的跳数k+2等于kmax时,将第一节点的k+2跳邻居集合以及对应的k+1跳路径输出。
其中,步骤103中描述了k+1等于kmax的情况下输出第一节点的k+1跳邻居集合,而当跳数k+1小于kmax时,还可以上述的步骤,即需要再次执行步骤a和步骤b,将步骤a和步骤b的输入条件更新为第一节点的k+1跳邻居集合,则步骤a和步骤b执行完成之后可以输出第一节点的k+2跳邻居集合。
需要说明的是,在本发明的一些实施例中,若k+2还小于kmax时,仍需要再次执行步骤a和步骤b,直至跳数达到kmax时,将第一节点的kmax跳邻居集合以及对应的k+1跳路径输出。
通过前述对本发明实施例的举例说明可知,首先根据拓扑网络中所有节点之间的连边关系得到全节点0跳邻居集合,当第一节点作为指定节点时,从第一节点的k跳邻居集合通过本发明实施例中的迭代计算过程可以计算出第一节点的k+1跳邻居集合,由于全节点0跳邻居集合中记录有所有节点作为起始节点时对应的目的节点,步骤b中第一节点的k跳邻居集合和全节点0跳邻居集合中满足k跳目的节点和全节点0跳邻居集合中起始节点相同时的两个节点对连接为一个节点对,第一节点的k+1跳邻居集合相对于第一节点的k跳邻居集合增加了具有连边关系的节点,当跳数k+1等于预置的kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出,从第一节点的kmax跳邻居集合可以获取到第一节点的多跳邻居节点。本发明实施例中通过节点对之间的连接操作可以完成多跳邻居节点的计算,而不需要在拓扑网络中发送消息,从而可以提升在大图中查询多跳邻居节点的计算效率。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
请参阅如图2所示,本发明实施例提供的另一种多跳邻居节点的获取方法的流程方框示意图。本发明实施例通过Join操作完成节点对的连接,并尽量减少Join操作的数据量来实现在大图中高效的查询多跳邻居节点。
图2中给出了本发明实施例的一种应用场景示意图,首先计算并存储每个节点的0-跳(英文名称:hop)邻居节点,得到全节点0跳邻居集合。并将其表示为键值对的存储。从起始节点到k-hop邻居节点路径的计算通过一系列的键值关联实现。如图3所示,为本发明实施例提供的节点对的连接过程的一种应用场景示意图。例如,要获得1->2->3这样一条路径,是通过(1,2)键值交替为(2,1),(2,1)关联(2,3)得到(2,(1,3)),最后可拼装出多跳邻居节点为1->2->3。接下来进行详细举例说明,图2主要包括如下步骤:
S1、根据原始的拓扑网络图的边构造,将其映射为key-value对集合,即只要存在一条边,则形成该边的两个节点就构造为一个key-value节点对,图3中的key-value对,例如(id1,id2),所有key-value对的集合构成了全节点0跳邻居节点集合P,P包括:(id1,id2)节点对、(id1,id3)节点对、(id1,id4)节点对、(id2,id5)节点对、(id3,id6)节点对、(id4,id7)节点对、(id5,id8)节点对。
S2、从集合P中筛选出key为指定节点的key-value对集合,如图3中的P1,以id1为第一节点为例,P1包括:(id1,id2)节点对、(id1,id3)节点对、(id1,id4)节点对。
S3、将P1进行key和value的反转,获得集合P1',集合P1'为集合P的反转,集合P1'包括:(id2,id1)节点对、(id3,id1)节点对、(id4,id1)节点对。
S4、从集合P中筛选出所有key不等于指定节点的key-value对的集合,如图3中的集合P2,集合P2包括:(id2,id5)节点对、(id3,id6)节点对、(id4,id7)节点对、(id5,id8)节点对。
S5、将P1'和P2进行连接操作,获得1跳邻居节点集合,如图3中的N2,其中,可连接的条件为P1'.key=P2.key,其中,N2包括:(id2,(id1,id5))节点对、(id3,(id1,id6))节点对、(id4,(id1,id7))节点对。
S6、如果跳数已经达到跳数阈值,则将N2转换输出节点id1的多跳邻居节点,反之进行S7。
S7、令P1=N2,迭代执行步骤S3-S6。
例如,如图3中,迭代执行步骤S3-S6时,集合N2反转,得到集合N2',集合N2'包括:(id5,(id1,id1))节点对、(id6,(id1,id3))节点对、(id7,(id1,id4))节点对。接下来对集合N2'和集合P2进行合并,可以得到集合N3,该集合N3包括:(id5,((id1,id2),id8))。若此时跳数已经达到跳数阈值,则可以将N3转换为1->2->5->8,输出该路径作为节点id1的多跳邻居节点。
接下来对本发明另一实施例进行举例说明,请参阅如图4所示,为本发明实施例提供的全节点0跳邻居集合的过滤过程示意图。其中,可以对步骤S4进一步的精确过滤,而且随着跳数增大,上述实施例中的P1增大到一定程度后,不再执行过滤操作,改为直接使用前述实施例中的P作为P2进行后续的计算。如图4所示,精确过滤的具体步骤如下:
S4-1、如果是第1跳,或者前一轮迭代计算出的N2包括的节点对个数小于设定的阈值或N2包括的节点对个数与P包括的节点对个数小于设定的20%比例,则执行步骤S4-1-1直至S4-1-2,否则执行S4-2-1。
S4-1-1、计算出P1的目的节点的集合,即value的集合Pd;
S4-1-2、从集合P中筛选出所有起始节点存在于Pd的key-value节点对的集合P2。
S4-2-1、直接使用P作为P2,进行后续计算。
通过前述对本发明的举例说明可知,由于本发明实施例中通过S1步骤将源拓扑网络图的边映射为了全节点的0跳邻居集合,并通过0跳邻居节点的连接操作来获得多跳邻居节点,本发明实施例中不需要进行消息传递,减少了网络通信量。由于本发明实施例中可以对连接的key-value节点对根据上一跳邻居集合进行精确过滤,减少连接操作的数据量,可以有效的提高连接效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图5所示,本发明实施例提供的一种多跳邻居节点的获取装置500,可以包括:获取模块501、迭代计算模块502和输出模块503,其中,
所述获取模块501,用于获取拓扑网络中每个节点的0跳邻居,得到全节点0跳邻居集合,所述全节点0跳邻居集合包括:每个起始节点和对应的目的节点构成的节点对,其中,所述起始节点指的是所述拓扑网络中的任意一个节点,所述目的节点指的是在所述拓扑网络中与所述起始节点存在连边关系的节点;
所述迭代计算模块502,用于当第一节点作为指定节点时,通过如下的迭代计算过程计算所述第一节点的k+1跳邻居集合,所述k为大于等于0且小于预置的跳数阈值kmax的自然数,所述迭代计算过程包括如下的步骤a和步骤b,其中,
步骤a、获取所述第一节点的k跳邻居集合,所述第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对;
步骤b、将所述第一节点的k跳邻居集合中k跳目的节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合,其中,所述两个节点对分别来自所述第一节点的k跳邻居集合、所述全节点0跳邻居集合;
所述输出模块503,用于在计算出所述第一节点的k+1跳邻居集合之后,当所述第一节点的k+1跳邻居集合中的跳数k+1等于所述kmax时,将所述第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。
在本发明的一些实施例中,所述迭代计算模块502,还用于当所述第一节点的k+1跳邻居集合中的跳数k+1小于所述kmax时,按照所述步骤a和步骤b的迭代计算方式计算所述第一节点的k+2跳邻居集合;
所述输出模块503,还用于在计算出所述第一节点的k+2跳邻居集合之后,当所述第一节点的k+2跳邻居集合中的跳数k+2等于所述kmax时,将所述第一节点的k+2跳邻居集合以及对应的k+1跳路径输出。
在本发明的一些实施例中,所述迭代计算模块502,还用于所述步骤a执行之后,执行所述迭代计算过程还包括的步骤a+1,其中,
步骤a+1,对所述第一节点的k跳邻居集合中的节点对进行反转,得到所述第一节点的反转指定节点k跳邻居集合,所述第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对,所述反转后的k跳起始节点为所述第一节点的k跳邻居集合中的k跳目的节点,所述反转后的k跳目的节点为所述第一节点的k跳邻居集合中的k跳起始节点;
所述迭代计算模块502,具体用于执行步骤b’,其中,
步骤b’、将所述第一节点的反转指定节点k跳邻居集合中反转后的k跳起始节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
在本发明的一些实施例中,所述迭代计算模块502,具体用于执行步骤b”和步骤b”’,其中,
步骤b”、从所述全节点0跳邻居集合中筛选出所有起始节点与所述第一节点的k跳邻居集合中k跳目的节点相同的节点对,筛选节点对完成之后得到所述第一节点的筛选指定节点k跳邻居集合;
步骤b”’、将所述第一节点的k跳邻居集合中k跳目的节点,和所述第一节点的筛选指定节点k跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
在本发明的一些实施例中,所述迭代计算模块502,具体用于执行步骤b””,其中,
步骤b””、判断所述k+1是否等于1,或判断所述第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件;
若所述k+1等于1,则执行步骤b”和步骤b”’;
若所述第一节点的k跳邻居集合中包括的节点对个数满足所述节点对条件,则执行步骤b”和步骤b”’。
在本发明的一些实施例中,若所述第一节点存在至少两个的指定节点k+1跳邻居集合时,所述迭代计算模块502,具体用于并行的计算所述第一节点的各个指定节点k+1跳邻居集合。
通过前述对本发明实施例的举例说明可知,首先根据拓扑网络中所有节点之间的连边关系得到全节点0跳邻居集合,当第一节点作为指定节点时,从第一节点的k跳邻居集合通过本发明实施例中的迭代计算过程可以计算出第一节点的k+1跳邻居集合,由于全节点0跳邻居集合中记录有所有节点作为起始节点时对应的目的节点,步骤b中第一节点的k跳邻居集合和全节点0跳邻居集合中满足k跳目的节点和全节点0跳邻居集合中起始节点相同时的两个节点对连接为一个节点对,第一节点的k+1跳邻居集合相对于第一节点的k跳邻居集合增加了具有连边关系的节点,当跳数k+1等于预置的kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出,从第一节点的kmax跳邻居集合可以获取到第一节点的多跳邻居节点。本发明实施例中通过节点对之间的连接操作可以完成多跳邻居节点的计算,而不需要在拓扑网络中发送消息,从而可以提升在大图中查询多跳邻居节点的计算效率。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明前述所示的方法实施例中的叙述,此处不再赘述。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的部分或全部步骤。
接下来介绍本发明实施例提供的另一种多跳邻居节点的获取装置,请参阅图6所示,多跳邻居节点的获取装置600包括:
输入装置601、输出装置602、处理器603和存储器604(其中多跳邻居节点的获取装置600中的处理器603的数量可以一个或多个,图6中以一个处理器为例)。在本发明的一些实施例中,输入装置601、输出装置602、处理器603和存储器604可通过总线或其它方式连接,其中,图6中以通过总线连接为例。
其中,处理器603,用于执行前述实施例中的多跳连接节点的获取方法。具体的,处理器603,用于执行如下步骤:
获取拓扑网络中每个节点的0跳邻居,得到全节点0跳邻居集合,所述全节点0跳邻居集合包括:每个起始节点和对应的目的节点构成的节点对,其中,所述起始节点指的是所述拓扑网络中的任意一个节点,所述目的节点指的是在所述拓扑网络中与所述起始节点存在连边关系的节点;
当第一节点作为指定节点时,通过如下的迭代计算过程计算所述第一节点的k+1跳邻居集合,所述k为大于等于0且小于预置的跳数阈值kmax的自然数,所述迭代计算过程包括如下的步骤a和步骤b,其中,
步骤a、获取所述第一节点的k跳邻居集合,所述第一节点的k跳邻居集合包括:k跳起始节点和k跳目的节点构成的节点对;
步骤b、将所述第一节点的k跳邻居集合中k跳目的节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合,其中,所述两个节点对分别来自所述第一节点的k跳邻居集合、所述全节点0跳邻居集合;
在计算出所述第一节点的k+1跳邻居集合之后,当所述第一节点的k+1跳邻居集合中的跳数k+1等于所述kmax时,将所述第一节点的k+1跳邻居集合以及对应的k+1跳路径输出。
在本发明的一些实施例中,处理器603,还用于执行如下步骤:
当所述第一节点的k+1跳邻居集合中的跳数k+1小于所述kmax时,按照所述步骤a和步骤b的迭代计算方式计算所述第一节点的k+2跳邻居集合;
在计算出所述第一节点的k+2跳邻居集合之后,当所述第一节点的k+2跳邻居集合中的跳数k+2等于所述kmax时,将所述第一节点的k+2跳邻居集合以及对应的k+1跳路径输出。
在本发明的一些实施例中,处理器603,还用于执行所述步骤a执行之后,所述迭代计算过程还包括:步骤a+1,其中,
步骤a+1,对所述第一节点的k跳邻居集合中的节点对进行反转,得到所述第一节点的反转指定节点k跳邻居集合,所述第一节点的反转指定节点k跳邻居集合包括:反转后的k跳起始节点和反转后的k跳目的节点构成的节点对,所述反转后的k跳起始节点为所述第一节点的k跳邻居集合中的k跳目的节点,所述反转后的k跳目的节点为所述第一节点的k跳邻居集合中的k跳起始节点;
所述步骤b,具体为:步骤b’,其中,
步骤b’、将所述第一节点的反转指定节点k跳邻居集合中反转后的k跳起始节点,和所述全节点0跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
在本发明的一些实施例中,处理器603,具体用于执行如下步骤:步骤b”和步骤b”’,其中,
步骤b”、从所述全节点0跳邻居集合中筛选出所有起始节点与所述第一节点的k跳邻居集合中k跳目的节点相同的节点对,筛选节点对完成之后得到所述第一节点的筛选指定节点k跳邻居集合;
步骤b”’、将所述第一节点的k跳邻居集合中k跳目的节点,和所述第一节点的筛选指定节点k跳邻居集合中起始节点相同的两个节点对连接为一个节点对,完成节点对的连接后得到所述第一节点的k+1跳邻居集合。
进一步的,在本发明的一些实施例中,处理器603,还用于执行如下步骤:步骤b””,其中,
步骤b””、判断所述k+1是否等于1,或判断所述第一节点的k跳邻居集合中包括的节点对个数是否满足预置的节点对条件;
若所述k+1等于1,则执行步骤b”和步骤b”’;
若所述第一节点的k跳邻居集合中包括的节点对个数满足所述节点对条件,则执行步骤b”和步骤b”’。
在本发明的一些实施例中,若所述第一节点存在至少两个的指定节点k+1跳邻居集合时,处理器603,具体用于执行的所述迭代计算过程是并行的计算所述第一节点的各个指定节点k+1跳邻居集合。
通过前述对本发明实施例的举例说明可知,首先根据拓扑网络中所有节点之间的连边关系得到全节点0跳邻居集合,当第一节点作为指定节点时,从第一节点的k跳邻居集合通过本发明实施例中的迭代计算过程可以计算出第一节点的k+1跳邻居集合,由于全节点0跳邻居集合中记录有所有节点作为起始节点时对应的目的节点,步骤b中第一节点的k跳邻居集合和全节点0跳邻居集合中满足k跳目的节点和全节点0跳邻居集合中起始节点相同时的两个节点对连接为一个节点对,第一节点的k+1跳邻居集合相对于第一节点的k跳邻居集合增加了具有连边关系的节点,当跳数k+1等于预置的kmax时,将第一节点的k+1跳邻居集合以及对应的k+1跳路径输出,从第一节点的kmax跳邻居集合可以获取到第一节点的多跳邻居节点。本发明实施例中通过节点对之间的连接操作可以完成多跳邻居节点的计算,而不需要在拓扑网络中发送消息,从而可以提升在大图中查询多跳邻居节点的计算效率。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。