有关动态程序问题子集的问题(文本对齐,独木舟出租,杆切割等)

时间:2018-10-25 04:58:36

标签: algorithm dynamic-programming

我知道我的问题的标题很烂,但是我不确定如何措辞更好。我对动态编程还很陌生,但是我觉得自己已经“掌握了”。

无论如何,在学习了一些DP问题之后,我注意到了其中的一部分模式。文字说明,独木舟出租和钓竿切割问题都是“类似”的工作,例如““ i的最佳值”等于“ i”之前的所有最佳值的MAX / MIN +价格(其称赞)。或更正式地说,

DP[i] = MAX/MIN(DP[j] + price(i,j) for j = i-1...0)

我将把重点放在杆切割上,因为它更容易编写并且更广为人知?有人可以说服我为什么以下情况会再次发生吗?

DP[i] = MAX(DP[j] + price(i-j) for j = i-1...0)

我不确定为什么在所有情况下都行得通。这个公式说的是,我们为“ i”能做的最好的事就是我们所能做的一切,而不仅仅是“ i” +赞美的价格。基本上是说,在我们进行了初始切割之后,只能进一步切割“ j”。

但是我可以看到以下原因的原因:

DP[i] = MAX(DP[j] + DP(i-j) for j = i-1...0)

这更有意义。我们在“ i”上能做的最好的事情是我们所能做的最好的事情,而不是“我” +所能做到的最好。 CLRS简要地谈到了这一点,但并未提供任何解释。我一直在玩弄输入的内容,试图找到可以得到AHA时刻的情况,但是到目前为止我还没有做得到。

假设我们输入的内容如下:

DP [11]等于DP [5] + DP [6]

DP [5]等于DP [3] + DP [2]

DP [6]等于DP [4] + DP [2]

现在,如果我们使用DP递归方程找到DP [11],则当J等于5时,我们得到:DP [11] = DP [5] + price(6)//这不会产生最优解,因为DP [6]> price(6)。当J等于5时,也会发生同样的情况。

那么为什么上面的例子永远不会发生?有某种证明吗?

0 个答案:

没有答案