【发布时间】:2012-09-29 04:51:41
【问题描述】:
随着我对动态规划的了解,我发现在给定情况下开发最优子结构的概念越来越容易。例如,在找到乘以矩阵链的最佳顺序时,我知道(对不起,冗长;它帮助了我)计算 Ai * Ai+1 * ... * Aj 所需的最小乘法数可以找到通过找到 i 和 j 之间的分割/括号放置点 k 最小化 Ai*...Ak 和 Ak+1...*Aj 所需的乘法之和,加上随之而来的成本与实际尺寸。换句话说,M(i,j) = mink(M(i,k) + M(k+1,j) + di-1dkdj)。
同样,在寻找字符串的最长回文子串时,最优子结构是索引 i 和 j 之间的最大长度回文的长度 l[i,j] 并且输入数组要么是 2 + l[i+ 1, j-1],当 i 和 j 处的元素相同并因此可以相加时,否则为 l[i+1, j], l[i, j-1] 的最大值(如果 I混合任何东西......)
但是,在任何情况下,我如何将其转换为算法来找到理想序列的长度,例如上面的,甚至是它的内容?我是否基本上只是运行循环将所有内容制成表格,然后基本上“选择”表格中需要的内容?使用矩阵链,这似乎正是要做什么,但对于回文,我对如何构建循环有点困惑。
谢谢!
【问题讨论】:
标签: algorithm dynamic-programming