最长公共子序列

来源:互联网 发布:pcb绘图软件 编辑:程序博客网 时间:2024/04/27 18:10

问题:求两个序列的最长公共子序列。例如:X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A}的最长公共子序列是Z={B,C,B,A}

 

分析:

设序列X={X1,X2.....,Xm},Y={Y1,Y2,......Yn}的最长公共子序列为Z={Z1,Z2,......Zk},则

(1)若Xm=Yn,则Zk=Xm=Yn,且Z(k-1)X(k-1)Y(k-1)的最长公共子序列。

(2)若Xm<>Yn,且Zk<>Xm,则Z是X(m-1)和Y的最长公共子序列。

(3)若Xm<>Yn,且Zk<>Yn,则Z是X和Y(n-1)的最长公共子序列。

其中X(m-1)={x1,x2,......x(m-1)};Y(n-1)={y1,y2,......y(n-1)};Z(k-1)={z1,z2,......z(k-1)}

C[i][j]记录序列Xi和Yj的最长公共子序列长度.

(详细分析常看王晓东著的计算机算法书)