算法设计与分析:第四章 动态规划 4.5最长公共子序列

/*
最长公共子序列:
 假定,A=a 1 a 2 …a n 是字母表∑上的一个字符序列,如果存在
∑上的另外一个字符序列S=c 1 c 2 …c j ,使得对所有的k,
k=1,2,…,j,有c k =a ik (其中,1≤ik≤n),是字符序列A的一个
下标递增序列,则称字符序列S是A的子序列。

如果∑={x,y,x}, ∑上的字符序列是A=xyzyxzxz,则xxx是A的
一个长度为3的子序列。该子序列中的字符,对应于A的下
标是1,5,7。而xzyzx是A的长度为5的子序列,对应于A的下
标是1,3,4,6,7.

分析:
令序列A=a1a2...an和B=b1b2...bm,记A=a1a2...ak为A中最前面连续k个字符的子序列,
序列A和序列B的最长公共子序列性质:
1)若an = bm,序列Sk = c1c2...ck是A和B的最长公共子序列,有an = bm = ck,
  且序列Sk-1=c1c2...ck-1是序列An-1和Bm-1的长度为k-1的最长公共子序列

2)若an != bm,且an != ck,那么应该将序列A最后字符an排除,用An-1与B进行比较
Sk 是An-1与Bm的长度为k的最长公共子序列

3)若an != bm,且bm != ck,Sk是An与Bm-1的长度为k最长公共子序列

划分状态:
第一阶段:计算A1和Bj的LCS长度L1,j  ,j = 1,2,...,m
第二阶段: 计算A2和Bj的LCS长度L2,j  ,j = 1,2,...,m
...
第n阶段 :计算An和Bj的LCS长度Ln,j  ,j = 1,2,...,m
第n阶段中的Ln,m是序列An和Bm的最
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值