最长公共子序列 动态规划
来源:互联网 发布:it服务是什么 编辑:程序博客网 时间:2024/06/15 05:10
子序列
公共子序列
最长公共子序列
输入:
输出:X与Y的最长公共子序列
最长公共子序列结构分析
第i前缀
设
例:
优化子结构的猜想
if
if
if
优化子结构的证明
思路:对于LCS问题,把最优解分解成两部分,且保证子问题无关性,对两部分分别用反正法,即假定两个子问题的最优解不是最优的,通过“剪切粘贴”构造另一个子最优解,把构建后的子最优解粘贴到原问题中,得出矛盾。
情况一:
证明 设
若
存在
于是
与
情况二和情况三证明略。
子问题重叠性
建立LCS长度的递归方程
自底向上计算优化解代价
C[0,0] C[0,1] C[0,2] C[0,3] C[0,4]
C[1,0] C[1,1] C[1,2] C[1,3] C[1,4]
C[2,0] C[2,1] C[2,2] C[2,3] C[2,4]
C[3,0] C[3,1] C[3,2] C[3,3] C[3,4]
如果想要计算C[3,4],需要先计算
C[2,3] C[2,4]
C[3,3]
如果要计算C[2,3],需要计算
C[1,2] C[1,3]
C[2,2]
如果要计算C[3,3] ,需要计算
C[2,2] C[2,3]
C[3,2]
……..所以最先要计算的是
C[0,0] C[0,1] C[0,2] C[0,3] C[0,4]
C[1,0]
C[2,0]
C[3,0]
之后根据递归公式逐行计算
C[0,0] C[0,1] C[0,2] C[0,3] C[0,4]
C[1,0]
C[2,0]
C[3,0]
计算LCS长度的算法
数据结构:
构造最优解
从B[m,n]开始按指针搜索
若B[i,j]=
如此找到的LCS是X与Y的LCS的Inverse
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- 动态规划之最长公共子序列
- 动态规划 ------- 最长公共子序列
- 动态规划实现最长公共子序列
- 【动态规划】最长公共子序列LCS
- 动态规划--最长公共子序列
- 动态规划:最长公共子序列
- 动态规划解决最长公共子序列
- 最长公共子序列-动态规划DP
- 动态规划--最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划解决最长公共子序列
- 最长公共子序列(动态规划)
- 动态规划 最长公共子序列
- 动态规划 - 最长公共子序列
- 动态规划之最长公共子序列
- 最长公共子序列 [动态规划]
- 关于GWT的入门
- 电脑重启问题——系统崩溃
- 【微信开发-JavaWeb】SHA1算法
- 不同像素密度下图片资源的缩放关系
- iOS开发-自动布局之autoresizingMask使用详解(Storyboard&Code)
- 最长公共子序列 动态规划
- rtab_map ubuntu ROS 安装
- AngularJs(四)控制器
- 【JavaWeb开发】tomcat目录详解
- 如何使用Xcode的Targets来管理开发和生产版本的构建
- 完整的JDBC连接数据库代码和步骤
- delphi禁止webbrowser弹出窗口或者脚本错误
- python程序乱码解决
- Research URL