动态规划-----最长公共子序列LCS问题

最长子序列LCS问题:

按下标严格递增序列, Z的序列中元素都可以在X序列中按照序列顺序找到

假设两个序列X,Y,    Z是序列X的子序列,Z是序列Y的子序列,则称Z是X,Y的公告子序列

两个序列X,Y按照下标增长,当序列中的元素相同时,该元素一定在Z中,且X,Y都增长1,如果不相同,则其中一序列增长,另一序列不动.

但是怎么确认是哪个序列增长呢?  一序列不动,另一序列从当前位置遍历到尾,找出相同的元素,然后该元素在Z中,且X,Y都增长1

这样还是无法分辨哪个序列增长,所以我们希望当遇到两个序列元素不相同时,后面的元素序列能够告诉我们该怎么办

所以我们遍历两个序列,当一序列不动,另一序列遍历所有,,然后从后往前寻找公共子序列,当然在遍历寻找时,遇到相同时,不再是X,Y都增长1,而是X,Y都减少1.

找出一序列中的一个元素 i 与另一序列中相同元素的位置,但问题还在,不相同时该怎么办,这时我们应该判断 之前的序列中公告子序列哪边长,选择哪边减少.判断i-1 与 j 或者 i与j-1

所以需要两个二维数组,一个储存最长公共子序列的长度,一个记录是删除两个还是删除X,或者删除Y

这里就是动态规划问题的迭代问题,后面的都在之前的基础上

一个最优决策序列的任何子序列都是该最优决策相对于该子序列的开始和结束状态的最优子序列

https://github.com/zhangweifeng66/algorithms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值