问题有哪些属性,以便我可以决定使用动态编程或贪婪方法的方法?
答案 0 :(得分:8)
动态编程问题表现出最佳的子结构。这意味着问题的解决方案可以表示为严重较小的子问题解决方案的函数。
此类问题的一个例子是matrix chain multiplication。
只有当局部最优选择导致完全最优解时,才能使用贪心算法。这可能很难立即看到,但通常更容易实现,因为您只需要考虑一件事(贪婪的选择)而不是多个(所有较小的子问题的解决方案)。
一个着名的贪婪算法Kruskal's algorithm用于查找最小生成树。
答案 1 :(得分:1)
第二版Cormen,Leiserson,Rivest和Stein的算法书中有一节(16.4)标题为“贪婪方法的理论基础”,讨论贪婪方法何时产生最佳解决方案。它涵盖了许多具有实际意义的案例,但并非所有产生最佳结果的贪婪算法都可以用这一理论来理解。
我还发现了一篇名为“从动态编程到贪婪算法”的文章链接here,它谈到了某些贪婪算法,可以看作是动态编程的改进。从快速扫描中,您可能会感兴趣。
答案 2 :(得分:0)
知道它真的有严格的规则。正如有人已经说过的那样,有些事情应该开启红灯,但最后,只有经验才能告诉你。
答案 3 :(得分:0)
当可以对每个阶段的可用本地信息做出决定时,我们应用贪心方法。我们确信在每个阶段的决策集合之后,我们将找到最佳解决方案。 然而,在动态方法中,我们可能不确定在一个阶段做出决定,因此我们进行了一系列可能的决策,其中一个可能的元素可能会采取解决方案。