01背包及其优化
来源:互联网 发布:淘宝怎么收钱 编辑:程序博客网 时间:2024/06/01 14:00
状态转移方程:
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]*v[i])
优化空间复杂度
以上方法的时间和空间复杂度均为O(VN),其中时间复杂度应该已经不能再优化了,但空间复杂度却可以优化到O(V)。
先考虑上面讲的基本思路如何实现,肯定是有一个主循环i=1..N,每次算出来二维数组F[i,0..V]的所有值。那么,如果只用一个数组F[0..V],能不能保证第i次循环结束后F[v]中表示的就是我们定义的状态F[i,v]呢?F[i,v]是由F[i−1,v]和F[i−1,v−Ci]两个子问题递推而来,能否保证在推F[i,v]时(也即在第i次主循环中推F[v]时)能够取用F[i−1,v]和F[i−1,v−Ci]的值呢?事实上,这要求在每次主循环中我们以v=V..0的递减顺序计算F[v],这样才能保证推F[v]时F[v−Ci]保存的是状态F[i−1,v−Ci]的值。伪代码如下:
F[0..V]=0
fori=1toN
forv=VtoCi
F[v]=max{F[v],F[v−Ci]+Wi}
其中的F[v]=max{F[v],F[v−Ci]+Wi}一句,恰就对应于我们原来的转移方程,因为现在的F[v−Ci]就相当于原来的F[i−1,v−Ci]。如果将v的循环顺序从上面的逆序改成顺序的话,那么则成了F[i,v]由F[i,v−Ci]推导得到,与本题意不符。
一个时间常数优化
上面伪代码中的
fori=1toN
forv=VtoCi
中第二重循环的下限可以改进。它可以被优化为
fori=1toN
forv=Vtomax(V−ΣNiWi,Ci)
这个优化之所以成立的原因请读者自己思考。(提示:使用二维的转移方程思
考较易。)
- 01背包及其优化
- 01背包及其优化
- 背包问题及其空间优化
- 背包四讲及其优化与证明
- 动态规划3 背包总结及其优化
- 01 背包优化
- 01背包优化
- 01背包问题优化
- 01背包空间优化
- hdu3591 01背包+多重背包+二进制优化
- 01背包的空间优化
- 01背包问题空间优化
- 背包优化
- 背包问题 01背包详解及其实现 空间压缩技术 对应于背包九讲之一
- POJ 1014 Dividing(多重背包 + 二进制优化 + 01背包)
- HDU 2844 Coins(多重背包 + 二进制优化 + 01背包)
- poj1014||hdu1059-多重背包(基于01背包)+二进制优化
- 01背包的优化——读背包九讲
- iOS - tips 持续更新
- 【web】 request传入后台 中文乱码问题
- Java修饰符关键词
- 指定域转换规则
- Android Drawable和Bitmap区别
- 01背包及其优化
- bat命令
- 算法竞赛入门经典:第七章 暴力求解法 7.8子集生成
- iOS经典网络开源库(整理)
- 【纵横科技】前端 三种 表单验证 有图哦
- win2012部署asp网站相关
- 快速打开hosts
- 串口之GetCommState、SetCommState函数详解
- HDU 1869 六度分离 dijkstra&&dsfa