Dynamic Programming (DP) 问题总结

所有的 DP 问题都可以简单得用 Recursion 的方式实现。这通常是最容易想到的思路。

问题是这种实现不够 efficient,存在 subproblem 被重复计算的情况。有两种解决这个问题的方法:

1. 很直观的,在 naive recursion 里加入 一个 save 的环境,把每个 subproblem 计算出的值存起来。这种方式也叫
Top-down approach。

2. Bottom-up approach:
上面的方法的思路是从大问题开始,计算的时候发现需要小问题的解,再立即去计算小问题,小问题计算完毕返回后利用小问题的解继续计算大问题。另一种思路是直接从小问题开始计算,利用各个小问题的结逐步计算出更大问题的解,直到最后原问题的解被计算出来。

此种思路的优点是可以不依赖递归,用 iterative approach
实现,执行效率上会快一些。但是这种方法需要对问题彻头彻尾的分析,才能够知道如何由小问题的解组成大问题的解,而且写出来的代码虽然执行效率高,不如第一种方法的代码容易理解。

时间: 2024-10-12 12:57:40

Dynamic Programming (DP) 问题总结的相关文章

动态规划-Dynamic Programming(DP)

动态规划 动态规划方法心得 ? 动态规划是一般的面试.笔试中的高频算法题,熟练掌握必要的.动态规划的中心思想是在解决当前问题时,可以由之前已经计算所得的结果并结合现在的限制条件递推出结果.由于此前的计算结果已经保留下来,所以极大的缩短了时间复杂度. ? 解决动态规划问题的关键是找出状态表达式,即如何由之前的结果推导出现在的结果.另外,有的问题有很多限制条件增加问题的难度,需要剥丝抽茧,将问题解决.在找到状态表达式后,分为三步解决问题: 一. 定义内存空间,用来保存每步结果,并根据题目初始化,有些

hdu 4223 Dynamic Programming? (dp)

//连续的和的绝对值最小 # include <stdio.h> # include <string.h> # include <algorithm> # include <math.h> using namespace std; int main() { int t,i,j,num,n,min1; int sum[1010],a[1010]; int cas=0; while(~scanf("%d",&t)) { while(t

Dynamic Programming 动态规划

Dynamic Programming DP 的历史渊源: Richard E. Bellman (1920-1984) Richard Bellman received the IEEE Medal of Honor, 1979. "Bellman . . . explained that he invented the name 'dynamid programming' to hide the fact that he was doing mathe-matical research at

Speeding Up The Traveling Salesman Using Dynamic Programming

转自:https://medium.com/basecs/speeding-up-the-traveling-salesman-using-dynamic-programming-b76d7552e8dd Using dynamic programming to speed up the traveling salesman problem! A large part of what makes computer science hard is that it can be hard to kn

动态规划算法(Dynamic Programming,简称 DP)

动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步. 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的. 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫测,至于各种高大上的术语,那是吓唬别人用的,只要你亲自体验几把,这些名词的含义其实

LeetCode-easy-Maximum Subarray (DP:Dynamic Programming)

Maximum Subarray DP问题 全称(Dynamic Programming) https://www.freecodecamp.org/news/follow-these-steps-to-solve-any-dynamic-programming-interview-problem-cc98e508cd0e/ 建议直接读这篇文章,真的很不错,虽然是英文,但是全部都是简单词汇,只有几个专业术语,查一下就行了,不推荐谷歌翻译,因为我看了下,有些地方还是自己理解比较好,谷歌翻译有错误

2017 UESTC Training for Dynamic Programming

2017 UESTC Training for Dynamic Programming A    思维, 或 dp, 很有意思 方法1: 构造法:蛇形安排赛程表算法复杂度:O(N^2)将1-N排成两竖列,每一轮同一行的为对手保持1的位置不变,其他位置按顺(逆)时方向依次旋转1    6          1    2          1    3          1    4          1    5      2    5          3    6          4   

动态规划 Dynamic Programming

March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. 前言 本文翻译自TopCoder上的一篇文章: Dynamic Programming: From novice to advanced ,并非严格逐字逐句翻译,其中加入了自己的

hdu 4223 Dynamic Programming?

Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solving complex problems by breaking them down