你能指点一些动态编程问题陈述,其中自下而上比自上而下更有利吗? (即简单的DP工作更自然,但记忆难以实现?)
我发现记忆的递归更加容易,并希望解决自下而上是更好/可能唯一可行方法的问题。
我理解理论上两者都是等价的,所以即使是易于实施的东西也算是一种好处。
答案 0 :(得分:4)
根据手头的问题,您将自下而上应用memoization或自上而下的递归和memoization。
例如,如果必须找到路径图的最小权重无关路径,则必须使用自底向上方法,因为必须解决所有可能的子问题。
但是如果你必须解决背包问题,你可能想要使用递归自上而下的memoization,因为你必须解决有限数量的子问题。自下而上接近背包问题将导致算法解决许多原始子问题中未使用的冗余问题。
答案 1 :(得分:0)
决定使用哪种算法时需要考虑的两件事
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
,我们只需要存储过去的两次计算话虽如此,自下而上并不总是最佳选择,我将尝试用例子说明:
nmlog(nm)
预处理时间