【问题标题】:Can every recursive algorithm be improved with dynamic programming?可以通过动态规划改进每个递归算法吗?
【发布时间】:2015-12-31 09:03:28
【问题描述】:

我是一名第一年的本科 CSc 学生,希望进入有竞争力的编程领域。

递归涉及定义和解决子问题。据我了解,自上而下的动态规划(dp)涉及记忆子问题的解决方案以降低算法的时间复杂度。

可以使用top down dp来提高每个子问题重叠的递归算法的效率吗? dp 在哪里无法工作,我该如何识别?

【问题讨论】:

    标签: algorithm recursion dynamic-programming


    【解决方案1】:

    简短的回答是:是的。

    但是,有一些限制。最明显的一个是递归调用必须重叠。 IE。在算法执行过程中,递归函数必须以相同的参数多次调用。这使您可以通过记忆截断递归树。因此,您始终可以使用 memoization 来减少调用次数。

    但是,减少来电是有代价的。您需要将结果存储在某处。下一个明显的限制是您需要有足够的内存。这带有一个不那么明显的约束。内存访问总是需要一些时间。您首先需要找到结果的存储位置,然后甚至可能将其复制到某个位置。所以在某些情况下,让递归计算结果而不是从某个地方加载它可能会更快。但这是非常特定于实现的,甚至可能取决于操作系统和硬件设置。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2013-11-14
      • 2012-07-10
      • 2021-02-21
      相关资源
      最近更新 更多