algorithm - 何时使用自下而上 DP 何时使用自上而下 DP

标签 algorithm dynamic-programming

我学过这两种DP方式,现在很迷茫。不同情况下我们如何选择?而且我发现在大多数情况下,自上而下对我来说更自然。谁能告诉我如何做出选择。

PS:这篇文章我看过older post但仍然感到困惑。需要帮忙。不要将我的问题视为重复。我已经提到它们是不同的。我希望知道如何选择以及何时从自上而下或自下而上的方式考虑问题。

最佳答案

为简单起见,我将根据我对一些sources的总结进行解释。

  1. 自上而下:看起来像:a(n) = a(n-1) + a(n-2)。使用此等式,您可以通过使函数 a 调用自身来使用大约 4-5 行代码来实现。正如您所说,它的优势对大多数开发人员来说是非常直观的,但它会花费更多的空间(内存堆栈)来执行。
  2. 自下而上:您首先计算a(0),然后a(1),并将其保存到某个数组(例如),然后你不断地保存a(i) = a(i-1) + a(i-2)。使用这种方法,您可以显着提高代码的性能。使用大的n,可以避免堆栈溢出。

关于algorithm - 何时使用自下而上 DP 何时使用自上而下 DP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897484/

相关文章:

java - 对字符串使用一些特定的附加操作检查它是否可以转换为其他字符串

c++ - 将一种类型映射到另一种类型以使用自己的算法

java - 最长递增子序列的长度

algorithm - Uva 法官 10149,Yahtzee

java - 我有 24 个项目,需要分成 6 组,每组 4 项。我可以使用什么算法来找到所有可能的组合?

arrays - 找出连续元素的最大可能差异之和

algorithm - 寻找动态规划解决方案

algorithm - 无法理解 O(f(n))

algorithm - BST中如何根据后继者获取节点的父节点?

algorithm - 如何评估堆栈溢出前的最大递归调用次数