这是算法导论动态规划一章讲的内容。
public class LCSProblem
{
public static void main(String[] args)
{
String[] x = {"", "A", "B", "C", "B", "D", "A", "B"};
String[] y = {"", "B", "D", "C", "A", "B", "A"};
int[][] b = getLength(x, y);
Display(b, x, x.length-1, y.length-1);
}
public static int[][] getLength(String[] x, String[] y)
{
int[][] b = new int[x.length][y.length];
int[][] c = new int[x.length][y.length];
for(int i=1; i<x.length; i++)
{
for(int j=1; j<y.length; j++)
{
if( x[i] == y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else if(c[i-1][j] >= c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 0;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = -1;
}
}
}
return b;
}
public static void Display(int[][] b, String[] x, int i, int j)
{
if(i == 0 || j == 0)
return;
if(b[i][j] == 1)
{
Display(b, x, i-1, j-1);
System.out.print(x[i] + " ");
}
else if(b[i][j] == 0)
{
Display(b, x, i-1, j);
}
else if(b[i][j] == -1)
{
Display(b, x, i, j-1);
}
}
}
分享到:
相关推荐
由此函数,把序列X={x1,x2….xm}和Y={y1,y2…ym}的最长公共子序列的搜索分为M个阶段,第1阶段,按照式1计算X1和Yj的最长公共子序列长度L[1][j](1),第2阶段,按照2式计算X2和Yj的最长公共子序列长度L[2][j](1),...
总的来说,通过理解LCS的概念、动态规划的原理以及Java代码的实现,我们可以有效地解决两个序列的最长公共子序列问题,并将其应用于序列比对、文本编辑距离计算等多个领域。学习和掌握这种算法对于提升编程能力和...
最长公共子序列(Longest Common Subsequence,LCS)是计算机科学中的一种经典问题,尤其在算法和数据结构领域有着广泛的应用。这个问题涉及到比较两个序列,找出它们的最长的子序列,这个子序列不需要在原序列中...
最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一种经典的问题,主要出现在序列比对、文本编辑距离等领域。在两个给定的字符串中,LCS是指不考虑字符顺序的最长子串,它同时存在于这两个字符...
最长公共子序列(Longest Common Subsequence,LCS)问题是一个经典的计算机科学问题,主要涉及字符串处理和算法设计。在两个或多个字符串中找到最长的序列,该序列不一定是连续的,但存在于每个字符串中,这就是LCS...
在这个场景中,我们关注的是“Java动态规划求解最长公共子序列问题”。最长公共子序列(Longest Common Subsequence, LCS)是两个给定序列的子序列,且这个子序列是两序列中最长的,但它不一定是连续的。此问题在...
java算法分析与设计之最长公共子序列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的...
Java中的动态规划法被广泛应用于解决复杂的问题,如求解最长公共子序列(Longest Common Subsequence, LCS)和最长公共子字符串(Longest Common Substring, LSS)。这两个概念在计算机科学中尤其是在字符串处理和...
【最长公共子序列】(Longest Common Subsequence, LCS) 是一种在计算机科学中常见的字符串比较问题,主要涉及序列和动态规划。这个问题的目标是找到两个给定字符串的最长子序列,这个子序列不必连续,但必须保持原...
所有最长公共子序列(LCS)——动态规划——Java---所有!!!所有!!!所有!!!
最长公共子序列(Longest Common Subsequence,LCS)问题是一个经典的计算机科学问题,主要涉及字符串处理和算法设计。在两个或多个字符串中找到一个最长的子序列,这个子序列不必连续,但必须保持原顺序。例如,...
最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一个经典的问题,主要涉及字符串处理和动态规划。在这个问题中,目标是找到两个或多个序列的最长子序列,这个子序列不必连续,但必须保持原有...
综上所述,利用动态规划解决“最长公共子序列”问题是一种高效且实用的方法,尤其适用于处理大量数据的情况。通过以上代码示例的解析,我们可以更加深入地理解这一算法的实现细节及其应用场景。
最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS的基本思想是寻找两...
总结起来,这个Java项目提供了计算两个字符串相似度的方法,主要利用了最长公共子序列的概念和动态规划算法。通过理解并实现这个项目,开发者可以增强对字符串处理、动态规划以及相似度计算的理解,这对进行文本分析...
最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在本实验作业中,我们将关注两个字符串之间的LCS,这是一个基础且重要的算法,它...
本文介绍了Java最长公共子序列的定义和示例代码,并提供了一个使用动态规划法实现的Java代码示例,希望对大家有所帮助。 知识点: * 最长公共子序列的定义和概念 * Java中实现最长公共子序列的算法 * 动态规划法的...