贪心算法是否也可能是动态规划算法?

时间:2018-08-10 02:43:29

标签: algorithm dynamic-programming greedy

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

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

我了解到,贪婪方法会使用当前的最优解来找到全局最优解,而DP算法会重用重叠的子结果。

我相信答案是“是”,但我找不到贪婪和DP算法都很好的例子。

有人可以给我一个例子吗?

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

3 个答案:

答案 0 :(得分:2)

这是我的理解

贪婪算法和动态算法是两个不同的事物。贪婪算法始终会做出当时似乎最好的选择。新选项弹出后,它将立即做出选择,而不管接下来要发生什么。 动态算法将子程序的解决方案组合起来,以获得最终解决方案。它根据子程序的结果进行决策,并且通常在有变量影响最终解决方案时起作用。因此,这是两种方式的思考。

动态算法总是可以解决贪婪算法可以解决的问题,但是动态算法的时间成本和空间成本要比贪婪算法高得多。贪婪算法大多不能解决DP问题。

所以答案是否定的

答案 1 :(得分:1)

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

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

请参阅:https://en.wikipedia.org/wiki/A*_search_algorithm

答案 2 :(得分:1)

通过查看Bellman方程:

Bellman Equation

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

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

相关问题