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

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后最优的决策
  • 红色为实际
    在这里插入图片描述

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值