-[算法导论]Dynamic Programming总结(没完成)
2014-09-07 23:02
351 查看
最近又把算法导论部分的dp看了,感觉看的时候懂,但是遇到新的题目就。。。LeetCode还是赶快刷吧!
table将重复的计算记录下来,下次再用到的时候直接存取就可以了。
然后给出了dp的4个步骤:
这张主要探讨了以下几个问题:
这个问题一看就是个最优问题,实际我们可以不用dp做,就用穷举法,首先这个问题是有最优解结构的,
长度为n分成j和n-j,如果j和n-j都是最优的,则n肯定为最优,其次,最优解的可以用下面的形式来表示
总结出这个递归式以后,可以直接用递归法来求解,
但是这个算法有很多的重复计算,运行时间呈指数级上升,所以这个时候,dp就派上用场了。
常见的dp 有两种模式:top-down with memoization 和 bottom-up method。
首先展示top-down method,
Matrix-chain muliplication
代码很容易看懂,然后就是bottom-up method方法了
最后就是step 4了,怎么恢复原来的路径,通常还需要另外的一个数据结构来存储这种关系。
到这儿就差不多了,这个是最简单的dp情况,因为子问题只有一个。
其实难点在于怎么严格证明这些问题。
我们知道Ai*k和Bk*j相乘,需要运算i*k*j次
按照正常分析可以很简单的写出递归式
同时可以用m来记录路径,然后打印出来即可。
打印代码如下
下面的定理既证明了dp的适用性,又提供了方法。
根据这,可写出递归式
下面就是伪代码了
最后打印出路径
下面的图很形象的展示出了结果
最后还有Improving the code的讨论,主要是当不需要路径时,直接求结果,可以节省空间
还有就是求c时,实际只需要记录前3个变量即可。
综述
第15章首先就说明了dp(主要用于求最优问题)存在的必要性,dp有时(subproblem 有重复)比divide-and-conquer更有效率,主要思路是通过一个table将重复的计算记录下来,下次再用到的时候直接存取就可以了。
然后给出了dp的4个步骤:
这张主要探讨了以下几个问题:
Rod cutting
问题描述如下这个问题一看就是个最优问题,实际我们可以不用dp做,就用穷举法,首先这个问题是有最优解结构的,
长度为n分成j和n-j,如果j和n-j都是最优的,则n肯定为最优,其次,最优解的可以用下面的形式来表示
总结出这个递归式以后,可以直接用递归法来求解,
但是这个算法有很多的重复计算,运行时间呈指数级上升,所以这个时候,dp就派上用场了。
常见的dp 有两种模式:top-down with memoization 和 bottom-up method。
首先展示top-down method,
Matrix-chain muliplication
代码很容易看懂,然后就是bottom-up method方法了
最后就是step 4了,怎么恢复原来的路径,通常还需要另外的一个数据结构来存储这种关系。
到这儿就差不多了,这个是最简单的dp情况,因为子问题只有一个。
Matrix-chain multiplication
这个题目在看了上面的可以很简单的总结出来,唯一一个障碍就是step 4,怎样把路径打印出来。其实难点在于怎么严格证明这些问题。
我们知道Ai*k和Bk*j相乘,需要运算i*k*j次
按照正常分析可以很简单的写出递归式
同时可以用m来记录路径,然后打印出来即可。
打印代码如下
Elements of dynamic programming
这个是dp的理论分析,暂时没有看。Longest common subsequence
这个就是典型的dp问题了,首先首先问题下面的定理既证明了dp的适用性,又提供了方法。
根据这,可写出递归式
下面就是伪代码了
最后打印出路径
下面的图很形象的展示出了结果
最后还有Improving the code的讨论,主要是当不需要路径时,直接求结果,可以节省空间
还有就是求c时,实际只需要记录前3个变量即可。
Optimal binary search trees
还没完成。。。相关文章推荐
- 【算法导论】贪心算法,递归算法,动态规划算法总结
- 【算法导论】贪心算法,递归算法,动态规划算法总结
- 算法导论 单源最短路径算法总结
- 算法导论第十章总结以及课后题答案
- 算法导论 求解递归式的总结
- 第十六篇--算法导论排序篇总结-开发实用quicksort算法
- 算法导论13.1红黑树的性质 练习总结
- 插入排序总结(来自算法导论)
- 算法导论22.2广度优先搜索 练习总结
- 【算法导论】贪心算法,递归算法,动态规划算法总结
- 排序算法总结(算法导论)
- 图基础总结(算法导论)
- 一头扎进算法导论-二叉树性质总结
- 【算法导论】排序算法总结
- 堆基础总结(算法导论)
- 【算法导论】贪心算法,递归算法,动态规划算法总结
- 【算法导论】排序算法总结
- Amortized analysis平摊分析——记算法导论视频总结
- 树基础总结(算法导论)
- KMP字符串匹配算法--算法导论示例zz