代码改变世界

随笔分类 -  算法---动态规划

最大子段和 问题总结

2013-11-03 18:59 by youxin, 1841 阅读, 收藏, 编辑
摘要: 一维数组: 有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。[a1,a2,a3................,an].解法1:很自然的想法int maxSum1(int a[],int n,int &besti,int &bestj){ ... 阅读全文

树型动态规划(树形dp)

2013-09-07 17:34 by youxin, 1133 阅读, 收藏, 编辑
摘要: 树型动态规划就是在“树”的数据结构上的动态规划,树型动态规划是建立在树上的,所以有二个方向: 1.根—>叶:这种题目基本上碰不到 2.叶->根:根的子节点传递有用的信息给根,完后根得出最优解的过程。这种的题目是树型动态规划的最常见类型。 首先定义 无根树:题目中可以以任意节点为根建树,经过动态规划后即可直接得到最优值。 有根树:必须以某一个节点为根建树才能通过动态规划后得到最优值。基本上有这样一个步骤:一、有根树: 1.建树(一般以递归方式实现,有时数据过大以BFS方式实现) 2.在建树中找到叶子的时候特别赋值。 3.回溯时通过方程确定出每... 阅读全文

动态规划解背包问题

2013-08-27 21:05 by youxin, 1373 阅读, 收藏, 编辑
摘要: 这个问题也可以用动态规划的分阶段决策方法,来确定把哪一个物体装入背包的最优决策,假定背包的载重量范围是0-m,类似资源分配那样,另optpi[j]表示在前i个物体中,能够装入重量为i的背包的物体的最大价值,j=1,2,3.......m.显然,此时在前i个物体中,有些物体可以装入背包,有些物体不能装入背包。于是,可以得到下面的动态规划函数:6.6.1表面:把前i个物体装入载重量为0的背包,或把0个物体装入载重量为j的背包,得到的价值都是0.6.6.2表面:如果第i个物体的重量大于背包的载重量,则等于optp[i-1][j].如果j>=wi.optp[i-1](j-wi)+pi 表面:当第 阅读全文

动态规划 最长公共子序列 LCS,最长单独递增子序列,最长公共子串

2013-08-20 02:33 by youxin, 1024 阅读, 收藏, 编辑
摘要: LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了。公共部分必须是以相同的顺序出现,但是不必要是连续的。选出最长公共子序列。对于长度为n的序列,其子序列共有2的n次方个,这样的话这种算法的时间复杂度就为指数级了,这显然不太适合用于序列很长的求解了。解法二:既然学到了动态规划,就来看看能否用动态规划的思想来解决这个问题。要使用动态规划,必须满足两个条件:有最优子结构和重叠子问题。为了便于学习,我们先来了解下这两个概念。如果问题的一个最优解中包含了子问题的最优解,则该问题具有最优子结构。当一个递归算法不断地调用同一问题时,我们说该最优问题包含重叠 阅读全文

动态规划 矩阵链乘法

2013-08-17 20:36 by youxin, 1497 阅读, 收藏, 编辑
摘要: 矩阵链乘问题描述 给定n个矩阵构成的一个链,其中i=1,2,...n,矩阵A的维数为pi-1pi,对乘积 A1A2...An以一种最小化标量乘法次数的方式进行加全部括号。 注意:在矩阵链乘问题中,实际上并没有把矩阵相乘,目的是确定一个具有最小代价的矩阵相乘顺序。找出这样一个结合顺序使得相乘的代价最低。3、动态规划分析过程1)最优加全部括号的结构 动态规划第一步是寻找一个最优的子结构。假设现在要计算AiAi+1....Aj的值,计算Ai...j过程当中肯定会存在某个k值(i,length[p] = n+1。使用m[n][n]保存m[i,j]的代价,s[n][n]保存计算m[i,j]时取得最... 阅读全文

动态规划求解编辑距离问题

2013-08-07 20:16 by youxin, 708 阅读, 收藏, 编辑
摘要: 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。应用:DNA分析拼字检查语音辨识抄袭侦测相似度计算动态规划经常被用来作为这个问题的解决手段之一。整数 Levenshtein距离(字符串 str1[1..m], 字符串 str2[1..n])//声明变量 阅读全文

动态规划基本思想

2012-04-19 23:04 by youxin, 1753 阅读, 收藏, 编辑
摘要: 动态规划与贪心策略类似,将一个问题的解决方案视为一系列决策的结果。不同的是,贪心算法每采用一次贪心选择便做出一个不可撤回的决策,而在动态规划中,还要考察每个最优决策序列中是否包含一个最优决策自序列。使用动态规划时,所求问题应具有以下两种性质。 1.最优子结构性质 所求问题的最优子结构性质是采用动态规划算法的条件之一,这种性质又被称为最优化原理。动态规划方法采用最优化原理来建立用于计算最优解的递归式。所谓最优化原理即不管前面的策略如何,此后的决策必须是基于当前状态(由上一次决策产生)的最优决策。由于对于有些问题的某些递归式来说并不一定能保证最优原则,因此在求解问题时有必要对它进行验证。若不... 阅读全文

动态规划之装配线调度问题

2012-04-19 22:54 by youxin, 1718 阅读, 收藏, 编辑
摘要: 一、问题描述 装配线调度问题如下: Colonel汽车公司在有两条装配线的工厂内生产汽车,一个汽车底盘在进入每一条装配线后,在每个装配站会在汽车底盘上安装不同的部件,最后完成的汽车从装配线的末端离开。如下图1所示。每一条装配线上有n个装配站,编号为j=1,2,...,n,将装配线i(i为1或2)的第j个装配站表示为S(i,j)。装配线1的第j个站S(1,j)和装配线2的第j个站S(2,j)执行相同的功能。然而这些装配站是在不同的时间建造的,并且采用了不同的技术,因此,每个站上完成装配所需要的时间也不相同,即使是在两条装配线上相同位置的装配站也是这样。把每个装配站上所需要的装配时间记为a(i.. 阅读全文
点击右上角即可分享
微信分享提示