最长公共子序列问题:给定两个序列 X={x1,x2,x3......xm}和Y={y1,y1,y3.......yn},找出X和Y的公共子序列。
1、穷举法是最容易想到的算法。对于X的所有序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列。并且在检查中记录最长公共子序列。因此,共有2^m个子序列,从而穷举法需要时间指数。
事实上,最长公共子结构问题具有最优子结构的性质.
设序列X={x1,x2,x3......xm}和Y={y1,y1,y3.......yn}的最长公共子系列为Z={z1,z2,z3........zK},则:
(1) 若xm=yn,则Zk=Xm=Yn,且Zm-1是Xm-1和Yn-1的最长公共子序列;
(2)若xm!=yn,且Zk!=Xm,,则Z是Xm-1和Y的最长公共子序列;
(3)若xm!=yn,且Zk!=Yn,,则Z是X和Yn-1的最长公共子序列;
2、子问题的递归问题
3、计算最优值
public class 最长公共子序列序列 {
public static int IcsLength(char[]x,char[]y,int[][]b) {
int m =