【发布时间】:2012-09-05 09:55:57
【问题描述】:
我正在阅读 Cormen 等人的 Introduction to Algorithms 的动态编程章节。我试图了解如何表征子问题的空间。他们举了两个动态规划的例子。这两个问题都有一个大小为 n 的输入
- 棒材切割问题(最优切割尺寸为n的棒材)
- 矩阵括号问题。(括号矩阵乘积 A1 .A2 .A3 ...An 以最佳方式获得最少数量的标量乘法)
对于第一个问题,他们选择一个形式的子问题,在其中进行长度为 k 的切割,假设切割产生的左子问题不能被进一步切割和正确的子问题可以进一步切割,从而给我们一个大小为 (n-k) 的子问题。
但是对于第二个问题,选择 Ai...Aj 类型的子问题,其中 1
【问题讨论】:
-
在切杆问题中,您可以拥有长度 > 1 的第一根杆,因此可以为问题的前半部分假设固定长度(显然您必须计算最优值k)。在矩阵括号问题中,两个子问题都是复合的:你不能只说“我会在这里剪掉,前半部分我们已经完成了”,因为你也需要在前半部分一直用括号括起来。
标签: algorithm recursion dynamic-programming