最长子序列问题是应用动态规划解决的典型问题。
该问题符合动态规划算法求解问题的两个要素:最优子结构和子问题重叠。
最优子结构是指两个序列的子序列的最长子序列必然是原序列的某一个最长子序列的一部分。所以就可以根据子序列的解来组成原序列的解。
子问题重叠是指在最长子序列求解的过程中,会重复调用相同的子问题。
LCS问题的基本解题思想的描述:
给定的两个序列,有三种情况:
1、 两个序列的最后一个元素相同,则这个元素是最长子序列中的一个元素,然后将两个序列的该元素删除,将得到的新的序列进行重新判断。
2、 两个序列的最后一个元素不同,那么可以构造出两种情况的新的序列对,就是一个序列不变,将另一个序列的最后元素删除,判断这两种情况所得到的最长子序列哪一个更长,更长的最长子序列是原序列的部分解。
按公式可描述如下:
公式的第一行是基本情况,因为若有一个序列的长度为0的话,LCS肯定为0.
公式的第二行就是上面描述的第一种情况,第三行是第二种情况。
根据公式可以看出,LCS问题可以应用递归的方法解决。但是因为递归对于每一个子问题都会重新求解,所以导致运行的时间大幅度增加,为指数时间。而动态规划通过对中间结果进行存储,使时间缩短至多项式时间。
以下是对算法导论中该LCS-LENGTH(X,Y)伪代码的粗略实现。为了方便,全部采用了静态变量和静态方法。
该算法使用的是动态规划中自底向上的方法,就是先对所有可能得子序列求解LCS,然后再由子序列的解得到原序列的解。
数组

最长子序列(LCS)是通过动态规划解决的经典问题,具备最优子结构和子问题重叠特性。本文详细介绍了LCS问题的解决思路,包括两种基本情况和动态规划的自底向上方法。通过示例和伪代码展示了Java实现,最终通过矩阵回溯得到LCS为{B,C,B,A}。"
79357711,6650514,CentOS7 FTP服务器搭建及错误解决方案,"['Linux服务器', 'FTP服务', 'vsftpd配置']
最低0.47元/天 解锁文章
946

被折叠的 条评论
为什么被折叠?



