所有可以通过贪婪解决的问题都可以通过动态编程来解决

时间:2015-06-07 01:44:27

标签: algorithm

如果可以通过贪心获得问题的最佳解决方案,是否也可以通过动态编程获得?由于greedy和dp都处理子问题的最优解决方案,可以说dp可以解决贪婪可以解决的所有问题吗?

1 个答案:

答案 0 :(得分:1)

比较贪婪和DP就像比较橙子和苹果。但一个简单的思考方式是

贪心方法:选择您认为最佳的方式,假设从长远来看,它将是最佳选择。
例如,当您驾驶并在一条道路上看到交通堵塞时,您可能会走另一条看似空的道路。这可能有效,但是备用道路可能会在拐角处出现更严重的交通堵塞。

另一方面,

动态编程使用内存来存储您之前完成的计算/结果,以便在您下次需要时节省时间。再次使用上述问题,DP解决方案将计算每条道路上的交通量,然后选择能够提供最佳(最佳)时间的道路。

从这个意义上讲,DP更像是分而治之方法,但与记忆。您不会一次又一次地计算子问题的结果。

并回答你的问题

  

可以安全地说dp可以解决贪婪可以解决的所有问题

我认为可以安全地说dp可以解决分而治之所能解决的所有问题(虽然可能需要更多的内存)

在我可以想到的所有例子中, DP可以为最佳解决方案提供最佳解决方案,这些问题可以通过贪婪最佳地解决(DP可能需要指数时间,但几乎每个案例DP将占用更多内存。)