一个5段图。
求一条从 s s s 到 t t t 的成本最小的路径。
多段图问题满足最优性原理。
证明:反证法。
设 s , ⋯ , V i p , ⋯ , V j q , ⋯ , t s,\cdots,V_{i_p},\cdots,V_{j_q},\cdots,t s,⋯,Vip,⋯,Vjq,⋯,t 是一条从 s s s 到 t t t 的最短路径,但其子路径 V i p , ⋯ , V j q , ⋯ , t V_{i_p},\cdots,V_{j_q},\cdots,t Vip,⋯,Vjq,⋯,t 不是最优的。假设最优路径是 V i p , ⋯ , V j q ′ , ⋯ , t V_{i_p},\cdots,V_{j_q}',\cdots,t Vip,⋯,Vjq′,⋯,t,重新构造一条路径 s , ⋯ , V i p , ⋯ , V j q ′ , ⋯ , t s,\cdots, V_{i_p},\cdots,V_{j_q}',\cdots,t s,⋯,Vip,⋯,Vjq′,⋯,t,显然,该路径长度小于 s , ⋯ , V i p , ⋯ , V j q , ⋯ , t s,\cdots,V_{i_p},\cdots,V_{j_q},\cdots,t s,⋯,Vip,⋯,Vjq,⋯,t。与 s , ⋯ , V i p , ⋯ , V j q , ⋯ , t s,\cdots,V_{i_p},\cdots,V_{j_q},\cdots,t s,⋯,Vip,⋯,Vjq,⋯,t 是从 s s s 到 t t t 的最短路径相矛盾,所以原问题满足最优性原理。
递归式推导:
设
c
o
s
t
(
i
,
j
)
cost(i, j)
cost(i,j) 是结点
V
i
V_i
Vi 中结点
V
i
j
V_{i_j}
Vij 到结点
t
t
t 的最小成本路径的成本,递归式为:
c
o
s
t
(
i
,
j
)
=
{
c
(
j
,
t
)
i
=
t
−
1
m
i
n
{
v
l
∈
V
i
+
1
}
{
c
(
j
,
l
)
+
c
o
s
t
(
i
+
1
,
l
)
}
1
≤
i
<
t
−
1
cost(i, j)=\begin{cases} c(j, t) & i = t - 1 \\ min_{\{v_l \in V_{i+1}\}}\{c(j, l)+cost(i+1,l)\} & 1 \le i \lt t-1\\ \end{cases}
cost(i,j)={c(j,t)min{vl∈Vi+1}{c(j,l)+cost(i+1,l)}i=t−11≤i<t−1
计算过程:
-
c o s t ( 4 , 9 ) = c ( 9 , 12 ) = 4 cost(4, 9)=c(9, 12) = 4 cost(4,9)=c(9,12)=4;
- cost(4, 9):4 代表 V 4 V_4 V4 那一列,9 代表 V 4 V_4 V4 那一列的结点 9。
- c(9, 12):9 代表结点 9,12 代表结点 12。
-
c o s t ( 4 , 10 ) = c ( 10 , 12 ) = 2 cost(4,10)= c(10, 12) = 2 cost(4,10)=c(10,12)=2;
-
c o s t ( 4 , 11 ) = c ( 11 , 12 ) = ∞ cost(4,11)= c(11, 12) = \infty cost(4,11)=c(11,12)=∞;
-
c o s t ( 3 , 6 ) = m i n { c ( 6 , 9 ) + c o s t ( 4 , 9 ) , c ( 6 , 10 ) + c o s t ( 4 , 10 ) } = m i n { 6 + 4 , 5 + 2 } = 7 cost(3, 6) = min\{c(6, 9)+cost(4, 9), c(6, 10) + cost(4, 10)\} = min\{6+4, 5+2\} = 7 cost(3,6)=min{c(6,9)+cost(4,9),c(6,10)+cost(4,10)}=min{6+4,5+2}=7;
- c(6, 9)+cost(4, 9):从6-9-12这条路线
- c(6, 10) + cost(4, 10):从6-10-12这条路线
-
…
-
c o s t ( 1 , 1 ) = m i n { 9 + c o s t ( 2 , 2 ) , 7 + c o s t ( 2 , 3 ) , 3 + c o s t ( 2 , 4 ) , 2 + c o s t ( 2 , 5 ) } = 16 cost(1,1)=min\{9+cost(2,2),7+cost(2,3),3+cost(2,4),2+cost(2,5)\}=16 cost(1,1)=min{9+cost(2,2),7+cost(2,3),3+cost(2,4),2+cost(2,5)}=16
构造解:解1(1, 2, 7, 10, 12),解2(1, 3, 6, 10, 12)。