问题描述:给定两个字符串A(a1...an),B(b1...bm),求他们的最长公共子序列C(注意,子序列表示是原序列删除某接几个元素后剩下的序列)。
解决方法:递归(memo)、DP(自底向上)
设
C[i,j]为子序列串:a1...ai,b1...bj的最长公共子串
则原问题的解应该是C[n,m];
现在看看C[i,j]不同ij之间有什么关系(即原问题是否具有最优子结构以求降规模),发现有如下的关系:
| NULL(空串) i=0 or j=0 ①
C[i,j]= | C[i-1,j-1],ai ai = bj ②
| Longer{ C[i,j-1] , C[i-1,j] } ai != bj ③
为什么是上面这个方程这样--是可以证明的。
证①
②
③
=====================================
问题具有最优子结构(即可用递归实现)
==to be continued...