Multi-stage graph多级图求最短路径问题(前向+后向)

这篇博客介绍了如何使用前向和后向算法来求解多级图中从起点到终点的最短路径。前向算法从源点开始逐级向前计算最小成本,而后向算法则从目标节点开始向源点反向求解。通过举例展示了算法的具体步骤,并提供了计算过程。
摘要由CSDN通过智能技术生成

1.多级图问题
(1)多级图问题是找到从源到目标结点的最低成本。
(2)多级图是具有k个多级的有向图,其中级元素应连续连接。
(3)在此多阶段图中,存在一个度为0的顶点(称为)。 只有一个度数为0的顶点称为目标顶点
2.问题描述
Given the multi-stage graph below, use forward and backward approaches to obtain the shortest path from the origin (point 1) to the destination (point 12) of the multi-stage graph.
【给定下面的多级图,使用前向和后向的方法得到从多级图的起点(点1)到终点(点12)的最短路径。】
在这里插入图片描述
3.问题分析
(1)对于每一条从Point 1到Point 12的路径,可以把它看成在k-2个阶段中作出的某个决策序列的相应结果。
4.前向(向前)(Algorithm for Forward Approach)
(1)顾名思义,就是从后不断向前(向源点)求最小成本路径
(2)一些符号说明(以下符号为在前向算法中的含义):
Vi:第i级的节点集合,如V1={1},V2={2,3,4},…
C(a,b):从a点到b点的成本(a∈Vi,b∈Vi+1,即a b结点是相邻两个阶段的点)
Cost(a):以a点为源,到目标节点的最小成本,a=1,2,3,…12。(由于上图中节点是有序号代表的,所以Cost()只用了1个参数,如果没有序号,也可以用Cost(i,j)代表第i级的第j个节点)
P(a):代表以a为源,到目标节点最小成本的路径。
(3)算法抽象:
Cost(a)=min{ c(a,b)+Cost(b) },a∈Vi,b∈Vi+1
如:
Cost(5)=min{ c(5,9)+Cost(9),c(5,10)+Cost(10)}
因为c(5,9)+Cost(9)=13,c(5,10)+Cost(10)=11
所以Cost(5)=11,P(5)=5–>10–>12。
在这里插入图片描述
(4)算法解决流程:
首先对所有的a∈Vk-2,计算Cost(a)和P(a)
然后对所有得a∈Vk-3,计算Cost(a)和P(a)

最后计算a∈V1,计算Cost(1)和P(1)
(5)解题

a过程Cost(a)P(a)
5min{ c(5 ,9 ) +Cost(9), c(5 ,10) +Cost(10) }=min{13,11}115–>10–>12
6min{ c( 6,10 )+Cost( 10) }=min{10}106–>10–>12
7min{ c(7,11 )+Cost( 11) } =min{6}67–>11–>12
8min{ c(8,10)+Cost(10) , c(8,11)+Cost(11) } =min{10,8}88–>11–>12
2min{ c(2,5)+Cost(5) , c(2,6)+Cost(6) } =min{4+11,2+10}122–>6–>10–>12
3min{ c(3,6)+Cost(6) }=min{3+10}133->6–>10–>12
4min{ c(4,7)+Cost(7) , c(4,8)+Cost(8) }=min{7+6,8+8}134–> 7–>11–>12
1min{ c(1,2)+Cost(2) ,c(1,3)+Cost(3) , c(1,4)+Cost(4)} =min{6+12,5+13,4+13}171–>4–> 7–>11–>12

在这里插入图片描述
5.后向(向后)(Algorithm for Backward Approach)
(1)顾名思义,就是从前不断向后(向目标节点)求最小成本路径
(2)一些符号说明(以下符号为在前向算法中的含义):
Vi:第i级的节点集合,如V1={1},V2={2,3,4},…
C(a,b):从a点到b点的成本(a∈Vi,b∈Vi+1,即a b结点是相邻两个阶段的点)
Cost(a):以问题源点为源点,a点为目标节点得最小成本,a=2,3,…12。(由于上图中节点是有序号代表的,所以Cost()只用了1个参数,如果没有序号,也可以用Cost(i,j)代表第i级的第j个节点)
P(a):代表以问题源点为源点到以a为目标节点的最小成本的路径。
(3)算法抽象:
Cost(b)=min{ c(a,b)+Cost(a) },a∈Vi-1,b∈Vi
如:
Cost(6)=min{ c(2,6)+Cost(2),c(3,6)+Cost(3)}
因为c(2,6)+Cost(2)=8,c(3,6)+Cost(3)=8
所以Cost(6)=8,P(6)=1–>2–>6或1–>3–>6。
在这里插入图片描述
(4)算法解决流程:
首先对所有的a∈V3,计算Cost(a)和P(a)
然后对所有得a∈V4,计算Cost(a)和P(a)

最后计算a∈Vk,计算Cost(a)和P(a)
(5)解题

a过程Cost(a)P(a)
5min{ c(2 ,5 ) +Cost(2) }=min{10}101–>2–>5
6min{ c( 2,6 )+Cost( 2) ,c( 3,6 )+Cost( 3)}=min{8,8}81–>2–>6 或1–>3–>6
7min{ c(4,7 )+Cost( 4) } =min{11}111->4–>7
8min{ c(4,8)+Cost(4) } =min{12}121–>4–>8
9min{ c(5,9)+Cost(5)} =min{4+10}141–>2–>5 -->9
10min{ c(5,10)+Cost(5),c(6,10)+Cost(6),c(8,10)+Cost(8) }=min{7+10,6+8,6+12}141–>2–>6 -->10或1–>3–>6 -->10
11min{ c(7,11)+Cost(7) , c(8,11)+Cost(8) }=min{3+11,5+12}141->4–>7–>11
12min{ c(9,12)+Cost(9) ,c(10,12)+Cost(12) , c(11,12)+Cost(12)} =min{9+14,4+14,3+14}171–>4–> 7–>11–>12

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值