算法作业9-1——最长公共子序列问题

1. 

给定序列

X=<x1,x2,...,xm>

Y=<y1,y2,...,yn>

X Y 的最长公共子序列Z

2. 解析

Xi=<x1,x2,...,xi>

Yj=<y1,y2,...,yj>

Zk=<z1,z2,...,zk>

如果ZkXiYj的最长公共子序列

1xi=yj,那么zk=xi=yjZk-1xi-1Yj-1的最长公共子序列

2xi<>yjzk<>xi那么ZkXi-1Yj的最长公共子序列

3xi<>yjzk<>yj那么ZkXiYj-1的最长公共子序列

递推关系

C[i,j]表示是XiYj的最长公共子序列(Zk)长度

iX长度;jY的长度

 

实例:

 

3. 设计

算法1:给出最长子串长度

 

For i=1 to m

For j=1 to n

 

算法2f(B,i,j)输出最长子串

 

If i=0 or j=0

then return 空串;

If B[i,j]=←

then 输出xi,且删除xi,删除yj

Else if B[i,j]=↑

then return f(B,i-1,j) //删除xi

Else

return f(B,i,j-1) //删除yj

4. 分析

T=O(mn),

mX序列长度,nY序列长度

5. 源码

https://github.com/2579081436/algorithm.github.io

posted @ 2021-05-22 18:23  Caecae_with_island  阅读(107)  评论(0编辑  收藏  举报