【问题标题】:What is the difference between dynamic programming and greedy approach?动态规划和贪婪方法有什么区别?
【发布时间】:2013-05-17 09:57:58
【问题描述】:

就使用而言,动态规划和贪心方法的主要区别是什么?

据我了解,贪婪方法有时会给出最佳解决方案;在其他情况下,动态规划 方法给出了最优解。

为了使用一种方法(或另一种方法)来获得最佳解决方案,是否必须满足任何特定条件?

【问题讨论】:

标签: algorithm dynamic graph greedy


【解决方案1】:

基于维基百科的文章。

贪婪方法

贪心算法是一种遵循问题解决启发式的算法 每个阶段的局部最优选择,希望找到全局最优。在 很多问题,贪心策略通常不会产生最优解,但贪心启发式算法可能会产生局部最优解,在合理的时间内逼近全局最优解。

我们可以做出目前看起来最好的任何选择,然后解决以后出现的子问题。 贪心算法做出的选择可能取决于目前所做的选择但不取决于未来的选择或子问题的所有解决方案。它迭代地做出一个又一个的贪心选择,将每个给定的问题缩减为一个更小的问题。

动态编程

动态编程背后的想法非常简单。一般来说,要解决一个给定的问题,我们需要解决问题的不同部分(子问题),然后将子问题的解决方案结合起来,得到一个整体解决方案。通常,当使用更幼稚的方法时,会多次生成和解决许多子问题。动态规划方法寻求解决每个子问题只解决一次,从而减少计算次数:一旦计算出给定子问题的解决方案,它就会被存储或“备忘录” -ized":下次需要相同的解决方案时,只需查找即可。当重复子问题的数量作为输入大小的函数呈指数增长时,这种方法特别有用。

区别

贪婪选择属性

我们可以做出目前看起来最好的任何选择,然后解决以后出现的子问题。贪心算法做出的选择可能取决于到目前为止所做的选择,但不取决于未来的选择或子问题的所有解决方案。它迭代地做出一个又一个贪婪的选择,将每个给定的问题减少为一个较小的问题。换句话说,贪心算法永远不会重新考虑它的选择。

这是与动态规划的主要区别,动态规划是详尽无遗的,保证能找到解决方案。在每个阶段之后,动态规划都会根据前一阶段做出的所有决策做出决策,并且可能会重新考虑前一阶段的算法路径来解决问题。

例如,假设您必须在给定城市的高峰时段尽可能快地从 A 点到达 B 点。动态规划算法将查看整个交通报告,查看您可能采取的所有可能的道路组合,然后才会告诉您哪种方式最快。当然,您可能需要等待一段时间,直到算法完成,然后才能开始驾驶。您将采取的路径将是最快的路径(假设外部环境没有任何变化)。

另一方面,贪心算法会立即让您开始驾驶,并会在每个路口选择看起来最快的道路。正如您可以想象的那样,这种策略可能不会导致最快的到达时间,因为您可能会走一些“轻松”的街道,然后发现自己陷入了交通堵塞。

其他一些细节...

在数学优化中,贪心算法解决具有matroids 属性的组合问题。

动态规划适用于表现出重叠子问题和最优子结构的性质的问题

【讨论】:

    【解决方案2】:

    我想引用一段描述 贪婪算法动态规划算法 在 Cormen 的书 Introduction to Algorithms (3rd edition) 第 15.3 章第 1 页中所述的主要区别381:

    贪心算法动态规划之间的一个主要区别在于,贪心算法不是首先找到子问题的最优解,然后做出明智的选择,而是首先做出一个贪婪的选择,当时看起来最好的选择,然后解决一个结果子问题,而无需解决所有可能相关的较小子问题。

    【讨论】:

      【解决方案3】:

      贪心法和动态规划的区别如下:

      1. 贪婪方法永远不会重新考虑其选择,而动态编程可能会考虑之前的状态。

      2. 贪婪算法效率较低,而动态编程效率更高。

      3. 贪心算法对子问题有一个局部选择,而动态编程将解决所有子问题,然后选择一个会导致最佳解决方案的子问题。

      4. 贪心算法一次做出决定,而动态编程在每个阶段都做出决定。

      【讨论】:

        【解决方案4】:

        简单来说我们可以说在Dynamic Programming(网络发送消息有问题)可以先检查耗时最短的路径,然后开始旅程,

        另一方面Greedy algorithm当场拿下optimal decision,不考虑下一步,在下一步再次改变决定等等......

        Notes: Dynamic programming 是可靠的,而贪心算法并不总是可靠的。

        【讨论】:

          【解决方案5】:

          参考 Biswajit Roy: 动态规划首先计划然后围棋。 和 贪心算法采用贪心选择,先Go,再连续Plans。

          【讨论】:

            【解决方案6】:

            贪婪方法和动态规划之间的主要区别在于,贪婪方法只能生成一个最优决策序列,而动态规划可以生成多个最优决策序列。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-08
              • 1970-01-01
              • 2015-01-07
              • 1970-01-01
              • 2013-05-24
              • 2015-01-12
              • 1970-01-01
              • 2023-04-03
              相关资源
              最近更新 更多