如何设计/单词动态编程子问题?

时间:2016-03-24 01:40:46

标签: algorithm computer-science dynamic-programming

我正在尝试自下而上的动态编程方法,我遇到了一些问题。

我已经学会通过将先前计算的值存储在1D或2D阵列中并在必要时引用它们来达到所需的解决方案。问题是我无法使用存储在我的数组中的值进行回溯。

例如,如果问题是经典的“最长子序列”,那么问题,我可以得到最长子序列的值,但是我无法回溯存储的值并找到子序列中出现的字母/数字。

我已经完成了很多大学课程教程和youtube教程,但似乎没有人解释一个人如何能够' word'子问题正确。

是否有人提供有关如何制作子问题和维护数组值的提示,以便可以轻松地进行回溯?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是保留第二个与第一个数组具有相同尺寸的数组,并将其称为index数组,并使用它来跟踪有助于您选择的元素的位置。

所以在第二个例子中:
A成为标准的动态编程数组 设I为索引数组

如果值A[x,y]A[x0,y0]决定,则为I[x,y]=(x0,y0)

尝试从A[i,j]回溯时,访问I[i,j]以查找回溯链中的下一个元素。

您可以使用数组I的默认值,以便知道何时到达链的末尾。