动态规划问题理解

今天和杨哥、蒋、章师兄突然间讨论到了动态规划, 半天搞不出来,于是乎查了一些资料,理解如下:

动态规划的三个性质

  1. 最优子问题:A到C的最优解中的B到C的那一段也一定是B到C的最优解
  2. 无后效性:A到B的问题和B到C的问题无耦合,可以分别单独求解
  3. 重叠子问题:A到B和B到C的问题属于一类问题,可以用同一套公式写出

下面看两类代表性的动态规划问题

gridworld类型

一种gridworld类型的问题
如上图,从左上角到右下角求一条权值和最短的路径(在一般的走迷宫问题中,全是权值为1即可)
做法注意事项:

  1. 首先推出:每一次一定是只能向下或者向右走,向左或者向上一定会有比它更优的路径;
  2. 其次,动态规划的状态怎么设?每个点(i, j)设一个状态!
  3. 最后,状态一定要有一个含义,这里令状态为D[i, j],表示从起点到(i, j)的最短路径所需要的距离;

搞清楚了这三点,按照动态规划的通用套路,我们需要找出子问题是啥。这里,子问题就是从上到下、从左到右一个一个算出一个新的D[i, j]。则可以知道递推公式为:
D [ i , j ] = m i n { D [ i − 1 , j ] , D [ i , j − 1 ] } + ( i , j ) 点 的 费 用 D[i, j] = min\{D[i-1, j], D[i, j-1]\} + (i, j)点的费用 D[i,j]=min{D[i1,j],D[i,j1]}+(i,j)
那么,我们从起点出发,先算第一排:
在这里插入图片描述
再算第一列:
在这里插入图片描述
然后一个一个算即可:
在这里插入图片描述

网络图结构类型

这类问题如下图,我们还是要算从A到G的最短路径
在这里插入图片描述
按照上面的经验,最关键的问题其实是明确“”“阶段是什么,状态的含义是什么”。这里,由图本身的结构,我们很容易想到,阶段就是A、B……G,而每个点的状态表示的意思就是“从该点开始到G的最短路径距离”。

于是,DP的过程就是一个一个点算出它的最短路径距离。那么,一种从后往前的DP方法可以是:(也可从前往后)

  1. 先在G
  2. 到下一阶段F,算出F1和F2的最短距离分别是4,3;
  3. 到E,根据无后效性,F1和F2的值已经不变了,只需要在此基础上算出E1/E2/E3的最短距离即可,如E1: m i n { 3 + 4 , 5 + 3 } = 7 min\{3+4, 5+3\}=7 min{3+4,5+3}=7
  4. 重复往前,直到A
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值