动态编程递归公式

时间:2012-07-10 21:15:34

标签: algorithm dynamic-programming

我正在尝试查看动态编程的一些注释和示例,并且我很难弄清楚它是如何工作的。我会发布问题,然后我遇到困难:

  

给定从左到右排序的点序列p1 =(x1,y1),...,pn =(xn,yn)(即,x1

我认为子问题应该这样划分:

C [i,j] =从p1到pi的多边形链,带有j个边,最小化垂直距离的总和。

然后答案是:C [n,k]

基本情况:C [i,0] = 0

现在我在提出递归公式时遇到了一些困难。我的第一个问题,我是否正确地打破了子问题?这个问题提供了一个暗示,使它看起来像我做的,但我不是100%肯定。如果我是,有关如何继续推导递归公式的任何提示?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的子问题是正确的,但我认为对配方的一些改变可以帮助您提出公式:

不是让C(i, j)表示从j到1的任何从1到i的链,而是具体表示“以i结尾的链”。然后,要确定C(i, j)的答案,您只需要尝试最后一条边开始的所有可能性。

然后答案可能是所有C(i, k)的最佳选择。