Dynamic Programming--Longest Common Subsequence
来源:互联网 发布:守望先锋安卓数据查询 编辑:程序博客网 时间:2024/06/02 04:40
问题描述:给定两个序列:X[1...m],Y[1...n],求在两个序列中同时出现的最长序列的长度。(不必是连续的)
穷举法:x中的子序列有2^m个。
检查是否存在于Y中--O(n)。
时间显然是不能接受的。。。
动态规划:
设C[i,j] = |LCS(X[1...i],Y[1...j])|,C[i,j]表示序列X[1...i],Y[1...j]的最长LCS,则C[m,n]就是最后的答案。
C[i,j] = C[i-1,j-1] + 1 …… X[i] == Y[j]
C[i,j] = max(C[i-1,j],C[i,j-1]) …… X[i] != Y[j]
。。。。
int LCS (int lenstr,int lench){//返回LCS的长度memset(dp,0,sizeof(dp));int k;for (int i=1;i<=lenstr;i++){k=i&1;for (int j=1;j<=lench;j++) if (str[i-1] == ch[j-1]) dp[k][j]=dp[k^1][j-1]+1; elsedp[k][j]=max(dp[k][j-1],dp[k^1][j]);}return dp[k][lench];}有时候会求一个串,这两个串是这个串的子序列,求这个串的最小长度。
int lcs(){ for (int i = 1;i <= len1;++i){ for (int j = 1;j <= len2;++j){ if (s1[i-1] == s2[j-1]) dp1[i][j] = dp1[i-1][j-1] + 1; else{ dp1[i][j] = min(dp1[i-1][j],dp1[i][j-1]) + 1; } } } return dp1[len1][len2];}
0 0
- Longest Common Subsequence: Dynamic Programming
- Dynamic Programming--Longest Common Subsequence
- Dynamic Programming------Largest Common Subsequence
- 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- 转载 动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
- Dynamic Programming longest common subsequence(LCS) 动态规划之最长公共子序列
- Dynamic Programming 之 Longest Increasing Subsequence 问题
- (M)Dynamic Programming:516. Longest Palindromic Subsequence
- (M)Dynamic Programming:300. Longest Increasing Subsequence
- Dynamic Programming之Longest Increasing Subsequence (LIS)问题
- Dynamic Programming之Longest Increasing Subsequence (LIS)问题
- week7- Dynamic Programming-NO.516. Longest Palindromic Subsequence
- week12- Dynamic Programming-NO.300. Longest Increasing Subsequence
- (M)Dynamic Programming:673. Number of Longest Increasing Subsequence
- longest common subsequence
- Longest Common Subsequence
- 10405 Longest Common Subsequence
- UVa10405 - Longest Common Subsequence
- 如何编写高质量代码
- SQL数据库缓存
- WPF中给datagrid控件中dataTable添加新行,并选中设为当前行(源码加注释)
- 安全驾驶-携带拖车绳(三十一)
- Android5.0失效API统计及解决兼容的方法
- Dynamic Programming--Longest Common Subsequence
- 8086汇编 计算输入两个十进制数之和用16进制输出//输入两个十六进制数之和用10进制输出
- 【菜鸟学Java】9:使用dom4j解析jdbc.xml
- 安全驾驶-锁车门(三十二)
- InnoDB Log checkpointing 和 dirty Buffer pool page的关系
- 一些英文词的标准缩写
- 将EditText的光标定位到字符的最后面
- 安全驾驶-儿童不坐副驾驶(三十三)
- scala学习-if,while,for,try用法7