`
icarusliu
  • 浏览: 238324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态规划算法

阅读更多

1.最长公共子串: 转自:http://www.yuanma.org/data/2006/0723/article_1215.htm

算法思想

求字符串str1,str2的最长公共子串的长度。

定义二元函数函数f(m,n):分别以str1[m],str2[n]结尾的连续公共子串的长度

而对于f(m+1,n+1) 有以下两种情况

1.str1[m+1] != str2[n+1],则有f(m+1,n+1) =0

2.str1[m+1] == str2[n+1],则有f(m+1,n+1) = f(m,n) + 1

另外f(0,j) = 0(j>=0)

       f(j,0) = 0 (j>=0)


输出结果:

String:

    1. blog.csdn.net

    2. csdn.blog

         c   s   d   n   .   b   l   o   g  

    0   0   0   0   0   0   0   0   0   0  

b   0   0   0   0   0   0   1    0   0   0  

l   0   0   0   0   0   0   0   2    0   0  

o   0   0   0   0   0   0   0   0   3    0  

g   0   0   0   0   0   0   0   0   0   4   

.   0   0   0   0   0   1   0   0   0   0  

c   0   1    0   0   0   0   0   0   0   0  

s   0   0   2    0   0   0   0   0   0   0  

d   0   0   0   3    0   0   0   0   0   0  

n   0   0   0   0   4    0   0   0   0   0  

.   0   0   0   0   0   5    0   0   0   0  

n   0   0   0   0   1    0   0   0   0   0  

e   0   0   0   0   0   0   0   0   0   0  

t   0   0   0   0   0   0   0   0   0   0  

Java实现:

	public static String getValue(String str1,String str2){
		int maxi = 0;
		int max = 0;
		
		int[][] f = new int[str1.length()+1][str2.length()+1];
		for(int i=0;i<=str2.length();i++	){
			f[0][i] = 0;
		}
		
		for(int i=0;i<=str1.length();i++){
			f[i][0] = 0;
		}
		
		for(int i=0;i<str1.length();i++){
			for(int j=0;j<str2.length();j++){
				if(str1.charAt(i)==str2.charAt(j)){
					f[i+1][j+1] = f[i][j] + 1;
					if(max<f[i+1][j+1]){
						max = f[i+1][j+1];
						maxi = i+1;
					}
				}else{
					f[i+1][j+1] = 0;
				}
			}
		}
		
		
		return str1.substring(maxi-max,maxi);
}


2.

分享到:
评论

相关推荐

    动态规划算法的应用

    "动态规划算法的应用" 动态规划算法是一种非常强大且广泛应用的算法思想,它可以解决许多复杂的问题。动态规划算法的核心思想是将问题分解成小问题,然后使用Memoization技术将中间结果存储起来,以便后续问题的...

    动态规划算法经典题目

    动态规划算法经典题目分析 动态规划是一种非常经典的算法思想,解决的问题领域非常广泛。动态规划的基本思想是将一个复杂的问题分解成多个小问题,通过解决这些小问题来解决整个问题。今天,我们将要探讨动态规划的...

    动态规划算法课件PPT

    动态规划算法课件PPT 动态规划算法是解决问题的有效方法,它将问题分解成多个子问题,然后通过解决这些子问题来解决原问题。动态规划算法与分治法类似,但不同的是,动态规划算法中子问题之间存在相互依赖关系,...

    多阶段决策过程问题的动态规划算法

    动态规划算法是一种强大的工具,主要用于解决多阶段决策过程中的最优化问题。在计算机科学和算法设计中,动态规划提供了一种系统化的方法来处理复杂问题,尤其在那些问题的最优解可以通过组合子问题的最优解来得出的...

    北京工业大学--算法作业2--动态规划算法实现0-1背包问题---Java

    北京工业大学--算法作业2--动态规划算法实现0-1背包问题---Java代码 利用动态规划算法实现0-1背包问题或装配线调度问题。(二选一) 要求测试数据以文本文件的形式存储, 即所有的数据由文本文件读入。 利用动态...

    动态规划算法实现投资问题

    "动态规划算法实现投资问题" 资源分配问题是指在给定的总资源下,如何将其分配给多个工程项目,以获得最大利润的问题。这种问题可以使用动态规划算法来解决。 在动态规划算法中,我们首先需要定义状态变量,例如...

    背包问题动态规划算法模拟设计与实现

    【背包问题动态规划算法模拟设计与实现】 背包问题是一类经典的优化问题,在计算机科学和运筹学中广泛应用。它的核心是通过有限的资源(背包的容量)来最大化收益(子物品的价值)。0-1背包问题是最基础的形式,...

    动态规划算法原理与应用

    "动态规划算法原理与应用" 动态规划是一种解决最优化问题的基本方法,它可以分解为多个互相联系的阶段,每个阶段都需要进行决策,以达到目标函数的极大或极小。动态规划的主要思想是将问题实例分解为更小的、相似的...

    《动态规划算法实验》实验报告.docx

    《动态规划算法实验》实验报告主要探讨了两个经典动态规划问题——0-1背包问题和合唱队形安排问题。这两个问题都是在优化决策过程中寻找最优解的经典实例。 **一、0-1背包问题** 0-1背包问题是一个经典的约束优化...

    动态规划算法简介 很详细

    子问题重叠是动态规划算法效率的关键,即在解决问题的过程中,某些子问题会被多次求解。通过存储子问题的解,我们可以避免重复计算,提高效率。这也是动态规划与分治法的主要区别,后者通常处理独立的子问题。 设计...

    动态规划算法比对蛋白质序列

    动态规划算法是一种在计算机科学和生物学领域广泛应用的解决复杂问题的方法。在本场景中,它被用来比对蛋白质序列,这是生物信息学中的一个核心任务。蛋白质序列比对旨在寻找两个或多个蛋白质序列之间的相似性,这...

    水库调度程序包含12个动态规划算法的程序代码

    这12个动态规划算法的程序代码是解决此类问题的实例,使用了C++编程语言,适用于后端开发。 动态规划的基本思想是将一个复杂问题分解为若干个子问题,通过求解子问题的最优解来得到原问题的最优解。在水库调度问题...

    matlab实现动态规划算法 程序源码.zip

    【达摩老生出品,必属...资源名:matlab实现动态规划算法 程序源码.zip 资源类型:程序源代码 源码说明: 基于matlab实现动态规划的程序,包含完整源码和注释,非常适合借鉴学习 适合人群:新手及有一定经验的开发人员

    数据结构动态规划算法总结

    数据结构动态规划算法总结 动态规划是一种重要的算法思想,广泛应用于经济管理、生产调度、工程技术和最优控制等方面。动态规划是解决多阶段决策过程的优化问题的数学方法,由美国数学家R.E.Bellman等人在20世纪50...

    第三讲:动态规划算法详解.pptx

    动态规划算法是计算机科学与运筹学中一项关键的策略,它广泛应用于求解多阶段决策问题。这类问题往往具有以下特点:在求解过程中需要分为多个阶段,每个阶段都面临一个选择,决策者的最终目标是找出一条从开始到结束...

    动态规划算法的应用实验报告.doc

    动态规划算法是一种强大的工具,常用于解决复杂的问题,如寻找最优化解。在这个实验报告中,我们关注的是如何运用动态规划解决数塔问题。数塔问题是一个典型的动态规划实例,它要求从一个下三角矩阵的顶部出发,找到...

    动态规划算法与贪心算法

    ### 动态规划算法与贪心算法 #### 最优化原理 最优化原理是解决多阶段决策问题的关键。这一原理最早由美国数学家R. Bellman等人于1951年提出,他们指出:一个最优策略的子策略对于它的初态和终态而言也必须是最优...

    图像压缩动态规划算法Java代码

    利用动态规划算法解决图形图像处理问题,用Java编写,代码经过调试健壮性良好

    动态规划算法的优化技巧

    动态规划算法作为一种强大的编程策略,尤其在解决具有重叠子问题和最优子结构特性的问题时,展现出了其独特的魅力。然而,在实际应用中,尤其是在ACM等编程竞赛中,动态规划算法的时间效率优化成为了参赛选手关注的...

    C++ 动态规划算法实现0-1背包问题

    总的来说,这个C++实现的0-1背包问题动态规划算法不仅展示了如何利用动态规划解决问题,还提供了代码调试和测试的方法,是学习和理解动态规划算法的一个优秀实例。通过深入研究和实践,我们可以掌握这一重要的算法...

Global site tag (gtag.js) - Google Analytics