读算法导论
第四部分第15章,提到DNA解析的时候的最大公共子序列问题。按书上描述用js实现代码如下
var str1 = 'accggtcgagtgcgcggaagccggccgaa';
var str2 = 'gtcgttcggaatgccgttgctctgtaaa';
var rl = new Array();
function LCS(str1,str2){
var m = str1.length ;
var n = str2.length ;
//模拟二维数组
//var rl = new Array();
for(var i=0;i<=m;i++){
rl[i] = new Array();
for(var j=0;j<=n;j++){
rl[i][j] = -1 ; //初始化
}
}
for(i=0;i<=m;i++){
rl[i][0] = 0 ;
}
for(j=0;j<=n;j++){
rl[0][j] = 0 ;
}
//初始化
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(str1.charAt(i-1)==str2.charAt(j-1)){
rl[i][j] =rl[i-1][j-1] + 1 ;
}else{
rl[i][j] = Math.max(rl[i-1][j],rl[i][j-1]);
}
}
}
//return rl[m][n];
}
LCS(str1,str2); //执行求出 最大公共子序列的长度。
function printLCS(str1,str2){
var m = str1.length ;
var n = str2.length;
if(m*n==0){
return '';
}
if(str1.charAt(m-1)==str2.charAt(n-1)){
return printLCS(str1.substring(0,m-1),str2.substring(0,n-1)) +str1.charAt(m-1) ;
}else {
if(rl[m-1][n]>rl[m][n-1]){
return printLCS(str1.substring(0,m-1),str2);
}else {
return printLCS(str1,str2.substring(0,n-1));
}
}
} //递归求出lsc
printLCS(str1,str2); //求出最大公共子序列
分享到:
相关推荐
LCS最大公共子序列问题 C/C++ 最大公共子序列,实现公共子序列算法。
C#,最大公共子序列(LCS,Longest Common Subsequences)的算法与源代码 最长的常见子序列问题是寻找两个给定字符串中存在的最长序列。 最大公共子序列算法,常用于犯罪鉴定、亲子鉴定等等的 DNA 比对。 1.1 子...
算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc
求2个序列的最大公共子序列,求出最优解,并打印出算法实现所需数组,C++实现。
求最长公共子序列问题的一种快速算法,刘佳梅,,本文主要描述一种不同于动态规划法的一种新的求解最长公共子序列问题的方法,该算法主要是把求解公共字符串问题转化为求解矩阵L(p,m
带全过程输出的最大公共子序列算法,C++实现。
在最长公共子序列问题中,给定了两个序列 X=, X2, ..., Xm>和Y=, Y2, ..., Yn>,希望找出X和Y的最大长度公共子序列。LCS是动态规划算法中比较经典的问题。
C源程序——两个序列的最大公共子序列#include #include #define MAX 100 char x[MAX+1],y[MAX+1]; int b[MAX+1][MAX+1],c[MAX+1][MAX+1],m,n; static void Init_XY(void); static void LCS_Length(void); static...
最长公共子序列(LCS)算法 求两个字符串的最长公共子序列。 X的一个子序列是相应于X下标序列{1, 2, …, m}的一个子序列,求解两个序列的所有子序列中长度最大的,例如输入:pear, peach输出:pea。
编程实现最大子段和问题的求解(分别采用分治法和动态规划法求解) 编程实现最长公共子序列(LCS)问题的求解 设计算法求解数字三角形问题,并编程实现。(P90算法实现题3-7)
参考算法导论写的LCS算法,仿照STL的泛型风格,适用于多种STL容器中的各种类型数据构成的序列的最大公共子序列(Longest Common Subsequence)问题求解。
最大公共子序列 采用动态规划发,下载即可运行,欢迎改正
也就是说:最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subsequence,LCS)的区别: 子串(Substring)是串的一个连续的部分,子序列(Subsequence)则是从不改变序列的
最大公共子序列,利用动态规划实现 just enjoy it
最长公共子序列问题LCS 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=, x2,…, xm>,则另一序列Z=, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列 , i2,…, ik>,...
这是一个合并两个文件的工程,用来将两个文件合并,相同部分保留一次,不同部分一次写入,其中利用了求最大公共子序列的算法
课程内容如下: 八大排序的详细讲解,求解递归式的复杂度,常用的几种算法和典例,贪心有活动选择,部分背包,迪杰斯特拉等,动规的有装配线调度,最大子段和,0-1背包,最长公共子序列(LCS),最长回文子序列的...
目录 第一章 从零开始 8 1.1机试分析 8 1.2 IDE的选择与评测结果 10 1.3 DreamJudge的使用 11 ...8.4 最长公共子序列(LCS) 174 8.5 背包类问题 176 8.6 记忆化搜索 179 8.7 字符串相关的动态规划 182
minimizetime(求总工作“平均等待和工作”时间最小的工作顺序) LCS(最长公共子序列) Max Sum(求一维数组中连续的数据元素的和的最大值) BellmanFord Fractional knapsack(物品可切割的背包问题) 等等
leetcode 2 和 c 动态_编程和递归 有几个程序专注于在 python 和 C++ 中使用动态编程解决问题 01_背包(3 ...通过多次包含物品实现的最大利润 ...2.最长公共子序列模式打印(lcs_pattern_print.py) 3.最长公共子串