一种包含多个必经资源的最短路径实现方法和系统与流程

文档序号:31188688发布日期:2022-08-19 23:02阅读:95来源:国知局
一种包含多个必经资源的最短路径实现方法和系统与流程

1.本发明涉及路径计算技术领域,特别是涉及一种包含多个必经资源的最短路径实现方法和系统。


背景技术:

2.网络建设中,受实际客观条件限制和实际业务调度影响,如机房大小,业务建立源溯节点诉求等,业务经过的路径一般会有一定的约束,业务路由算法通常是按将约束转化为权重进行最短路径计算,但包含资源的限制条件无法通过简单权重转化进行约束,且难以同时完成最短的路径目标。
3.另外,对于包含多个必经资源的情况,例如在给定的网络中必须需要经过多个节点或链路,对于这种情况,特别是针对大规模骨干网时,现有的算法均存在各种各样的缺陷,无法同时满足时间复杂度低、包含多个必经资源、完成最短路径规划的效果。
4.鉴于以上情况,如何克服现有技术所存在的缺陷,解决包含多个必经资源情况下最短路径计算的问题,是本技术领域待解决的难题。


技术实现要素:

5.针对现有技术的以上缺陷或改进需求,本发明提供一种包含多个必经资源的最短路径实现方法和系统,使在包含多个必经资源的情况下计算得到的路径长度尽可能的短,本发明适用于对于路径长度要求较高的国家干线网络和国际干线网络。
6.本发明实施例采用如下技术方案:
7.第一方面,本发明提供了一种包含多个必经资源的最短路径实现方法,包括:
8.建立用于存储已更新节点的s集合和用于存储未更新节点的t集合,并初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性;
9.将源节点作为更新节点,对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新;
10.每次更新后将更新节点从t集合中取出加入s集合,并从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新,在除宿节点外的其它节点都作为更新节点更新后,单独对宿节点进行更新;
11.以前驱节点属性为依据、以源节点为起点、以宿节点为终点所形成的当前路径即为包含多个必经资源的最短路径。
12.进一步的,所述距离权重属性代表对应节点在当前路径下到源节点的距离,所述前驱节点属性代表对应节点在当前路径下的前一个节点,所述路径包含权重属性代表对应节点在当前路径下所包含的必经资源数。
13.进一步的,所述初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性具体包括:
14.将源节点的距离权重属性初始化为0、前驱节点属性初始化为0、路径包含权重属
性初始化为0;
15.将其它节点的距离权重属性初始化为无穷大、前驱节点属性初始化为0、路径包含权重属性初始化为0。
16.进一步的,设更新节点为i,邻近节点为j,更新节点到邻近节点的距离为c
ij
,更新节点的距离权重属性为d(i),更新节点的路径包含权重属性为include(p(d(i))),邻近节点现有的距离权重属性为d(j),邻近节点现有的路径包含权重属性为include(p(d(j))),邻近节点待更新的距离权重属性为邻近节点待更新的路径包含权重属性为则所述对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新具体包括:
17.令若邻近节点j是必经资源,则若邻近节点j是必经资源,则
18.根据与include(p(d(j)))的大小对比以及与d(j)的大小对比来判断是否更新邻近节点j的路径包含权重属性以及距离权重属性;
19.当邻近节点j的路径包含权重属性以及距离权重属性中至少一项更新时,将邻近节点j的前驱节点属性更新为i,否则不更新其前驱节点属性。
20.进一步的,所述根据与include(p(d(j)))的大小对比以及与d(j)的大小对比来判断是否更新邻近节点j的路径包含权重属性以及距离权重属性具体包括:
21.当大于include(p(d(j)))时,更新邻近节点j的路径包含权重属性为并更新邻近节点j的距离权重属性为
22.当小于include(p(d(j)))时,不更新邻近节点j的路径包含权重属性以及距离权重属性;
23.当等于include(p(d(j)))时,判断是否小于d(j),若小于则更新邻近节点j的距离权重属性为否则不更新。
24.进一步的,所述单独对宿节点进行更新的方式包括:根据宿节点邻近节点的路径包含权重属性大小以及距离权重属性大小来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。
25.进一步的,所述根据宿节点邻近节点的路径包含权重属性大小以及距离权重属性大小来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性具体包括:
26.选取宿节点的邻近节点中路径包含权重属性最大的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性;
27.当多个邻近节点的路径包含权重属性最大时,选取其中距离权重属性值加上到宿节点距离值后数值最小的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。
28.进一步的,所述当前路径的定义为:以前驱节点属性为依据、以源节点为起点、以任一节点为终点所形成的路径即为该节点的当前路径。
29.进一步的,在对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新时,根据更新节点的当前路径向外寻找邻近节点。
30.另一方面,本发明提供了一种包含多个必经资源的最短路径实现系统,包括节点集合建立模块、节点更新模块以及路径规划模块,其中:
31.所述节点集合建立模块用于建立s集合和t集合,s集合用于存储已更新节点,t集合用于存储未更新节点,且所述节点集合建立模块还用于初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性;
32.所述节点更新模块用于将源节点作为更新节点,对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新,所述节点更新模块还用于将更新节点从t集合中取出加入s集合,并从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新,在除宿节点外的其它节点都作为更新节点更新后,单独对宿节点进行更新;
33.所述路径规划模块用于将以前驱节点属性为依据、以源节点为起点、以宿节点为终点所形成的当前路径确定为包含多个必经资源的最短路径。
34.与现有技术相比,本发明的有益效果在于:解决了路由计算中必须包含多个资源且需要路径最短的问题。相比于传统的路由计算模式,本发明同时具备时间复杂度比较低、可以包含多个必经资源、可以找出包含多个必经资源的最短路径的优点,可以应用到大规模骨干网上,另外,本发明的计算方法计算的路径不会形成环,可有效解决现有路由计算方式中路径成环的问题。
附图说明
35.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
36.图1为本发明实施例1提供的一种包含多个必经资源的最短路径实现方法的流程图;
37.图2为本发明实施例1提供的初始化所有节点的流程图;
38.图3为本发明实施例1提供的对更新节点进行更新的流程图;
39.图4为本发明实施例1提供的判断邻近节点是否更新的示意图;
40.图5为本发明实施例2提供的网络拓扑图;
41.图6为本发明实施例2提供的各节点初始化后的网络拓扑示意图;
42.图7为本发明实施例2提供的a节点作为更新节点更新后的网络拓扑示意图;
43.图8为本发明实施例2提供的b节点作为更新节点更新后的网络拓扑示意图;
44.图9为本发明实施例2提供的c节点作为更新节点更新后的网络拓扑示意图;
45.图10为本发明实施例2提供的e节点作为更新节点更新后的网络拓扑示意图;
46.图11为本发明实施例2提供的d节点作为更新节点更新后的网络拓扑示意图;
47.图12为本发明实施例2提供的f节点更新后的网络拓扑示意图;
48.图13为本发明实施例3提供的一种包含多个必经资源的最短路径实现系统模块连接示意图;
49.图14为本发明实施例4提供的一种包含多个必经资源的最短路径实现装置结构示意图。
具体实施方式
50.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
51.本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
52.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
53.实施例1:
54.本发明实施例1适用于如下场景:在给定的网络中,计算两个节点之间的不成环的最短路径,该路径必须包含指定的节点或者链路。形式化描述如下:给定一个网络,网络的链路上包括节点集合v=(v1,v2,

,vn),链路(vi,vj)表示结点vi和vj之间的链路。c
ij
代表链路(vi,vj)的长度。需要解决的是任意两点间,比如源节点v1到宿节点vn的路径,该路径包括某些必经资源,如非源宿节点{vk1,

,vkk}。
55.针对上述场景,如图1所示,本发明实施例1提供一种包含多个必经资源的最短路径实现方法,该方法包括如下步骤:
56.步骤100:建立用于存储已更新节点的s集合和用于存储未更新节点的t集合,并初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性。在本优选实施例的该步骤中,s集合初始为空,t集合初始等于v集合=(v1,v2,

,vn)。
57.步骤200:将源节点作为更新节点,对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新。在本优选实施例中,每个节点的距离权重属性代表对应节点在当前路径下到源节点的距离,每个节点的前驱节点属性代表对应节点在当前路径下的前一个节点,每个节点的路径包含权重属性代表对应节点在当前路径下所包含的必经资源数。另外,当前路径的定义为:以前驱节点属性为依据、以源节点为起点、以任一节点为终点所形成的路径即为该节点的当前路径。例如v3节点的前驱节点属性为v2,v2节点的前驱节点属性为v1,v1为源节点,那么v3节点对应的当前路径即为v1-v2-v3,v2节点对应的当前路径即为v1-v2。
58.步骤300:每次更新后将更新节点从t集合中取出加入s集合,并从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新,在除宿节点外的其它节点都作为更新节点更新后,单独对宿节点进行更新。例如,第一个更新节点为源节点v1,那么在对v1的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新后,就将v1加入s集合并从t集合中去除,此时t集合只剩下v-v1=(v2,v3,

,vn),然后从剩下的t集合中选出除了宿节点之外距离权重属性最小的节点(例如v2)作为新的更新节点开
始更新,最后只剩下宿节点vn时,单独对vn进行更新。
59.步骤400:所有节点全部更新完毕后,以前驱节点属性为依据、以源节点为起点、以宿节点为终点所形成的当前路径即为包含多个必经资源的最短路径。该步骤中,当所有节点全部更新完毕时,除了源节点之外的每个节点都会有一个前驱节点属性,并且每个节点的距离权重属性、前驱节点属性以及路径包含权重属性都会根据相应的更新原则进行更新,以保证最后以前驱节点属性为依据、以源节点为起点、以宿节点为终点所形成的宿节点对应的当前路径为包含多个必经资源的最短路径。
60.以上为本实施例1提供的包含多个必经资源的最短路径实现方法的主要步骤,下面通过对距离权重属性、前驱节点属性以及路径包含权重属性的设定与更新进行详细描述来解释上述步骤100-步骤400为何能得到最后的包含多个必经资源的最短路径。
61.如图2所示,在本优选实施例的步骤100中,初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性具体可包括如下步骤:
62.步骤101:将源节点的距离权重属性初始化为0、前驱节点属性初始化为0、路径包含权重属性初始化为0。在本优选实施例中,对于源节点(例如上述例子中的v1),其到自身的距离为0,所以将其距离权重属性初始化为0,其距离权重属性可以用d(v1)=0来表示;同样,源节点是没有前驱节点的,所以其前驱节点属性也可以初始化为0(或为空),其前驱节点属性可以用pred(v1)=0来表示;另外,就一个源节点还不存在路径之说,更没有包含必经资源,所以其路径包含权重属性也初始化为0,可以用include(p(d(v1)))=0来表示。
63.步骤102:将其它节点的距离权重属性初始化为无穷大、前驱节点属性初始化为0、路径包含权重属性初始化为0。在本优选实施例中,对于其它节点,将其它节点的距离权重属性初始化为无穷大,可表示为d(vk)=∞,这是为了方便后续进行距离权重属性的比对,因为本实施例的目的是找出距离最短(也即距离权重属性最小)的节点路径,所以将其初始化时设为无穷大(或一个足够大于最大距离权重属性的值即可),这样就能在一个个节点更新时,通过比较距离权重属性,找到距离权重属性更小的节点。该步骤还将其它节点的前驱节点属性初始化为0,可表示为pred(vk)=0,后续更新时会根据路径的选择来更新各个节点的前驱节点属性;将其它节点的路径包含权重属性初始化为0,可表示为include(p(d(vk)))=0,其中,p(d(vk))表示源节点到vk节点的路径,后续更新时会根据选择的路径中包含的必经资源数量来更新各个节点的路径包含权重属性。需说明的是,该步骤中的k取值为2-n,代表除源节点之外的其它节点。
64.对于本优选实施例的步骤200,假设其所述的更新节点为i,邻近节点为j,节点i属于v集合中v1-vn的某个节点,节点j为节点i在当前路径上向外寻找的邻近节点(将邻近节点j限定为更新节点i向外寻找的节点,可以防止将更新节点i的当前路径内的节点作为邻近节点,从而防止出现成环现象)。对于更新节点i、邻近节点j,设定更新节点到邻近节点的距离为c
ij
,更新节点的距离权重属性为d(i),更新节点的路径包含权重属性为include(p(d(i))),邻近节点现有的距离权重属性为d(j),邻近节点现有的路径包含权重属性为include(p(d(j))),邻近节点待更新的距离权重属性为邻近节点待更新的路径包含权重属性为那么如图3所示,步骤200中所述的“对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新”可表示为update(i),
具体可包括如下步骤:
65.步骤201:令若邻近节点j是必经资源,则在该步骤中,邻近节点待更新的距离权重属性值等于更新节点的距离权重属性值加上对应邻近节点与更新节点间的距离,例如:更新节点的距离权重属性值为5,更新节点与一个邻近节点的距离为2,那么邻近节点待更新的距离权重属性值就为7。而对于邻近节点待更新的路径包含权重属性值,则根据该邻近节点是否为必经资源节点来决定,当邻近节点是必经资源节点时,其待更新的路径包含权重属性值在更新节点的路径包含权重属性值基础上加一,当邻近节点不是必经资源节点时,其待更新的路径包含权重属性值与更新节点的路径包含权重属性值保持一致,例如,更新节点的路径包含权重属性值为1,也即代表着更新节点的当前路径上有一个必经资源节点,而其有一个邻近节点也是必经资源节点,那么这个邻近节点待更新的路径包含权重属性值就为2,其还有另一个邻近节点不是必经资源节点,那么这另一个邻近节点待更新的路径包含权重属性值就为1。
66.步骤202:根据与include(p(d(j)))的大小对比以及与d(j)的大小对比来判断是否更新邻近节点j的路径包含权重属性以及距离权重属性。在该步骤中,需要判断相邻节点待更新的路径包含权重属性值、待更新的距离权重属性值与其现有的路径包含权重属性值、距离权重属性值的大小,来判断是否需要更新其路径包含权重属性值、距离权重属性值。需说明的是,p(d(j))表示源节点到相邻节点j的当前路径包含权重属性所对应的当前路径(当前路径的定义为:以前驱节点属性为依据、以源节点为起点、以任一节点为终点所形成的路径即为该节点的当前路径),表示源节点到相邻节点j的待更新路径包含权重属性所对应的待更新路径。
67.步骤203:当邻近节点j的路径包含权重属性以及距离权重属性中至少一项更新时,将邻近节点j的前驱节点属性更新为i,否则不更新其前驱节点属性。在该步骤中,只要邻近节点j的路径包含权重属性以及距离权重属性中有任一项更新,那就说明该邻近节点是符合本实施例的最短路径规则的,就需要将其前驱节点属性更新为更新节点i,当邻近节点j的路径包含权重属性以及距离权重属性都不更新时,说明该邻近节点j原有的属性对应的路径相较于待更新的属性对应的路径更符合实施例的最短路径规则的,所以保持原有的前驱节点属性不变。
68.如图4所示,对于上述步骤202,本实施例中判断邻近节点是否更新具体可分为如下几种情况:
69.第一种情况:当大于include(p(d(j)))时,更新邻近节点j的路径包含权重属性为并更新邻近节点j的距离权重属性为对于该种情况,总共可能有两种发生场景:第一种场景是邻近节点j现有的路径包含权重属性以及现有的距离权重属性还未更新过,尚还保持为初始化的状态,这种场景下,邻近节点j现有的路径包含权重属性为0,第二种场景是邻近节点j现有的路径包含权重属性以及现有的距离权重属性已经更新过了,只是包含的必经资源较少,这两种场景无论哪种,只要
大于include(p(d(j))),都说明邻近节点j的待更新路径比之当前路径包含有更多的必经资源节点,需要对当前路径进行更新,将其当前路径更新为所对应的路径,也即更新对应的前驱节点属性、距离权重属性、路径包含权重属性。
70.第二种情况:当小于include(p(d(j)))时,不更新邻近节点j的路径包含权重属性以及距离权重属性。对于该种情况,因为初始化的路径包含权重属性为0,不可能大于待更新的路径包含权重属性,所以只有一种发生场景,那就是邻近节点j现有的路径包含权重属性以及现有的距离权重属性已经更新过了,且更新过的当前路径包含权重属性还比待更新的路径包含权重属性大,这说明邻近节点j的当前路径比之待更新路径包含有更多的必经资源节点,所以不需要对当前路径进行更新,也即该邻近节点j的前驱节点属性、距离权重属性、路径包含权重属性不需要进行更新。
71.第三种情况:当等于include(p(d(j)))时,判断是否小于d(j),若小于则更新邻近节点j的距离权重属性为否则不更新。对于该种情况,总共可能有两种发生场景:第一种场景是邻近节点j现有的路径包含权重属性以及现有的距离权重属性还未更新过,尚还保持为初始化的状态,这种场景下,邻近节点j现有的路径包含权重属性为0、现有的距离权重属性为无穷大,第二种场景是邻近节点j现有的路径包含权重属性以及现有的距离权重属性已经更新过了,只是现有的路径包含权重属性与待更新的路径包含权重属性一样。这两种场景无论哪种,当等于include(p(d(j)))时,都说明两条路径包含的必经资源节点数一样,路径包含权重属性不能作为判断路径的依据了,此时需要根据距离权重属性来判断邻近节点j是否需要修改前驱节点属性以及距离权重属性。当待更新的距离权重属性小于现有的当前距离权重属性时,说明该待更新路径的距离更短,更符合本实施例的要求,所以需要对当前路径进行更新,更新其前驱节点属性为更新节点i,更新其距离权重属性为d(i)+c
ij
(也即)。当待更新的距离权重属性不小于现有的当前距离权重属性时,说明该待更新路径的距离相较于当前路径不占优势,所以不需要更新。
72.在本优选实施例中,对于步骤300,在从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新时,该过程中不会选取宿节点作为新的更新节点来更新宿节点周围邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性,只有当其它所有节点完成更新后,才单独对宿节点进行更新,宿节点的更新方式包括:根据宿节点邻近节点的路径包含权重属性大小以及距离权重属性大小来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。这是因为宿节点是需要求解路径上的最后一个节点,所以宿节点已经不存在向外的相邻节点了,所以不能像其它更新节点一样对相邻节点来进行更新,而对于宿节点自身,其作为其它节点的相邻节点进行更新时则存在两种情况:第一种是更新的路径恰好为最终的包含多个必经资源的最短路径,另一种情况则是更新的路径不是最终的包含多个必经资源的最短路径。这两种情况是无法事先预料的,所以本优选实施例选择根据宿节点邻近节点的路径包含权重属性大小以及距离权重属性大小来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。具体的,优先选取宿
节点的邻近节点中路径包含权重属性最大的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性;当多个邻近节点的路径包含权重属性最大时,选取其中距离权重属性值加上到宿节点距离值后数值最小的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。这样一来,宿节点更新后的路径包含权重属性就会最大,并且距离权重属性会最小,从而使其更新后的当前路径成为本实施例所需要的包含多个必经资源的最短路径。
73.综上所述,通过上述步骤,本实施例能够解决路由计算中必须包含多个资源且需要路径最短的问题。相比于传统的路由计算模式,本发明实施例同时具备时间复杂度比较低、可以包含多个必经资源、可以找出包含多个必经资源的最短路径的优点,本发明实施例可以应用到大规模骨干网上,另外,本发明实施例的计算方法计算的路径不会形成环,可有效解决现有路由计算方式中路径成环的问题。
74.实施例2:
75.基于实施例1提供的包含多个必经资源的最短路径实现方法,本实施例2以一个具体实施场景为例,来对实施例1所述的包含多个必经资源的最短路径实现方法进行详细说明。
76.如图5所示,为本实施例2提供的网络拓扑图,在该网络拓扑中,具有abcdef六个节点,其中:ab为一个链路,且ab距离为1;ac为一个链路,且ac距离为6;bc为一个链路,且bc距离为1;bd为一个链路,且bd距离为1;be为一个链路,且be距离为1;cd为一个链路,且cd距离为1;de为一个链路,且de距离为3;df为一个链路,且df距离为1;ef为一个链路,且ef距离为1。图5中每个链路中间的数值即为该链路的距离。
77.基于该网络拓扑,本实施场景需要求a点到f点之间的路径(也即a点为源节点,f点为宿节点),且需要包含必经节点资源:c点和e点。
78.在上述场景下,本实施例2首先初始化s集合和t集合,s集合开始为空,t集合包含所有的节点:t={a,b,c,d,e,f}。然后对每个节点的距离权重属性、前驱节点属性以及路径包含权重属性进行初始化。其中,因为源节点a点到a点的距离为0,a点没有前驱节点,a点到a点也没有经过c和e两点,所以初始化a的距离权重属性d(a)=0,a的前驱节点属性pred(a)=0,a的路径包含权重属性include(p(d(a)))=0;对于其它节点b,c,d,e,f,因为还没有开始更新,所以初始化各点到源节点的距离为无穷大,前驱节点为0,包含权重为0。初始化后的网络拓扑示意图如图6所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性:
79.d(b)=∞,pred(b)=0,include(p(d(b)))=0;
80.d(c)=∞,pred(c)=0,include(p(d(c)))=0;
81.d(d)=∞,pred(d)=0,include(p(d(d)))=0;
82.d(e)=∞,pred(e)=0,include(p(d(e)))=0;
83.d(f)=∞,pred(f)=0,include(p(d(f)))=0。
84.在所有节点初始化后,开始进行更新。
85.1、首先选取第一个节点也即源节点a作为更新节点,进行update(a),向外查找a的相邻节点,可以找到b和c,对b和c的距离权重属性、前驱节点属性以及路径包含权重属性进行更新:
86.对于b节点,ab链路的距离为1,且b节点不属于必经节点,所以其待更新的距离权重属性在a节点基础上加1等于1,待更新的路径包含权重属性在a节点基础上不变等于0,所以b节点更新后的距离权重属性d(b)=1,更新后的前驱节点属性pred(b)=a,更新后的路径包含权重属性include(p(d(b)))=0。
87.对于c节点,ac链路的距离为6,且c节点属于必经节点,所以其待更新的距离权重属性在a节点基础上加6等于6,待更新的路径包含权重属性在a节点基础上加1等于1,所以c节点更新后的距离权重d(c)=6,更新后的前驱节点属性pred(c)=a,更新后的路径包含权重属性include(p(d(c)))=1。
88.a节点作为更新节点更新后的网络拓扑示意图如图7所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
89.2、将更新节点a从t集合中取出加入s集合,此时s={a},t={b,c,d,e,f},从t集合中选取距离权重属性最小的节点(也即b节点)作为新的更新节点开始更新。进行update(b),向外查找b的相邻节点,可以找到c、d和e,对c、d和e的距离权重属性、前驱节点属性以及路径包含权重属性进行更新:
90.对于c节点,bc链路的距离为1,且c节点属于必经节点,所以其待更新的距离权重属性在b节点基础上加1等于2,待更新的路径包含权重属性在b节点基础上加1等于1,这里需要注意的是c节点已经作为a节点的邻近节点更新过了,但该步骤中c节点作为b节点的邻近节点所待更新的路径包含权重属性与原有一致,而距离权重属性要更小,所以要以本次待更新的数据为准,所以c节点更新后的距离权重属性d(c)=2,更新后的前驱节点属性pred(c)=b,更新后的路径包含权重属性include(p(d(c)))=1。
91.对于d节点,bd链路的距离为1,且d节点不属于必经节点,所以其待更新的距离权重属性在b节点基础上加1等于2,待更新的路径包含权重属性在b节点基础上不变等于0,所以d节点更新后的距离权重属性d(d)=2,更新后的前驱节点属性pred(d)=b,更新后的路径包含权重属性include(p(d(d)))=0。
92.对于e节点,be链路的距离为1,且e节点属于必经节点,所以其待更新的距离权重属性在b节点基础上加1等于2,待更新的路径包含权重属性在b节点基础上加1等于1,所以d节点更新后的距离权重属性d(e)=2,更新后的前驱节点属性pred(e)=b,更新后的路径包含权重属性include(p(d(e)))=1。
93.b节点作为更新节点更新后的网络拓扑示意图如图8所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
94.3、将更新节点b从t集合中取出加入s集合,此时s={a,b},t={c,d,e,f},从t集合中选取距离权重属性最小的节点(也即c、e节点中任一个,这里先选c为例)作为新的更新节点开始更新。进行update(c),向外查找c的相邻节点,可以找到d,对d的距离权重属性、前驱节点属性以及路径包含权重属性进行更新:
95.对于d节点,cd链路的距离为1,且d节点不属于必经节点,所以其待更新的距离权重属性在c节点基础上加1等于3,待更新的路径包含权重属性在c节点基础上不变等于1,这里需要注意的是d节点已经作为b节点的邻近节点更新过了,但该步骤中d节点作为c节点的
邻近节点所待更新的路径包含权重属性比原来要大,所以要以本次待更新的数据为准,所以d节点更新后的距离权重属性d(d)=3,更新后的前驱节点属性pred(d)=c,更新后的路径包含权重属性include(p(d(d)))=1。
96.c节点作为更新节点更新后的网络拓扑示意图如图9所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
97.4、将更新节点c从t集合中取出加入s集合,此时s={a,b,c},t={d,e,f},从t集合中选取距离权重属性最小的节点,(也即e节点)作为新的更新节点开始更新。进行update(e),向外查找e的相邻节点,可以找到d、f,对d、f的距离权重属性、前驱节点属性以及路径包含权重属性进行更新:
98.对于d节点,ed链路的距离为3,且d节点不属于必经节点,所以其待更新的距离权重属性在e节点基础上加3等于5,待更新的路径包含权重属性在e节点基础上不变等于1,这里需要注意的是d节点已经作为c节点的邻近节点更新过了,且该步骤中d节点作为e节点的邻近节点所待更新的路径包含权重属性与原来一样大,而且待更新的距离权重属性比原来的距离权重属性还要大,所以要以上次更新的数据为准,不对d节点的距离权重属性、前驱节点属性、路径包含权重属性做改变。
99.对于f节点,ef链路的距离为1,且f节点不属于必经节点,所以其待更新的距离权重属性在e节点基础上加1等于3,待更新的路径包含权重属性在e节点基础上不变等于1,所以f节点更新后的距离权重属性d(f)=3,更新后的前驱节点属性pred(f)=e,更新后的路径包含权重属性include(p(d(f)))=1。
100.e节点作为更新节点更新后的网络拓扑示意图如图10所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
101.5、将更新节点e从t集合中取出加入s集合,此时s={a,b,c,e},t={d,f},从t集合中选取距离权重属性最小的节点(也即d节点,因为f为宿节点,所以虽然f与d此时的距离权重属性都为3,但也还是选d,不选f)作为新的更新节点开始更新。进行update(d),向外查找d的相邻节点,可以找到e、f,对e、f的距离权重属性、前驱节点属性以及路径包含权重属性进行更新:
102.对于e节点,de链路的距离为3,且e节点属于必经节点,所以其待更新的距离权重属性在d节点基础上加3等于6,待更新的路径包含权重属性在d节点基础上加1等于2,这里需要注意的是,虽然e节点已经作为b节点的邻近节点更新过了,但该步骤中e节点作为d节点的邻近节点所待更新的路径包含权重属性比原来的大,所以要以本次待更新的数据为准,所以e节点更新后的距离权重属性d(e)=6,更新后的前驱节点属性pred(e)=d,更新后的路径包含权重属性include(p(d(e)))=2。
103.对于f节点,df链路的距离为1,且f节点不属于必经节点,所以其待更新的距离权重属性在d节点基础上加1等于4,待更新的路径包含权重属性在d节点基础上不变等于1,这里需要注意的是,f节点已经作为e节点的邻近节点更新过了,且该步骤中f节点作为d节点的邻近节点所待更新的路径包含权重属性与原来的一样大,而f节点作为d节点的邻近节点所待更新的距离权重属性比之原来的还更大,所以要以上次更新的数据为准,不对f节点的
距离权重属性、前驱节点属性、路径包含权重属性做改变。
104.d节点作为更新节点更新后的网络拓扑示意图如图11所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
105.6、将更新节点d从t集合中取出加入s集合,此时s={a,b,c,e,d},t={f},这样一来,t集合中除了宿节点f之外,其它所有节点都更新完毕,此时可以单独对宿节点f进行更新,宿节点的更新方式包括:选取宿节点的邻近节点中路径包含权重属性最大的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性;当多个邻近节点的路径包含权重属性最大时,选取其中距离权重属性值加上到宿节点距离值后数值最小的节点作为宿节点的前驱节点来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。
106.按照上述方法,查看f节点的邻近节点:e、d。其中,e的距离权重属性d(e)=6、前驱节点属性pred(e)=d、路径包含权重属性include(p(d(e)))=2;d的距离权重属性d(d)=3、前驱节点属性pred(d)=c、路径包含权重属性include(p(d(d)))=1。可以发现e的路径包含权重属性比d的路径包含权重属性大,所以选取e节点作为f节点的前驱节点来更新f节点的距离权重属性、前驱节点属性以及路径包含权重属性,ef链路的距离为1,所以最后更新的f节点的距离权重属性d(f)=7、前驱节点属性pred(f)=e、路径包含权重属性include(p(d(f)))=2。
107.f节点更新后的网络拓扑示意图如图12所示,图中靠近各个节点的一圈数值表示它们的距离权重属性,远离各个节点的一圈数值表示它们的路径包含权重属性。
108.至此,所有节点更新完毕,此时,f节点的前驱节点属性为e节点,e节点的前驱节点属性为d节点,d节点的前驱节点属性为c节点,c节点的前驱节点属性为b节点,b节点的前驱节点属性为a节点。所以,以前驱节点属性为依据、以源节点a为起点、以宿节点f为终点所形成的当前路径为a-b-c-d-e-f,该条路径包含了两个必经节点资源c、e,路径长度为7,即为本实施例所求的包含多个必经节点资源的最短路径。
109.需要说明的是,本实施例是以节点作为必经资源来进行的举例说明,当必经资源为链路时,与以节点为必经资源的原理是相同的,本发明所描述的方案也依旧适用。
110.综上所述,本实施例能够解决路由计算中必须包含多个资源且需要路径最短的问题。相比于传统的路由计算模式,本发明实施例同时具备时间复杂度比较低、可以包含多个必经资源、可以找出包含多个必经资源的最短路径的优点。另外,本发明实施例的计算方法计算的路径不会形成环,可有效解决现有路由计算方式中路径成环的问题。
111.实施例3:
112.基于实施例1、实施例2提供的包含多个必经资源的最短路径实现方法,本实施例3提供一种包含多个必经资源的最短路径实现系统,如图13所示,该系统包括节点集合建立模块、节点更新模块以及路径规划模块,节点更新模块对节点集合建立模块中的节点进行更新,路径规划模块根据更新的节点来确定最终路径。
113.其中,所述节点集合建立模块用于建立s集合和t集合,s集合用于存储已更新节点,t集合用于存储未更新节点,且所述节点集合建立模块还用于初始化所有节点的距离权重属性、前驱节点属性以及路径包含权重属性。
114.具体的,在初始化时,将源节点的距离权重属性初始化为0、前驱节点属性初始化为0、路径包含权重属性初始化为0。将其它节点的距离权重属性初始化为无穷大、前驱节点属性初始化为0、路径包含权重属性初始化为0。
115.所述节点更新模块用于将源节点作为更新节点,对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新,所述节点更新模块还用于将更新节点从t集合中取出加入s集合,并从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新,在除宿节点外的其它节点都作为更新节点更新后,单独对宿节点进行更新。
116.具体的,设将更新节点为i,邻近节点为j,节点i属于v集合中v1-vn的某个节点,节点j为节点i在当前路径上向外寻找的邻近节点,对于更新节点i、邻近节点j,设定更新节点到邻近节点的距离为c
ij
,更新节点的距离权重属性为d(i),更新节点的路径包含权重属性为include(p(d(i))),邻近节点现有的距离权重属性为d(j),邻近节点现有的路径包含权重属性为include(p(d(j))),邻近节点待更新的距离权重属性为邻近节点待更新的路径包含权重属性为那么“对更新节点的邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性进行更新”可表示为update(i),具体包括:令若邻近节点j是必经资源,则根据与include(p(d(j)))的大小对比以及与d(j)的大小对比来判断是否更新邻近节点j的路径包含权重属性以及距离权重属性。当邻近节点j的路径包含权重属性以及距离权重属性中至少一项更新时,将邻近节点j的前驱节点属性更新为i,否则不更新其前驱节点属性。
117.另外,在从剩下t集合中选取除宿节点外距离权重属性最小的节点作为新的更新节点开始更新时,该过程中不会选取宿节点作为新的更新节点来更新宿节点周围邻近节点的距离权重属性、前驱节点属性以及路径包含权重属性,只有当其它所有节点完成更新后,才单独对宿节点进行更新,宿节点的更新方式包括:根据宿节点邻近节点的路径包含权重属性大小以及距离权重属性大小来更新宿节点的距离权重属性、前驱节点属性以及路径包含权重属性。
118.所述路径规划模块用于将以前驱节点属性为依据、以源节点为起点、以宿节点为终点所形成的当前路径确定为包含多个必经资源的最短路径。
119.本实施例上述各模块为虚拟模块,其功能与实施例1中的方法相对应,对其功能更为具体的说明可参考实施例1,在此就不再赘述。
120.通过本实施例的各个虚拟模块,本实施例的系统能够解决路由计算中必须包含多个资源且需要路径最短的问题。相比于传统的路由计算模式,本实施例同时具备时间复杂度比较低、可以包含多个必经资源、可以找出包含多个必经资源的最短路径的优点。另外,本实施例的计算方法计算的路径不会形成环,可有效解决现有路由计算方式中路径成环的问题。
121.实施例4:
122.在上述实施例1、实施例2提供的包含多个必经资源的最短路径实现方法的基础
上,本发明还提供了一种可用于实现上述方法的包含多个必经资源的最短路径实现装置,如图14所示,是本发明实施例的装置架构示意图。本实施例的包含多个必经资源的最短路径实现装置包括一个或多个处理器21以及存储器22。其中,图14中以一个处理器21为例。
123.处理器21和存储器22可以通过总线或者其它方式连接,图14中以通过总线连接为例。
124.存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1、2中的包含多个必经资源的最短路径实现方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行包含多个必经资源的最短路径实现装置的各种功能应用以及数据处理,即实现实施例1、2的包含多个必经资源的最短路径实现方法。
125.存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其它非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
126.程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1、2中的包含多个必经资源的最短路径实现方法,例如,执行以上描述的图1-图4所示的各个步骤。
127.本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(readonlymemory,简写为:rom)、随机存取存储器(randomaccessmemory,简写为:ram)、磁盘或光盘等。
128.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1