
动态规划
文章平均质量分 67
bertzhang
这个作者很懒,什么都没留下…
展开
-
编程练习-动态规划(生产线问题)
line_A_cost是生产线A的代价;line_B_cost是生产线B的代价AB_cost是从生产线A转到生产线B的代价BA_cost是从生产线B转到生产线A的代价代码如下:#include #include void ProductionLine(std::vector& line_A_cost, std::vector& line_B_cost,原创 2012-02-02 13:11:12 · 1995 阅读 · 0 评论 -
编程练习-动态规划(矩阵乘法)
动态规划中的矩阵乘法问题是一个非常典型的题目,熟悉了这个问题,将有利与解决如下几个相关问题,其实这些问题都是同一类问题:1、最优二叉查找树问题,算法导论P212 15.5章节2、求数组中最长递增子序列 编程之美P194 2.16章节下面是实例程序:#include #include #include templateclass ArrayInternal { public原创 2012-02-03 15:36:26 · 859 阅读 · 0 评论 -
数组最长递增子序列
这个问题和矩阵相乘比较相似,但因为它只需要计算A[1...j]的代价,因此比矩阵相乘少了一层循环,矩阵相称的复杂度是n的3次方,这个问题的复杂度是n平方的。要把数据打印出来,破费了一点周折,需要好好理解,其中递归退出的条件是,数组记录的位置和自身的位置相同,但这个位置的数据也要输出,因此在else语句中输出最前面的哪个数据,同时最后一个数据需要保存在临时变量,压入栈中,待递归返回时输出数据,整个编原创 2012-02-04 15:23:08 · 593 阅读 · 0 评论 -
编程练习-动态规划(最长公共子序列LCS)
程序代码如下:#include #include #include templateclass DualArrayInternal { public: DualArrayInternal(T* array_data, size_t column_num) : array_data_(array_data), column_num_(column_num) { } T& o原创 2012-02-03 20:19:56 · 624 阅读 · 0 评论 -
0/1背包问题
参考文献[2]给出了非常清楚的解法描述,阅读参考文献[2]就可以很好的理解背包问题的构建过程了,参考文献[1]给出了很多0/1背包相关的问题,而且在参考文献[1]中还给出了一种空间节约的求解方法,通过画求解的矩阵图,可以很好的理解为什么参考文献[1]的节省空间的思想。即为什么第2次循环要从v降低到1,因为没一行使用了同一个数组,计算数组后面的值时会用到前面的值,如果从前向后修改数组,当用到数组前面原创 2012-02-15 19:21:42 · 985 阅读 · 0 评论 -
双调旅行商问题(TSP)bitonic tours
参考文献:http://www.cs.huji.ac.il/course/2004/algo/Solutions/bitonic.pdfhttp://www.cppblog.com/doer-xee/archive/2009/11/30/102296.html原创 2012-02-20 10:27:13 · 1968 阅读 · 0 评论 -
LCS问题变型,要求子序列必须连续
问题和LCS相似,但是要求最长的字串必须连续。同样可以采取动态规划方法,分别使用两个数组来保存中间计算结果:1)一个保存当到达位置i,j时,最大的字串长度;2)另一保存以i,j为截止的位置的连续字串的长度;每次如果a[i] == b[j]时,比较max_length[i-1][j-1]和length_endinghere[i][j]来进行决策,具体见程序如果a[i] != b[原创 2012-02-28 17:22:53 · 1634 阅读 · 0 评论 -
计算字符串的相似度(编辑距离)
题目:对于一个字符串a可以通过增加一个字符、删除一个字符、修改一个字符,将字符串a变成字符串b,例如a= abcddefgb = abcefg可以通过a字符串删除两个dd得到b字符串,也可以通过b字符串增加dd编程a字符串,从上面的分析可以知道,增加和删除的代价必须是相同的,这样a字符串变成b字符串的代价和b字符串变成a字符串的代价才会是相同的,否这可能产生代价不对称的情况。其实我原创 2012-02-17 14:47:00 · 3744 阅读 · 0 评论 -
数组分割问题
文献[1][2][3]都是相同的解法,其中[4]的评论中有完整的解法,但不是很好理解,直到写这个文章时,还是不太理解。文献[5]dlyme的回帖给了一个很好的思路,他的原文如下:假设S=(a[1]+a[2]+...+a[n]+a[n+1]+...+a[2n])/2,那么这是个和0-1背包类似的动态规划问题,区别之处就是取的个数受到限制,必须得取足n个元素。用dp(i,j,c)来表示原创 2012-02-20 17:06:33 · 673 阅读 · 0 评论