已知序列string1={B,C,D,B}和序列string2={A,B,C,B,D},由递推关系:
c[i][j]存储集合string1(个数为i)和string2(个数为j)的最长公共子序列长度b[i][j]记录c[i][j]的值是由哪一个子问题的解得到的,用1,2,3分别代表子问题c[i-1][j-1],c[i-1][j]和c[i][j-1]。
由string1和string2列得的c[i][j]以及相应的b[i][j]表如下:
c[i][j]
i,j | 0 | 1 | 2 | 3 | 4 | 5 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 1 | 1 |
2 | 0 | 0 | 1 | 2 | 2 | 2 |
3 | 0 | 0 | 1 | 2 | 2 | 3 |
4 | 0 | 0 | 2 | 2 | 3 | 3 |
i,j | 0 | 1 | 2 | 3 | 4 | 5 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 2 | 1 | 3 | 3 | 3 |
2 | 0 | 2 | 2 | 1 | 3 | 3 |
3 | 0 | 2 | 2 | 2 | 2 | 1 |
4 | 0 | 2 | 2 | 2 | 1 | 2 |
最终最优值c[4][5]=3 ,最优解为string1[1,2,3],string2[2,3,6],为BCD 。
算法下次给出: