1. 问题

定义:设X和Z是两个序列,其中X=<x1,x2,……,xm> Z=<z1,z2,….,zm>
如果存在 X 的元素构成的按下标严格递增序列<Xi1,Xi2,….,Xik>,使Xij=Zj,j=1,2,….,k,那么Z是X的子序列,Z含有的元素个数,称为子序列的长度。

定义:设X和Y是两个序列,如果Z既是X的子序列,也是Y的子序列,则称Z是X和Y的公共子序列。
实例:
算法作业9-----求最长公共子序列 LCS

问题:最长公共子序列问题(Longest Common Subsequence,LCS),给定序列
X=<x1,x2,……,xm>
Y=<y1,y2,….,ym> 求X和Y的最长公共子序列

2. 解析

X=<x1,x2,……,xi>
Y=<y1,y2,….,yj>
Z=<z1,z2,….,zk>

如果Zk是Xi和Yj的最长公共子序列
(1) Xi=Yj,那么zk=xi=yj,Zk-1是Xi-1和Yj-1的最长公共子序列
(2) Xi!=Yi, Zk!=Xi , 那么Zk是Xi-1和Yj的最长公共子序列。
(3) Xi!=Yi, Zk!=Yj , 那么Zk是Xi和Yj-1的最长公共子序列。
算法作业9-----求最长公共子序列 LCS

3. 设计

算法作业9-----求最长公共子序列 LCS

4. 分析

算法复杂度为O(mn)

5. 源码

https://github.com/Lu-ziyan/-/blob/master/LCS.cpp

相关文章: