`

动态规划之最长公共子序列的Java实现

阅读更多

这是算法导论动态规划一章讲的内容。

 

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);
		}
	}
}

 

2
1
分享到:
评论

相关推荐

    实验5--最长公共子序列 JAVA

    由此函数,把序列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),...

    最长公共子序列(java实现)

    总的来说,通过理解LCS的概念、动态规划的原理以及Java代码的实现,我们可以有效地解决两个序列的最长公共子序列问题,并将其应用于序列比对、文本编辑距离计算等多个领域。学习和掌握这种算法对于提升编程能力和...

    java解决动态规划最长公共子序列问题

    最长公共子序列(Longest Common Subsequence,LCS)是计算机科学中的一种经典问题,尤其在算法和数据结构领域有着广泛的应用。这个问题涉及到比较两个序列,找出它们的最长的子序列,这个子序列不需要在原序列中...

    LCS 最长公共子序列 JAVA

    最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一种经典的问题,主要出现在序列比对、文本编辑距离等领域。在两个给定的字符串中,LCS是指不考虑字符顺序的最长子串,它同时存在于这两个字符...

    基于java实现动态规划求解最长公共子序列问题

    最长公共子序列(Longest Common Subsequence,LCS)问题是一个经典的计算机科学问题,主要涉及字符串处理和算法设计。在两个或多个字符串中找到最长的序列,该序列不一定是连续的,但存在于每个字符串中,这就是LCS...

    Java动态规划求解最长公共子序列问题.zip

    在这个场景中,我们关注的是“Java动态规划求解最长公共子序列问题”。最长公共子序列(Longest Common Subsequence, LCS)是两个给定序列的子序列,且这个子序列是两序列中最长的,但它不一定是连续的。此问题在...

    java算法分析与设计之最长公共子序列问题源代码

    java算法分析与设计之最长公共子序列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的...

    Java基于动态规划法实现求最长公共子序列及最长公共子字符串示例

    Java中的动态规划法被广泛应用于解决复杂的问题,如求解最长公共子序列(Longest Common Subsequence, LCS)和最长公共子字符串(Longest Common Substring, LSS)。这两个概念在计算机科学中尤其是在字符串处理和...

    最长公共子序列

    【最长公共子序列】(Longest Common Subsequence, LCS) 是一种在计算机科学中常见的字符串比较问题,主要涉及序列和动态规划。这个问题的目标是找到两个给定字符串的最长子序列,这个子序列不必连续,但必须保持原...

    找出所有最长公共子序列算法代码

    所有最长公共子序列(LCS)——动态规划——Java---所有!!!所有!!!所有!!!

    基于Java+动态规划算法解决最长公共子序列问题.zip

    最长公共子序列(Longest Common Subsequence,LCS)问题是一个经典的计算机科学问题,主要涉及字符串处理和算法设计。在两个或多个字符串中找到一个最长的子序列,这个子序列不必连续,但必须保持原顺序。例如,...

    求解最长公共子序列问题的可视化界面实现源码

    最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一个经典的问题,主要涉及字符串处理和动态规划。在这个问题中,目标是找到两个或多个序列的最长子序列,这个子序列不必连续,但必须保持原有...

    最长公共子序列问题

    综上所述,利用动态规划解决“最长公共子序列”问题是一种高效且实用的方法,尤其适用于处理大量数据的情况。通过以上代码示例的解析,我们可以更加深入地理解这一算法的实现细节及其应用场景。

    最长公共子序列(LCS)算法源代码和实验报告

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS的基本思想是寻找两...

    使用Java实现的计算两字符串相似度+最长公共子序列.zip

    总结起来,这个Java项目提供了计算两个字符串相似度的方法,主要利用了最长公共子序列的概念和动态规划算法。通过理解并实现这个项目,开发者可以增强对字符串处理、动态规划以及相似度计算的理解,这对进行文本分析...

    LcsLength.rar_最长 公共子序列 算法_最长公共子序列

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在本实验作业中,我们将关注两个字符串之间的LCS,这是一个基础且重要的算法,它...

    Java最长公共子序列示例

    本文介绍了Java最长公共子序列的定义和示例代码,并提供了一个使用动态规划法实现的Java代码示例,希望对大家有所帮助。 知识点: * 最长公共子序列的定义和概念 * Java中实现最长公共子序列的算法 * 动态规划法的...

Global site tag (gtag.js) - Google Analytics