【问题标题】:Is it possible that a greedy algorithm is also a dynamic programming algorithm?贪心算法是否可能也是动态规划算法?
【发布时间】:2018-08-10 02:43:28
【问题描述】:

greedy 算法是否可能也是dynamic programming 算法?

我参加了Analysis of Algorithms 课程,但我仍然不确定这两个概念。

我理解贪心方法使用当前最优解来寻找全局最优解,DP算法重用重叠的子结果。

我相信答案是“是”,但我找不到一个既是贪婪算法又是 DP 算法的好例子。

谁能给我一个例子?

如果上述问题的答案是“否”,那么有人可以向我解释为什么吗?

【问题讨论】:

标签: algorithm dynamic-programming greedy


【解决方案1】:

从贝尔曼方程看:

如果在最小化中我们可以将 f 部分(当前周期)与 J 部分(从先前周期优化)分开,那么这恰好对应于贪婪方法。一个简单的例子是,当优化函数是每个时期的成本之和时,

J(u1,u2,...)= sum(f_i(u_i)).

【讨论】:

    【解决方案2】:

    这是我的理解

    贪心算法和动态算法是两个不同的东西。贪心算法总是做出当时看起来最好的选择。无论接下来会发生什么,它都会在新选项弹出时立即做出选择。 动态算法是结合子程序的解得到最终解。它根据子程序的结果做出决定,通常在存在影响最终解决方案的变量时起作用。所以,这是两种思维方式。

    动态算法总是工作在贪心算法可以解决的问题上,但动态算法的时间成本和空间成本远高于贪心算法。贪心算法大多不能解决DP问题。

    所以答案是否定的

    【讨论】:

      【解决方案3】:

      在优化算法中,贪心法和动态规划法基本上是对立的。贪心方法是选择局部最优选项,而动态规划的全部目的是有效地评估整个选项范围。

      但这并不意味着您不能拥有一种可以同时利用这两种策略的算法。例如,A* 寻路算法就是这样做的,它既是贪心算法又是动态规划算法。它使用贪心方法优化最佳情况,使用动态规划方法优化最坏情况。

      见:https://en.wikipedia.org/wiki/A*_search_algorithm

      【讨论】:

        猜你喜欢
        • 2012-12-11
        • 2016-04-17
        • 2011-09-03
        • 2012-03-26
        • 2013-11-27
        • 1970-01-01
        相关资源
        最近更新 更多