最长公共子序列(LCS)

本文介绍了动态规划中的经典问题——最长公共子序列(LCS),通过分析最优子结构和递推式来求解LCS,并提供了一个C++实现的示例代码。
摘要由CSDN通过智能技术生成

LCS算是动态规划中比较经典的一道题目,很多书上都讲了这个,题目的描述大概就是有两个序列,从两个序列中找到一个序列(这个序列的长度<=两个序列长度的最小值)使得这个序列是开始的两个序列的子序列。这个题如果用穷举法将所有的序列找到,求出最长公共子序列,这种解法的复杂度是O(2^m)。

因为是动态规划的经典题目,所有特点很明显。

最优子结构(子问题的最优解是原问题的最优解),例如两个字符序列s1和s2,现在要求s1和s2的最长公共子序列a,s1[i-1]和s2[j-1]算是s1和s2的两个子序列,求出s1[i-1]和s2[j-1]的最长子序列,就相当与求出了s1和s2中不包含元素s1[i],s2[j]最长公共子序列。

 

递推式:

如果s1的第i个元素和s2的第j个元素相等,说明最长的子序列包含s1[i],s2[j],所有c[i][j]=c[i-1][j-1]+1;(c[i][j]表示s1的长度为i,s2的长度为j的两个序列的最长公共子序列的长度)

如果s1的第i个元素和s2的第j个元素不相等,去掉最后一个元素得到的序列s1[i-1]和s2序列求最长,和s1和s2[j-1]求最长。

粘贴一个别人的:

①最优子结构

设 X=(x1,x2,.....xn) 和 Y={y1,y2,.....ym} 是两个序列,将 X 和 Y 的最长公共子序列记为LCS(X,Y)

找出LCS(X,Y)就是一个最优化问题。因为&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值