本文介绍应用动态规划算法求解最短路问题的案例。
其他动态规划的应用实例:
动态规划的应用(二):cutting stock 问题
动态规划的应用(三):字符串相关问题
动态规划的应用(四):LeetCode 1900. 最佳运动员的比拼回合
动态规划的应用(五):LeetCode 413, 446. 等差数列划分
动态规划的应用(六):矩阵相关问题
例
求从节点 1 到 7 的最短路径:
前向递归(forward recursion)
递归方程:
f i ( x i ) = min a l l f e a s i b l e ( x i − 1 , x i ) r o u t e s { d ( x i − 1 , x i ) + f i − 1 ( x i − 1 ) } i = 1 , 2 , 3 f_i(x_i) = \min_{all feasible \ (x_{i-1}, x_i) \ routes} \{ d(x_{i-1}, x_i) + f_{i-1}(x_{i-1}) \} \quad i = 1, 2, 3 fi(xi)=allfeasible (xi−1,xi) routesmin{
d(xi−1,xi)+fi−1(xi−1)}i=1,2,3
stage 1:
(略)
stage 2:
节 点 1 到 节 点 5 的 最 短 距 离 = min i = 2 , 3 , 4 ( 节 点 1 到 节 点 i 的 最 短 距 离 + 节 点 i 到 节 点 5 的 最 短 距 离 ) = min { 7 + 12 = 19 8 + 8 = 16 5 + 7 = 12 } = 12 ( 由 节 点 4 ) \begin {aligned} 节点 1 到节点 5 的最短距离 &= \min_{i=2,3,4} (节点 1 到节点 i 的最短距离 + 节点 i 到节点 5 的最短距离) \\ &= \min \left\{ \begin{matrix} 7 + 12 = 19 \\ 8 + 8 = 16 \\ 5 + 7 = 12 \end{matrix} \right\} = 12 \ (由节点 4) \end {aligned} 节点1到节点5的最短距离=i=2,3,4min(节点1