为什么是前一行?最简单称重量克的方法来说,重量为4的

本周算法:背包问题
我的图书馆
本周算法:背包问题
翻译自 。欢迎加入。转载请见文末要求。
背包问题很有意思,同时也富有挑战性。首先看一下这个问题的完整描述:
假定背包的最大容量为W,N件物品,每件物品都有自己的价值和重量,将物品放入背包中使得背包内物品的总价值最大。
可以想象这样一个场景——小偷在屋子里偷东西,他带着一只背包。屋子里物品数量有限——每件物品都具有一定的重量和价值——珠宝重量轻但价值高,桌子重但价值低。最重要的是小偷背包容量有限。很明显,他不能把桌子分成两份或者带走珠宝的3/4。对于一件物品他只能选择带走或者不带走。
1234Knapsack Max weight : W = 10 (units) Total items&&&&&&&& : N = 4Values of items&&&& : v[] = {10, 40, 30, 50} Weight of items&&&& : w[] = {5, 4, 6, 3}
从示例数据大致估算一下,最大重量为10时背包能容纳的物品最大价值为50+40=90,重量为7。
解决方法:
最佳的解决方法是使用动态规划——先得到该问题的局部解然后扩展到全局问题解。
构建物品X在不同重量时的价值数组V(Value数组):
1V[N][W] = 4 rows * 10 columns
该矩阵中的每个值的求解都代表一个更小的背包问题。
初始情况一:对于第0列,它的含义是背包的容量为0。此时物品的价值呢?没有。因此,第一列都填入0。
初始情况二:对于第0行,它的含义是屋内没有物品。那么没有任何物品的背包里的价值多少呢?还是没有!所有都是0。
1、现在,开始填入数组每一行的值。第1行第1列代表什么含义呢?对于第一个物品,可以把重量为1的该物品放入背包吗?不行。第一个物品的重量是5。因此,填入0。实际上直到第5列(重量5)之前都应该填入0。
2、对于第1行的第5列(重量5),意味着将物品1放入背包。填入10(注意,这是Value数组):
3、继续,对于第6列,我们可以再放入重量为1(重量值-物品的重量)的物品吗。我们现在只考虑物品1。由于我们加入物品1之后就不能再加入额外的重量,可以很直观地看到其余的列都应该还是相同的值。
4、接着,有意思的事情就要出现了。在第3行第4列,此时重量为4。
需要作以下判断:
可以放入物品2吗——可以。物品2的重量为4。
不加入物品2的话当前已有物品的重量的Value值是否更大——查看相同重量时的前一行的值。不是。前一行的值为0,重量4时不能放入物品1。
在这个重量时可以放入两件物品使得价值最大吗?——不能。此时重量减去物品2的重量后为0。
为什么是前一行?
简单来说,重量为4的前一行的值本身就是个更小的背包问题解,它的含义是到该重量时背包内物品的最大价值(通过遍历物品得到)。
举个例子:
当前物品价值 = 40
当前物品重量 = 4
剩余重量 = 4-4 = 0
查看上面的行(物品1或者其余行的值)。剩余容量为0时,可以再容纳物品1吗?对于该给定的重量值上面的行还有任何值吗?
计算过程如下:
1) 计算不放入该物品时该重量的最大价值:
123previous row, same weight = 0=& V[item-1][weight]
2) 计算当前物品的价值 + 可以容纳的剩余重量的价值
1234Value of current item+ value in previous row with weight 4 (total weight until now (4) - weight of the current item (4))=& val[item-1] + V[item-1][weight-wt[item-1]]
找到二者之中的最大值40(0和40)。
3) 下一次最重要的位置为第2行第9列。意味着此时重量为9,放入两件物品。根据示例数据现在可以放入两件物品。我们作了以下判断:
12341. The value of the current item = 402. The weight of the current item = 43. The weight that is left over = 9 - 4 = 54. Check the row above.& At the remaining weight 5, are we able to accommodate Item 1.
计算如下:
不加入该物品时该重量的最大价值:
1previous row, same weight = 10
计算当前物品的价值+可以容纳的剩余重量的价值
1234Value of current item (40)+ value in previous row with weight 5 (total weight until now (9) - weight of the current item (4)) = 10
10vs50 = 50。
解决了所有的子问题之后,返回V[N][W]的值——4件物品重量为10时:
解法的复杂度非常直观。在N次循环中有W次循环 =& O(NW)
Java代码实现:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263class Knapsack {&&&&public static void main(String[] args) throws Exception {&&&&&&&&int val[] = {10, 40, 30, 50};&&&&&&&&int wt[] = {5, 4, 6, 3};&&&&&&&&int W = 10;&&&&&&&&System.out.println(knapsack(val, wt, W));&&&&}&&&&public static int knapsack(int val[], int wt[], int W) {&&&&&&&&//Get the total number of items. &&&&&&&&//Could be wt.length or val.length. Doesn't matter&&&&&&&&int N = wt. &&&&&&&&//Create a matrix. &&&&&&&&//Items are in rows and weight at in columns +1 on each side&&&&&&&&int[][] V = new int[N + 1][W + 1]; &&&&&&&&//What if the knapsack's capacity is 0 - Set&&&&&&&&//all columns at row 0 to be 0&&&&&&&&for (int col = 0; col &= W; col++) {&&&&&&&&&&&&V[0][col] = 0;&&&&&&&&}&&&&&&&&//What if there are no items at home.& &&&&&&&&//Fill the first row with 0&&&&&&&&for (int row = 0; row &= N; row++) {&&&&&&&&&&&&V[row][0] = 0;&&&&&&&&}&&&&&&&&for (int item=1;item&=N;item++){&&&&&&&&&&&&//Let's fill the values row by row&&&&&&&&&&&&for (int weight=1;weight&=W;weight++){&&&&&&&&&&&&&&&&//Is the current items weight less&&&&&&&&&&&&&&&&//than or equal to running weight&&&&&&&&&&&&&&&&if (wt[item-1]&=weight){&&&&&&&&&&&&&&&&&&&&//Given a weight, check if the value of the current &&&&&&&&&&&&&&&&&&&&//item + value of the item that we could afford &&&&&&&&&&&&&&&&&&&&//with the remaining weight is greater than the value&&&&&&&&&&&&&&&&&&&&//without the current item itself&&&&&&&&&&&&&&&&&&&&V[item][weight]=Math.max (val[item-1]+V[item-1][weight-wt[item-1]], V[item-1][weight]);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else {&&&&&&&&&&&&&&&&&&&&//If the current item's weight is more than the&&&&&&&&&&&&&&&&&&&&//running weight, just carry forward the value&&&&&&&&&&&&&&&&&&&&//without the current item&&&&&&&&&&&&&&&&&&&&V[item][weight]=V[item-1][weight];&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&//Printing the matrix&&&&&&&&for (int[] rows : V) {&&&&&&&&&&&&for (int col : rows) {&&&&&&&&&&&&&&&&System.out.format("%5d", col);&&&&&&&&&&&&}&&&&&&&&&&&&System.out.println();&&&&&&&&}&&&&&&&&return V[N][W];&&&&}}
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
发表评论:
TA的最新馆藏[转]&[转]&[转]&不是说苹果4重量为137吗?为什么称..._闲聊_珠宝大家坛
不是说苹果4重量为137吗?为什么称出来还重个几克?
新买的称,闲来无事把家里所有能称的东西都称了一通,大部分重量都挺准确的,或者说误差很小。唯独我的苹果4差了好几克啊?
为嘛啊,大家不都说苹果4的重量是137吗?据说官网也是这样标注的。
难道用一用手机会自己增肥??
贴的膜更不可能,很薄的两层,达不到几克啊。
难道是膜的重量+小卡的重量?
这样说起来网上流行的一个段子:说买菜是时候试试别人是不是黑心秤,把自己的苹果往上一丢就知道,这可操作性也太弱了!
按时间正序
纠结的孩纸~
手机壳手机卡,贴膜都是有重量的
你软件装得比别人多
楼上太欢乐了
想的太多了!
你软件装得比别人多
你太有才了!你这样倒提示我这可以变成个脑筋急转弯了
你软件删少点看看会不会超重。。。
素团购的那个秤嘛?
看看你背面的标志,如果是完整的苹果肯定比被咬了一口的重啊。。。千万注意。
素团购的那个秤嘛?
是他家的,但是没赶上团购,就单独去买了,老板给了点优惠,但是没有团购价那么给力啦
看看你背面的标志,如果是完整的苹果肯定比被咬了一口的重啊。...
看过了,被咬了两口在,肿么办?
准的,称其他的都很准
准的,称其他的都很准
那就不知道呢?
抱歉,作者被扔进小黑屋反省中,暂时无法阅读
跟电池,内存卡有关不?
跟电池,内存卡有关不?
苹果没有闪存卡,电池也拿不下来
苹果没有闪存卡,电池也拿不下来
这论克的,膜和卡也有好几克了呢
LZ,你太认真了。
呵呵 没称过重吖 有空试下
后即可参与回帖和评论,
如果您还没有一个帐号您可以先
亲逛这么久了,怎么还不进去瞧瞧呢?
手机客户端
与您一起分享生活的快乐1.掌柜的服务态度真好,发货很快。商品质量也相当不错。太喜欢了,谢谢!
  2.好卖家,真有耐心,我终于买到想要的东西了。谢谢卖家。
  3.掌柜太善良了,真是干一行懂一行呀。在掌柜的指导下我都快变内行人士了!
  4.卖家服务真周到。以后带同事一起来。
  5.宝贝质量不错,很喜欢了。谢谢掌柜。
  6.货到了,比图片上看到的好多了3Q!
  7.真是一个好卖家。以后有这方面宝贝的需求还得找你哦!
  8.不错,顶一个,谁要你这么诚信呢。。呵呵谢谢咯!
  9.这家店还好吧。来买过几次了,服务老客户非常周到,以后还常来!
  10.忠心地感谢你,让我买到了梦寐以求的宝贝,太感谢了!
  11.经过我的亲身体验,这家店信誉是相当地不错。宝贝的质量更像钻石一般。太感谢了!
  12.不要以为信誉低的卖家货质量不好。我用我的亲身经历告诉大家,掌柜服务态度非常好。商品质量也非常不错。顶你了!
  13.呵呵。商品这么快就到了,还不错哦,下次来你可要优惠哦^_^
  14.真没想到网上购物还这么有意思,在卖家的指导下我终于学会了网上购物,谢谢!
  15.老朋友。我
共有1,810条评价
收货后4天评论
浅紫 65*25cm
G2会员唐山市
来自国美Iphone客户端
收货后8天评论
使用心得:
用户未及时评价,显示为默认评价。
来自国美MOBILE客户端
收货后6天评论
使用心得:
用户未及时评价,显示为默认评价。
来自国美WAP客户端
收货后15天评论
玫红 65*25cm
使用心得:
G2会员天津市
来自国美WEB客户端
收货后3天评论
使用心得:
用户未及时评价,显示为默认评价。
来自国美Iphone客户端
收货后3天评论
使用心得:
用户未及时评价,显示为默认评价。
来自国美Iphone客户端
回复 summer:
回复 您还可以输入400字
支付与账户
手机逛国美购物更便捷
扫码下载客户端
(C)&&国美在线电子商务有限公司版权所有&&京公安网备62&&沪ICP备号&&沪B2-号阅读下文,完成小题(12分)谢安赴宴桓温伏甲①设馔,广延朝士,因此②欲诛谢安、王坦之。王甚遽,问谢曰:“当作何计?”谢神意不变,谓王曰:“晋之存亡,在此一行。”相与俱前。王之恐状,转见于色;谢之宽容,愈表于貌。望阶趋席,仿作洛生咏③,讽“浩浩洪流”。桓惮其旷远,乃趣④解兵。王、谢旧齐名,于此始判优劣。 选自《世说新语o雅量》【注释】①桓温、谢安、王坦之:均为人名。伏甲:埋伏士兵。 ②因此:趁此。③洛生咏:晋时洛阳一带的读书人吟诵诗文的音调。 ④趣:通“促”,立即,赶快。小题1:解释下列句中划线的字。(4分)(1)当作何计 (
(2)相与俱前(
)小题2:对划线句“王之恐状,转见于色”解释正确的一项是
(3分)小题3:桓温“伏甲设馔”的目的是
(用原文语句回答)(2分)小题4:本文通过对谢安、王坦之两人赴宴中的不同表现的对比,生动地展现了谢安
的气度和品质。(3分)
A.王坦之非常惊慌,渐渐地在脸色上看出来。
B.王坦之惊慌的模样,渐渐地在脸色上看出来。
C.王坦之非常惊慌,渐渐地从脸色上显露出来。
D.王坦之惊慌的模样,渐渐地从脸色上显露出来。


在线咨询下载客户端关注微信公众号
搜索你想学的科目、老师试试搜索吉安
在线咨询下载客户端关注微信公众号&&&分类:
阅读下文,完成小题(12分)谢安赴宴桓温伏甲①设馔,广延朝士,因此②欲诛谢安、王坦之。王甚遽,问谢曰:“当作何计?”谢神意不变,谓王曰:“晋之存亡,在此一行。”相与俱前。王之恐状,转见于色;谢之宽容,愈表于貌。望阶趋席,仿作洛生咏③,讽“浩浩洪流”。桓惮其旷远,乃趣④解兵。王、谢旧齐名,于此始判优劣。 选自《世说新语o雅量》【注释】①桓温、谢安、王坦之:均为人名。伏甲:埋伏士兵。 ②因此:趁此。③洛生咏:晋时洛阳一带的读书人吟诵诗文的音调。 ④趣:通“促”,立即,赶快。小题1:解释下列句中划线的字。(4分)(1)当作何计 (
(2)相与俱前(
)小题2:对划线句“王之恐状,转见于色”解释正确的一项是
(3分)小题3:桓温“伏甲设馔”的目的是
(用原文语句回答)(2分)小题4:本文通过对谢安、王坦之两人赴宴中的不同表现的对比,生动地展现了谢安
的气度和品质。(3分)
A.王坦之非常惊慌,渐渐地在脸色上看出来。
B.王坦之惊慌的模样,渐渐地在脸色上看出来。
C.王坦之非常惊慌,渐渐地从脸色上显露出来。
D.王坦之惊慌的模样,渐渐地从脸色上显露出来。


阅读下文,完成小题(12分)谢安赴宴桓温伏甲①设馔,广延朝士,因此②欲诛谢安、王坦之。王甚遽,问谢曰:“当作何计?”谢神意不变,谓王曰:“晋之存亡,在此一行。”相与俱前。王之恐状,转见于色;谢之宽容,愈表于貌。望阶趋席,仿作洛生咏③,讽“浩浩洪流”。桓惮其旷远,乃趣④解兵。王、谢旧齐名,于此始判优劣。 选自《世说新语o雅量》【注释】①桓温、谢安、王坦之:均为人名。伏甲:埋伏士兵。 ②因此:趁此。③洛生咏:晋时洛阳一带的读书人吟诵诗文的音调。 ④趣:通“促”,立即,赶快。小题1:解释下列句中划线的字。(4分)(1)当作何计 (
(2)相与俱前(
)小题2:对划线句“王之恐状,转见于色”解释正确的一项是
(3分)小题3:桓温“伏甲设馔”的目的是
(用原文语句回答)(2分)小题4:本文通过对谢安、王坦之两人赴宴中的不同表现的对比,生动地展现了谢安
的气度和品质。(3分)
A.王坦之非常惊慌,渐渐地在脸色上看出来。
B.王坦之惊慌的模样,渐渐地在脸色上看出来。
C.王坦之非常惊慌,渐渐地从脸色上显露出来。
D.王坦之惊慌的模样,渐渐地从脸色上显露出来。


科目:最佳答案解析略知识点:&&基础试题拔高试题热门知识点最新试题
关注我们官方微信关于跟谁学服务支持帮助中心

我要回帖

更多关于 40 40 4角钢理论重量 的文章

 

随机推荐