最长公共子序列
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TONGZONGE/article/details/90245545 最长公共子序列问题:给定两个序列 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