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) |
---|---|---|---|
5 | min{ c(5 ,9 ) +Cost(9), c(5 ,10) +Cost(10) }=min{13,11} | 11 | 5–>10–>12 |
6 | min{ c( 6,10 )+Cost( 10) }=min{10} | 10 | 6–>10–>12 |
7 | min{ c(7,11 )+Cost( 11) } =min{6} | 6 | 7–>11–>12 |
8 | min{ c(8,10)+Cost(10) , c(8,11)+Cost(11) } =min{10,8} | 8 | 8–>11–>12 |
2 | min{ c(2,5)+Cost(5) , c(2,6)+Cost(6) } =min{4+11,2+10} | 12 | 2–>6–>10–>12 |
3 | min{ c(3,6)+Cost(6) }=min{3+10} | 13 | 3->6–>10–>12 |
4 | min{ c(4,7)+Cost(7) , c(4,8)+Cost(8) }=min{7+6,8+8} | 13 | 4–> 7–>11–>12 |
1 | min{ c(1,2)+Cost(2) ,c(1,3)+Cost(3) , c(1,4)+Cost(4)} =min{6+12,5+13,4+13} | 17 | 1–>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) |
---|---|---|---|
5 | min{ c(2 ,5 ) +Cost(2) }=min{10} | 10 | 1–>2–>5 |
6 | min{ c( 2,6 )+Cost( 2) ,c( 3,6 )+Cost( 3)}=min{8,8} | 8 | 1–>2–>6 或1–>3–>6 |
7 | min{ c(4,7 )+Cost( 4) } =min{11} | 11 | 1->4–>7 |
8 | min{ c(4,8)+Cost(4) } =min{12} | 12 | 1–>4–>8 |
9 | min{ c(5,9)+Cost(5)} =min{4+10} | 14 | 1–>2–>5 -->9 |
10 | min{ c(5,10)+Cost(5),c(6,10)+Cost(6),c(8,10)+Cost(8) }=min{7+10,6+8,6+12} | 14 | 1–>2–>6 -->10或1–>3–>6 -->10 |
11 | min{ c(7,11)+Cost(7) , c(8,11)+Cost(8) }=min{3+11,5+12} | 14 | 1->4–>7–>11 |
12 | min{ c(9,12)+Cost(9) ,c(10,12)+Cost(12) , c(11,12)+Cost(12)} =min{9+14,4+14,3+14} | 17 | 1–>4–> 7–>11–>12 |