16
三、备忘录方法
•备忘录方法的控制结构与直接递归方法的控制结构相同,区别
在于备忘录方法为每个解过的子问题建立了备忘录以。
m0
int lookupChain(int i, int j)
{
if (m[i][j] > 0) return m[i][j];
if (i == j) return 0;
用动态规划算法解此问题,可依据其递归式以自底向 上的方式进行计算。在计算过程中,保存已解决的子 问题答案。每个子问题只计算一次,而在后面需要时 只要简单查一下,从而避免大量的重复计算,最终得 到多项式时间的算法
13
用动态规划法求最优解
void matrixChain(int [ ] p, int[][ ] m, int [ ][ ] s)
设有四个矩阵 A,B,C,,它D们的维数分别是:
A5010B1040C4030D305
总共有五中完全加括号的方式
(A((BC)D)) (A(B(CD))) ((AB)(CD)) ((A( B)C)D) ((A(BC))D)
16000, 10500, 36000, 87500, 34500 7
矩阵连乘问题
• 给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的 子序列时,称Z是序列X和Y的公共子序列。
• 给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y 的最长公共子序列。
18
最长公共子序列的结构
设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为 Z={z1,z2,…,zk} ,则 (1)若xm=yn,则zk=xm=yn,且zk-1是xm-1和yn-1的最长公共子序列。 (2)若xm≠yn且zk≠xm,则Z是xm-1和Y的最长公共子序列。 (3)若xm≠yn且zk≠yn,则Z是X和yn-1的最长公共子序列。