随着我对动态规划的理解,我发现在给定情况下开发最优子结构的概念越来越容易。例如,在找到乘以矩阵链的最佳顺序时,我知道(对不起,冗长;它帮助了我)计算 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] 的最大值(如果我混淆了任何内容,请纠正我...)
但是,在任何情况下,我如何将其转换为算法来找到理想序列的长度,例如上面的,甚至是它的内容?我是否基本上只是运行循环将所有内容制成表格,然后基本上“选择”表格中需要的内容?使用矩阵链,这似乎正是要做什么,但对于回文,我对如何构建循环有点困惑。
谢谢!