Dijkstra算法属于贪心算法还是动态规划?

Dijkstra算法属于贪心算法,以下根据个人理解进行分析,如有理解不当之处,还请不吝赐教!

使用动态规划有两个必要条件:

  • 最优子结构:整体的最优解对应着每个子问题的最优解
  • 无后效性:已经求解的子问题不受后续决策影响

另外,通过将子问题的解储存起来供后续求解使用,可以大大提高运行效率。

再看Dijkstra算法,假设我们要求解节点s到x的最短路径。如果以每一步寻找源节点最近节点为子问题,则不满足无后效性。可参考上图第二行前两张图,在前一个子问题我们找到z节点是距离s的最近节点,按照动态规划的逻辑,我们可以在此子问题最优解的基础上找到到节点x的最短路径。然而下一问题的解则抛弃了z节点转向了t节点,最后证明s->y->t->x才是最短路径。

假如我们改成以求解最短路径末尾的上一节点为子问题,则面临根本无法求解子问题的情况,因为我们无法预先知道哪个节点距离源节点s是最近的。

综上,迪杰克斯特拉算法属于贪心算法而非动态规划算法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值