Algorithm 每个递归算法都可以用动态规划来改进吗?

Algorithm 每个递归算法都可以用动态规划来改进吗?,algorithm,recursion,dynamic-programming,Algorithm,Recursion,Dynamic Programming,我是CSc一年级本科生,希望进入竞争性编程领域 递归涉及定义和解决子问题。据我所知,自上而下的动态规划(dp)涉及记忆子问题的解决方案,以降低算法的时间复杂度 是否可以使用自顶向下的dp来提高每个具有重叠子问题的递归算法的效率?dp在哪里会失效?我如何确定这一点 简单的回答是:是的 然而,也有一些限制。最明显的一点是递归调用必须重叠。即,在算法执行期间,必须使用相同的参数多次调用递归函数。这使您可以通过记忆来截断递归树。因此,您可以随时使用备忘录来减少通话次数 然而,电话的减少是有代价的。您需要

我是CSc一年级本科生,希望进入竞争性编程领域

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


是否可以使用自顶向下的dp来提高每个具有重叠子问题的递归算法的效率?dp在哪里会失效?我如何确定这一点

简单的回答是:是的

然而,也有一些限制。最明显的一点是递归调用必须重叠。即,在算法执行期间,必须使用相同的参数多次调用递归函数。这使您可以通过记忆来截断递归树。因此,您可以随时使用备忘录来减少通话次数

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