dijkstra算法、动态规划与贪心

dijkstra算法属于贪心,而不是动态规划。

所谓无后效性,是指状态一旦确定,就不会因为后续的、未来的决策所改变,也即影响状态决策的只有前效,没有后效。
而这里的“后续”一词,天然隐含地要求你找到一个“处理顺序”,结合状态转移方程,共同对“状态”进行决策。
因此,你必须先根据最优子结构的思想,把问题分解为子问题,然后假设这些子问题的状态在此之前全部已确定,写出状态转移方程。
其次,你必须找到一个“处理顺序”,实现“子问题的状态在此之前全部已确定”。
最后才能判断“状态”是否具有无后效性,如果你找到得到状态转移方程和处理顺序,那么便具有无后效性,否则不具备。

【尝试用动态规划解决单源最短路径问题】
状态转移方程:d[e] = min{ d[a]+graph[a][e], d[b]+graph[b][e], d[c]+graph[c][e], … }
易知边界条件,d[S]=0。
方程中a, b, c都是与e相邻的、最短距离全都已知的点。
但无法找到一个处理顺序,保证每一次处理新的点时,其相邻点状态在此之前都全部确定。

【dijkstra算法】
实际上,每次确定状态时,具体确定谁的状态是无法在计算之前知道的,算法实际操作中,首先确定中介点,然后更新d[]数组,里面谁最小就确定了谁的状态。因此这里没有确定处理的“顺序”,dijkstra算法的思想不完全符合动态规划。

【不用动态规划求解】
既然无法在一次遍历中求解,那么可以多次循环,不断更新最小值,直到无法再小,这就是Bellman Ford算法,Floyd算法了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值