【动态规划专题】最长公共子序列问题

本文探讨了最长子序列问题,这是一个经典的动态规划问题。内容详细介绍了如何求解两个子序列X和Y的最长公共子序列,旨在阐述动态规划的运用。
摘要由CSDN通过智能技术生成
最长子序列问题(longest -common-subsequence problem)是一个经典的体现动态规划思想的算法问题,问题描述如下:
给定两个子序列X={x1,x2,x3...xm}和Y={y1,y2,y3,...yn}。求X和Y长度最长的公共子序列。
对于该问题,倘若我们使用暴力搜索法进行求解,无疑就需要穷举X的所有子序列。然后对每一个子序列检查它是否也是Y的子序列,记录找到最长的子序列。X的每一个子序列对应的X的下标集合为{1,2,3,...m}的一个子集,所以X有pow(2,m)个子序列,因此暴力搜索的运行时间为指数阶,对于较长的序列无疑是不实用的。所以,对于该问题的求解我们应该另辟他径。
那么,我们可不可以采用动态规划思想来求解此类问题呢?
我们先来复习一下使用动态规划所要满足的条件。
1.最优化原理(最优子结构性质) 最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。
2.无后效性将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值