当前位置:   article > 正文

动态规划算法的例子:最短路径问题_动态规划算法最短路径daima

动态规划算法最短路径daima

1. 问题

输入:
起点集合{S1,S2,… ,Sn}
终点集合{T1,T2,… ,Tm}
中间结点集
边集E,每条边都有相应的长度
输出:
一条从起点到终点的最短路 (从任意一个起点到任意一个终点,只要是最短路就行)

1.1 实例


绿色的为起点
黄色的为终点
灰色的为中间结点
连接的线为边集,边上的数字为长度
在这里插入图片描述
红线的两条路径都是最短的

2. 算法设计

2.1 蛮力算法

  • 考查每一条从某个起点到某个终点的路径,计算长度,从中找出最短路径

在上述实例中,如果网络的层数为k,那么路径条数将接近于2k(每经过一个节结点有两条路)

2.2 动态规划算法:多阶段决策过程

每步求解的问题是后面阶段求解问题的子问题,每步决策将依赖于以前步骤的决策结果 (挑出子问题中的好的结果)

  • 阶段一,考查后面子问题C的选择
    在这里插入图片描述
  1. 先看C1,走上面好
  2. C2,走下面好
  3. C3都一样
  4. C4,走上面好
    在这里插入图片描述
    (图上为字母为up,down)
  • 阶段二,考查B的选择 (考查B的时候还要连带着对C的分析,所以下图比如B1上面写的距离是11)
    在这里插入图片描述
  • 最终在这里插入图片描述

2.3 总结

2.3.1 子问题界定

后边界不变,前边界前移
在这里插入图片描述

2.3.2 最短路径的依赖关系(算法关键)

在这里插入图片描述

2.3.3 优化原则:最优子结构性质

  • 一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列
    在这里插入图片描述
    如上图子问题就是最优的

2.3.4 一个反例

在这里插入图片描述
即求总长度除以10得到的余数最小

  • 蓝色按照动态规划,每个子问题都是mod10后最优的决策
  • 红色为实际
    在这里插入图片描述

不满足优化原则(子问题最优全局不一定优)不能用动态规划

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/882960
推荐阅读
相关标签
  

闽ICP备14008679号