第一篇文章(0/1背包问题探索)
2008-11-11 01:36
197 查看
0/1背包问题是一个经典的动态规划策略的一个实例.基于最近忙于准备软件设计师的考试(结果试题泄露推迟了考试,不知道是福是祸啊!)几乎没有花什么时间研究算法,今晚索性将白天上课没弄懂的0/1背包问题弄个明白!暂且我先用所谓的递归搜索法给出这个问题的一个解决(当然解决的不是很好,而且我还是没弄明白这个递归怎么会是个搜索呢!看来我对递归的了解还是不够深入,应该要从整体上加以把握,再从细节上加以理解!).以下是我的解题过程:
首先我们定义一个函数 int make(int i,int j)用来表示从前i个物体中选择出若干物体放入剩余空间为j的背包得到的最优解(即最大价值),其中i为当前待决定是否要放入背包的物体号,j为当前的剩余空间(注意是物体决定物体i是否放进去前的剩余空间).有此我们可以得到一个递归式:
make(i,j)=max{make(i-1,j-w[i])+v[i],make(i-1,j)} j>=w[i] (1)
make(i,j)=make(i-1,j) j<w[i] (2)
上式说明如下:
对于式子(1)来说:j>=w[i]说明当前物体的体积超过了背包剩余的空间容量,于是我们分两种情况讨论,并取这两种情况所获得的价值最大者作为当前问题的最优解.第一种情况是:由于当前物体的容量大于剩余背包体积,所以物体i不能直接放入背包,而是考虑能否从背包中置换出某一物体,然后再将物体i加入.这种情况从宏观上来理解则是物体i加入了背包,那么前i-1个物体中放入背包的那些物体所占的空间就是j-w[i],且make(i-1,j-w[i])是前i-1个物体的最优解,再加上已经确定放入背包中的物体i,则这种情况得到的解为make(i-1,j-w[i]):第二种情况:是物体i不放入背包中,意思就是前i-1个物体中取出某些物体得到当前解make(i-1,j);
对于式子(2)来说:j<w[i]
`````太晚了,明天还有课,加上自己在这个地方还是有没有弄明白的地方,明天继续写`````
首先我们定义一个函数 int make(int i,int j)用来表示从前i个物体中选择出若干物体放入剩余空间为j的背包得到的最优解(即最大价值),其中i为当前待决定是否要放入背包的物体号,j为当前的剩余空间(注意是物体决定物体i是否放进去前的剩余空间).有此我们可以得到一个递归式:
make(i,j)=max{make(i-1,j-w[i])+v[i],make(i-1,j)} j>=w[i] (1)
make(i,j)=make(i-1,j) j<w[i] (2)
上式说明如下:
对于式子(1)来说:j>=w[i]说明当前物体的体积超过了背包剩余的空间容量,于是我们分两种情况讨论,并取这两种情况所获得的价值最大者作为当前问题的最优解.第一种情况是:由于当前物体的容量大于剩余背包体积,所以物体i不能直接放入背包,而是考虑能否从背包中置换出某一物体,然后再将物体i加入.这种情况从宏观上来理解则是物体i加入了背包,那么前i-1个物体中放入背包的那些物体所占的空间就是j-w[i],且make(i-1,j-w[i])是前i-1个物体的最优解,再加上已经确定放入背包中的物体i,则这种情况得到的解为make(i-1,j-w[i]):第二种情况:是物体i不放入背包中,意思就是前i-1个物体中取出某些物体得到当前解make(i-1,j);
对于式子(2)来说:j<w[i]
`````太晚了,明天还有课,加上自己在这个地方还是有没有弄明白的地方,明天继续写`````
相关文章推荐
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索 (转)
- CSDN的第一篇博客发布时遇见的“选择文章类型”的问题
- 排版第一篇文章解决的三个问题
- 这是我第一篇文章,想问个关于java客户/服务器Socket的问题。
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 第一篇文章,不知写什么。就写一些我最近在trswcm里遇到的问题吧。(没大用只是为了写而写)
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索javascript
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 区块链探索之旅(第一篇)值得你学习的关于区块链概念及应用的文章
- 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
- 第一篇csdn博客文章提交就出这个问题
- 具体了解哈夫曼树和背包问题
- 01背包问题的学习(来源:背包九讲)
- 0-1背包问题
- HDU 3127 WHUgirls dp背包问题
- 第一篇文章
- 多重背包问题