解决问题的动态编程技术

时间:2020-07-03 19:23:51

标签: algorithm language-agnostic dynamic-programming

是否可以使用递归+记忆化而不是制表/迭代来解决任何动态编程问题?或存在一些必须使用制表/迭代的问题。

使用递归+记忆法解决任何问题时,我们也可以获得相同的时间复杂度(我知道空间复杂度有所不同,并且还存在递归开销成本)。

1 个答案:

答案 0 :(得分:3)

每个 动态编程问题都可以表示为递归关系 ,可以使用递归+记忆解决,将其转换为制表+迭代

使用制表法解决DP问题时,您可以自下而上解决问题,通常是通过填充n维表来解决。根据表中的结果,然后计算原始问题的解决方案。

使用备注解决DP问题时,可以通过维护已解决的子问题图来完成。在先解决“自上而下”问题(通常递归解决子问题)的意义上说,您自上而下

使用制表+迭代的DP问题的时间复杂度与该解决方案的转换后的等效且正确的记忆+递归版本相同。通常可以通过制表+迭代法找到时间复杂度。另一方面,DP解决方案的备忘录+递归版本更加直观易读。