问题

设X和Y是两个序列,如果存在 X 的元素构成的按下标严格递增序列 ,使Xij=Zj,j=1,2,3…,k,那么 Z 是 X 的子序列,Z 含有的元素个数,称为子序列的长度。如果Z既是X的子序列,也是Y的子序列,则称Z是X和Y的公共子序列。
实例:
X=<A,B,C,B,D,A,B>
Y=<B,D,C,A,B,A>
Z=<B,D,A,B>

解析

算法 test9 LCS算法
算法 test9 LCS算法
算法 test9 LCS算法

设计

算法1:求出最长子串的长度
C[0,j]=C[I,0]=0,1≤i≤m,1≤j≤n
for i=1 to m
for j=1 to n

C[i,j]= C[i-1,j-1]+1 i,j>0,xi=yj,B[i,j]=←(删除两个)
max{C[i,j-1],C[i-1,j]} i,j>0,xi≠yj C[i,j-1],B[i,j]=↓(删除y);C[i-1,j],B[i,j]=↑(删除x)
算法2:f(B,i,j)输出最长子串
(1) if i=0 or j=0 then return;
(2) if B[i,j]=← //删除两个
then 输出X[i]
else if B[i,j]=↑ f(B,i-1,j) //删除x
else if f(B,i,j-1) //删除y

分析

时间复杂度为O(mn)

源码

https://github.com/yaoshuangice/yaoshuang

相关文章:

  • 2022-12-23
  • 2021-08-09
  • 2022-02-19
  • 2021-05-11
  • 2021-08-30
  • 2021-07-08
  • 2022-12-23
  • 2021-11-23
猜你喜欢
  • 2021-12-13
  • 2021-08-25
相关资源
相似解决方案