读算法导论
第四部分第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++ 最大公共子序列,实现公共子序列算法。
### 最长公共子序列问题详解 #### 一、问题定义及背景 最长公共子序列(Longest Common Subsequence,简称LCS)问题属于计算机科学领域中的一个重要问题,尤其是在算法设计与分析方面。此问题的核心在于寻找两个...
算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法 本文档总结了解决最长公共子序列(LCS)问题的三种解法,针对连续子序列的情况。LCS 问题有两种定义子序列的方式:一是子序列不要求连续,二是子...
最大公共子序列(Longest Common Subsequence, LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在本场景中,我们关注的是C++实现的全过程输出版本,这意味着代码不仅会找到两个...
C#,最大公共子序列(LCS,Longest Common Subsequences)的算法与源代码 最长的常见子序列问题是寻找两个给定字符串中存在的最长序列。 最大公共子序列算法,常用于犯罪鉴定、亲子鉴定等等的 DNA 比对。 1.1 子...
最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS的基本思想是寻找两...
最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一种经典的问题,主要涉及算法设计和分析,特别是在字符串处理、生物信息学和软件工程等领域有广泛应用。LCS问题旨在找到两个序列中最长的子...
在LCS问题中,动态规划的核心思想是构建一个二维数组C,其中C[i][j]表示X的前i个字符与Y的前j个字符的最长公共子序列的长度。通过逐步填充这个数组,我们可以找到整个序列的LCS长度。 #### 分析给定代码 下面是对...
在计算机科学领域,求解最长公共子序列(Longest Common Subsequence,简称LCS)问题一直是一个热点研究话题。LCS指的是两个序列共有的子序列中长度最长的一个。这个问题不仅在理论上有重要的意义,还在实际应用中...
“动态规划法求解最长公共子序列问题&0-1背包问题” 动态规划是一种非常重要的算法设计方法,应用于解决很多复杂的问题。动态规划法可以将问题分解成若干个小问题,然后通过解决每个小问题来解决整个问题。在实验2...
求2个序列的最大公共子序列,求出最优解,并打印出算法实现所需数组,C++实现。
2. 如果X[i-1] ≠ Y[j-1],那么L[i, j] = max(L[i-1, j], L[i, j-1]),因为当前字符不匹配,我们选择之前没有考虑当前字符时的最大公共子序列长度。 在C#中,我们可以创建一个方法来实现这个算法: ```csharp ...
### 一、最长公共子序列问题介绍 最长公共子序列(Longest Common Subsequence,简称 LCS)是一个经典的计算机科学问题。它指的是在两个序列中找出最长的相同子序列。需要注意的是,这里的子序列并不一定是连续的。...
这意味着我们忽略当前字符,选择之前的最大公共子序列长度。 4. **回溯**:找到LCS本身,从`dp[m][n]`(m和n分别是两个字符串的长度)开始,检查`dp[m][n-1]`和`dp[m-1][n]`,如果`dp[m][n-1]`更大,则`s2[j-1]`不...
最大公共子序列(Longest Common Subsequence,LCS)是计算机科学中的一种经典问题,主要应用于比较和分析两个序列的相似性。在这个问题中,我们寻找两个给定序列的最长子序列,这个子序列并不需要在原序列中连续...
总结来说,最长公共子序列问题是一个典型的动态规划问题,它通过构建二维数组并运用状态转移方程来高效地求解。理解并掌握这种算法对于提升编程能力和解决实际问题具有重要意义。通过实践和练习,我们可以更好地理解...
总结来说,"LCS.zip_dnf_strangezli_最长公共子序列"是一个关于使用C++解决字符串最长公共子序列问题的资源,通过动态规划方法实现。该问题在多个领域都有应用,其C++实现对于学习算法和字符串处理具有一定的参考...
对于LCS问题,我们定义一个二维数组L[m+1][n+1],其中L[i][j]表示X的前i个元素和Y的前j个元素的最长公共子序列的长度。 动态规划状态转移方程如下: 1. 如果X[i]与Y[j]相等,那么L[i][j] = L[i-1][j-1] + 1,因为...
最长公共子序列问题(LCS)是计算机科学中的一种基础问题,它在算法设计与分析领域占有重要地位。LCS问题主要解决的是如何找到两个序列共有的最长子序列的问题,该子序列在两个序列中出现的顺序一致,但不需要连续。...
### 最长公共子序列问题详解 #### 一、问题背景与定义 **最长公共子序列**(Longest Common Subsequence, LCS)问题是计算机科学中的一个重要问题,主要涉及的是两个或多个序列之间的最大相同子序列的问题。这里所说...