1.问题

最长公共子序列问题,给定序列X=<x1,x2,…,xm>,Y=<y1,y2,…,yj>,求X和Y的最长公共子序列。

2.解析

Xi=<x1,x2,…,xi>

Yj=<y1,y2,…,yj>

Zk=<z1,z2,…,zk>

如果Zk是Xi和Yj的最长公共子序列,

(1)xi = yj,那么zk = xi = yj,Zk-1是Xi-1和Yj-1的最长公共子序列

(2)xi ≠ yj,那么zk ≠ xi,Zk-1是Xi-1和Yj的最长公共子序列

(3)xi ≠ yj,那么zk ≠ yi,Zk-1是Xi和Yj-1的最长公共子序列

实例:

X=<A,B,C,D,C>

Y=<B,D,C,B>

m=1-5

n=1-4

初始化:

作业9:最长子序列

 

(1)i=1

①j=1 X.A<>Y.B,C[1,1]=max{C[1,0],C[0,1]}=0,删除y

②j=2 X.A<>Y.D,C[1,2]=max{C[1,1],C[0,2]}=0,删除y

③j=3 X.A<>Y.C,C[1,3]=max{C[1,2],C[0,3]}=0,删除y

④j=4 X.A<>Y.B,C[1,4]=max{C[1,3],C[0,4]}=0,删除y

(2)i=2

①j=1 X.B等于Y.B,C[2,1]=C[1,1]+1=1,删除两个

②j=2 X.B<>Y.D,C[2,2]=max{C[2,1],C[1,2]}=1,删除y

③j=3 X.B<>Y.C,C[2,3]=max{C[2,2],C[1,3]}=1,删除y

④j=4 X.B=Y.B,C[2,4]=C[1,3]+1=1,删除两个

(3)i=3

①j=1 X.C<>Y.B,C[3,1]=max{C[3,0],C[2,1]}=1,删除x

②j=2 X.C<>Y.D,C[3,2]=max{C[3,1],C[2,2]}=1,删除y

③j=3 X.C等于Y.C,C[3,3]=C[2,2]+1=2,删除两个

④j=4 X.C<>Y.B,C[3,4]=max{C[3,3],C[2,4]}=2,删除y

(4)i=4

①j=1 X.D<>Y.B,C[4,1]=max{C[4,0],C[3,1]}=1,删除x

②j=2 X.D=Y.D,C[4,2]=C[3,1]+1=2,删除两个

③j=3 X.D<>Y.C,C[4,3]=max{C[4,2],C[3,3]}=2,删除y

④j=4 X.D<>Y.B,C[4,4]=max{C[4,3],C[3,4]}=2,删除y

(5)i=5

①j=1 X.C<>Y.B,C[5,1]=max{C[5,0],C[4,1]}=1,删除x

②j=2 X.C<>Y.D,C[5,2]=max{C[5,1],C[4,2]}=1,删除x

③j=3 X.C==Y.C,C[5,3]=C[4,2]+1=3,删除两个

④j=4 X.C<>Y.B,C[5,4]=max{C[5,3],C[4,4]}=3,删除y

作业9:最长子序列

 

(1)X=5,Y=4

查表(5,4) “3;删除y”

X=<A,B,C,D,C>

Y=<B,D,C,B>

=>

X=<A,B,C,D,C>

Y=<B,D,C>

(2)X=5,Y=3

查表(5,3) “3;删除两个”

X=<A,B,C,D,C>

Y=<B,D,C>

=>

X=<A,B,C,D>

Y=<B,D>

输出C

(3)X=4,Y=2

查表(4,2) “2;删除两个”

X=<A,B,C,D>

Y=<B,D>

=>

X=<A,B,C>

Y=< B >

输出D

(4)X=3,Y=1

查表(3,1) “1;x”

X=<A,B,C>

Y=< B >

=>

X=<A,B>

Y=< B >

(5)X=2,Y=1

查表(2,1) “1;删除两个”

X=<A,B>

Y=< B >

=>

X=< A >

Y=<>

输出B

(6)X=1,Y=0

最终输出<B,D,C>

3.设计

作业9:最长子序列

 

4.分析

由于只需要填一个m行n列的二维数组,其中m代表第一个字符串长度,n代表第二个字符串长度

所以时间复杂度为O(m*n)

5.源码

https://github.com/Kenko299/Design-and-analysis-of-algorithms/tree/master/homework9

相关文章:

  • 2021-10-19
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
  • 2022-12-23
  • 2021-09-14
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2021-10-05
  • 2021-10-23
  • 2021-09-14
  • 2021-06-28
  • 2021-12-26
相关资源
相似解决方案