我在想是否有某种通用的方法可以将自顶向下的动态编程转换为自下而上的编程。
我们能不能想出一些机制,给出一种形式化的方法,通过这种方法,我们可以将自顶向下的dp转换为自下而上的dp。
注意:我是动态程序设计的初学者,我所看到的一些问题中,自上而下的方法转换为自下而上的方法是非常不同的。所以我不确定是否可以用一种广义的方法。
一般来说,我的意思是数组应该如何初始化,数组的大小应该是多少,数组应该有多少维。

最佳答案

动态程序的执行可以看作是一个有向无环图,其中每个顶点都是一个子问题,而弧表示计算另一个子问题的解需要特定子问题的解。一个自上而下的带有记忆的递归程序所做的,本质上是通过深度优先搜索从根问题中获得的图的子图的拓扑排序。要将其转换为自下而上的方法,您需要自己制定一个合适的拓扑顺序,每个问题的拓扑顺序都会有所不同。

08-25 08:06