emmmmm......滚动数组和0/1背包问题的一些新体会
2017-08-17 17:28
260 查看
今天下午上了一节课,讲的是关于dp问题,我觉得这里面有两个点挺吸引我的。
第一个就是当老师讲到了0/1背包问题的时候,说到了一个情况,那就是我们在什么时候采取dp这种方法做比较好
老师给的一个小限定就是
当背包的容量大小远远小于2的n次方(n是物品数量)
这个也不能想象,因为我们知道我们的0/1背包问题的复杂度,就是O(nc),(c是背包的容量)
如果我们的c不能和2的n次方形容一个明显的对比的话,那么我们用dp来做的话其实根本就没有一点点的优势呀。。。。。还不如直接用穷举来做算了。。。。
还有另外一个比较吸引我的点就是老师上课讲到了一个“滚动数组”的概念。
老师讲这个概念的时候是谈到最长公共子序列还有编辑距离的时候谈到的,就是因为我们的状态转移方程,依靠的是我们的当前
例如
dp[i][j]依赖的就是dp[i-1][j]和dp[i][j-1]以及dp[i-1][j-1],所以我们推推推到后面的时候,其实我们已经不太依赖前面的dp数组了,
所以我们可以简简单单的只是设定两个dp一维数组来进行滚动的储存~
我感觉这个思路挺新鲜的~
第一个就是当老师讲到了0/1背包问题的时候,说到了一个情况,那就是我们在什么时候采取dp这种方法做比较好
老师给的一个小限定就是
当背包的容量大小远远小于2的n次方(n是物品数量)
这个也不能想象,因为我们知道我们的0/1背包问题的复杂度,就是O(nc),(c是背包的容量)
如果我们的c不能和2的n次方形容一个明显的对比的话,那么我们用dp来做的话其实根本就没有一点点的优势呀。。。。。还不如直接用穷举来做算了。。。。
还有另外一个比较吸引我的点就是老师上课讲到了一个“滚动数组”的概念。
老师讲这个概念的时候是谈到最长公共子序列还有编辑距离的时候谈到的,就是因为我们的状态转移方程,依靠的是我们的当前
例如
dp[i][j]依赖的就是dp[i-1][j]和dp[i][j-1]以及dp[i-1][j-1],所以我们推推推到后面的时候,其实我们已经不太依赖前面的dp数组了,
所以我们可以简简单单的只是设定两个dp一维数组来进行滚动的储存~
我感觉这个思路挺新鲜的~
相关文章推荐
- 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧
- 完全背包问题 一维数组就地滚动写法
- 01背包问题-状态d[i][j],f[i][j],滚动数组--java实现
- 背包问题 动态规划 滚动数组实现
- dp中滚动数组的应用:01背包、POJ 1159 Palindrome、多段图路径问题
- B - I NEED A OFFER!——HOJ 类0-1背包问题 +滚动数组
- 二维费用背包问题+空间优化(滚动数组)
- 0-1背包问题,用滚动数组,动态规划解决
- hdu 2152 Fruit 【分组背包解母函数——滚动数组优化陷阱问题】
- cocos2dx 实现重复滚动背景时遇到的一些问题
- NYOJ+dp0/1背包+小白上的滚动数组or二维的状态方程有点像最长公共子序列
- Android中TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
- 给定一个数组,按序排列,从数组找出若干个数,使得这若干个数字的和与M最为接近,(背包问题)
- 一些项目——背包问题
- otl中遇到的一些字符数组长度问题
- C++随记(六)---函数处理数组的一些问题
- 关于模型数组进行本地保存中遇到的一些问题
- 0-1背包问题(回溯算法多个数组)
- hdu 4529 郑厂长系列故事――N骑士问题(状压DP+滚动数组->求给定棋子的所有方法数)
- java中关于基本类型和数组的一些注意问题