动态规划法——最长公共子序列问题
来源:互联网 发布:网络电缆测试仪怎么用 编辑:程序博客网 时间:2024/05/16 09:36
这个题当初始终看不下去的原因就是当初误解了什么叫最长公共子序列,还一度以为这个题有问题,其实如果明白了什么叫最长公共子序列,也就解决了一半的问题。
什么是最长公共子序列?
什么是最长公共子序列呢?举个简单的例子吧,一个数列S,若分别是两个或多个已知序列的子序列,且是所有符合条件序列中最长的,则S称为已知序列的最长公共子序列。
注意区别:
最长公共子串和最长公共子序列
最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列的顺序,而从序列中去掉任意的元素而获得新的序列;也就是说,子串中字符的位置必须是连续的,子序列则可以不必连续。
图解一下最长公共子序列:
首先,我们先得找出一个构造最优解的过程:
然后 简单说一下动态规划的整个过程(通用算法):
本本题中,我要求解l[7,6],那么我先找到表中第7行第6列的标记,发现是个向上的箭头,说明了l[7,6]=l[6,6], 此时我又找到l[6.,6],发现标记的是个左上角的箭头,说明此时的A包含在解数组里面,将它加入到解数组中,之后将问题规模缩小到了l[5,5],再看l[5,5]…..
在我查找的过程中,随着l[I,j]中i和j的变化,这个问题的规模在逐渐缩小,直至我们遇到l[I,j]=0时停止搜索。
再说我们构造上表的过程,构造的时候,我们是从底到顶构造的,但是在求解的时候,我们是自顶向下求解的。
具体伪代码就不再解释,这个比较简单,只要思路就ok了。
小结:
本题中的标记箭头比较有意思,能非常清楚的看出问题规模的变化趋势。
- 最长公共子序列问题—— 动态规划法
- 动态规划法——最长公共子序列问题
- 最长公共子序列问题——动态规划
- 动态规划——最长公共子序列问题
- 动态规划——最长公共子序列问题
- 动态规划——最长公共子序列问题(LCS)
- 最长公共子序列问题——动态规划
- 动态规划—最长公共子序列问题
- 动态规划—最长公共子序列问题
- 动态规划法(三)——最长公共子序列
- 动态规划问题 最长公共子序列
- 动态规划:最长公共子序列问题
- 最长公共子序列问题--动态规划
- 动态规划-最长公共子序列问题
- 最长公共子序列问题 动态规划
- 最长公共子序列问题-动态规划
- 【计算机算法分析】动态规划法——最长公共子序列问题
- 最长公共子序列问题(动态规划法)
- Project Euler problem 68
- Codechef Count Substrings
- eclipse4.4 安装tomcat插件
- 分析模式 - 责任模式
- ios设置delegate后crash的问题
- 动态规划法——最长公共子序列问题
- 白话经典算法系列之二 直接插入排序的三种实现
- matlab中tic和toc用法
- Mybatis模糊查询
- 怎么使用jquery获得标签的值或元素的内容
- 用CentOS 7打造合适的科研环境
- thinkphp (智美云)判断图片是否存在
- mysql 中execute、executeQuery和executeUpdate之间的区别
- 几种经典的网络服务器架构模型的分析与比较