最长子序列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
这里就是动态规划问题的迭代问题,后面的都在之前的基础上
一个最优决策序列的任何子序列都是该最优决策相对于该子序列的开始和结束状态的最优子序列