应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

背包问题(01背包问题例题讲解)

  背包问题(01背包问题例题讲解)2021040718:30人民邮电出版社无论是Facebook、Google、Microsoft,还是百度、阿里、腾讯每年大厂面试时总会考察动态规划问题。而作为动态规划类问题中非常重要的一个类别背包问题,慢慢地走到了舞台中央成为面试高频题中的佼佼者。
  背包问题的一个例子:应该选择哪些盒子,才能使价格尽可能地大,而保持重量小于或等于15kg?图片源自:维基百科背包问题
  随着面试算法岗位的人数不断增多,背包问题也不像当初那样天真无邪,如今也是套路满满。01背包,多重背包,完全背包等背包问题,经历大厂面试官变题型、换表达、改套路之后,让无数面试者短时间内无法找到问题需求,内心os这题想干嘛?。很多人都在背包问题上,跪了。。。。。。
  图片源自:谷歌图片搞笑表情包
  背包问题看起来是个简单的数学问题,但背后的算法逻辑相当复杂,短时间分析不出来,基本上就凉凉了。很多人在面试过程中可能就是因为没有做出一道背包问题,而被大厂拒之门外。如何才能快速掌握背包问题的解题套路,成为大厂offer收割机呢?
  跟人邮君一起快速掌握背包问题解题技巧,go!趣学算法(异步图书出品)77。4购买什么背包问题?
  背包问题(Knapsackproblem)是一种组合优化的NP完全问题。
  问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
  相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V。背包问题有哪些?
  背包问题分为以下五种:
  01背包问题
  多重背包问题
  完全背包问题
  分组背包问题
  混合背包问题学习背包问题有什么作用?
  背包问题是互联网公司最常见的算法面试题,由于其代码量较小而思维量较大的特点而深受面试官的钟爱。此外,背包问题是学习动态规划的基础,是动态规划入门阶段必须要熟练掌握的问题。这也是为什么背包问题日渐成为大厂面试高频题中的佼佼者的原因所在。熟练掌握01背包,多重背包,完全背包等背包问题的解法,可以加深初学者对于动态规划中状态的理解。01背包问题
  问题描述
  给定n个物品的权重和值,将这些物品放在容量为W的背包中,以在背包中获得最大的总价值。换句话说,给定两个整数数组value〔0。。n1〕和weight〔0。。n1〕,它们分别表示与n个项目相关联的值和权重。还给定代表背包容量的整数W,找出val〔〕的最大值子集,以使该子集的权重之和小于或等于W。本题中value〔〕{60,100,120},weight〔〕{10,20,30},
  W50。
  解题方法方法1:通过蛮力算法或穷举搜索进行递归。
  方法:一种简单的解决方案是考虑所有项目子集,并计算所有子集的总重量和价值。仅考虑总权重小于W的子集。从所有此类子集中,选择最大值子集。
  最佳子结构:要考虑项目的所有子集,每个项目可能有两种情况。
  情况1:该项目包含在最佳子集中。
  情况2:该商品未包含在最佳组合中。
  因此,可以从n个项目中获得的最大值是以下两个值中的最大值。
  通过n1个项和W权重(不包括第n个项)获得的最大值。
  第n个项目的值加上n1个项目获得的最大值,W减去第n个项目(包括第n个项目)的权重。
  如果第n个项目的权重大于W,则第n个项目不能包括在内,情况1是唯一的可能性。
  下面是上述方法的python代码实现defknapSack(W,wt,val,n):BaseCaseifn0orW0:return0IfweightofthenthitemismorethanKnapsackofcapacityW,thenthisitemcannotbeincludedintheoptimalsolutionif(wt〔n1〕gt;W):returnknapSack(W,wt,val,n1)returnthemaximumoftwocases:(1)nthitemincluded(2)notincludedelse:returnmax(val〔n1〕knapSack(Wwt〔n1〕,wt,val,n1),knapSack(W,wt,val,n1))endoffunctionknapSackDriverCodeval〔60,100,120〕wt〔10,20,30〕W50nlen(val)printknapSack(W,wt,val,n)
  复杂度分析
  时间复杂度:O()。
  由于存在多余的子问题。
  辅助空间:O(1)。
  由于没有额外的数据结构用于存储值。方法2:通过自下而上的方式构造临时数组K〔〕〔〕,可以避免重新计算相同子问题。
  方法:在动态编程中,我们将考虑与递归方法中提到的情况相同的情况。在DP〔〕〔〕表中,让我们将从1到W的所有可能的权重视为列,并将权重保留为行。考虑到从1到第i的所有值,状态DP〔i〕〔j〕将表示jweight的最大值。因此,如果我们考虑wi(ith行中的权重),则可以将其填充到weightvaluegt;wi的所有列中。
  现在可以发生两种可能性:
  在给定的列中填写wi。
  不要在给定的列中填写wi。
  现在,我们必须最大限度地考虑这两种可能性,形式上,如果我们不在jth列中填充ith权重,则DP〔i〕〔j〕状态将与DP〔i1〕〔j〕相同,但是如果我们填充权重,则DP〔i〕〔j〕将等于wi的值上一行中权重为jwi的列的值。因此,我们将这两种可能性中的最大值用于填充当前状态。
  下面是上述方法的python代码实现:defknapSack(W,wt,val,n):K〔〔0forxinrange(W1)〕forxinrange(n1)〕BuildtableK〔〕〔〕inbottomupmannerforiinrange(n1):forwinrange(W1):ifi0orw0:K〔i〕〔w〕0elifwt〔i1〕lt;w:K〔i〕〔w〕max(val〔i1〕K〔i1〕〔wwt〔i1〕〕,K〔i1〕〔w〕)else:K〔i〕〔w〕K〔i1〕〔w〕returnK〔n〕〔W〕Drivercodeval〔60,100,120〕wt〔10,20,30〕W50nlen(val)print(knapSack(W,wt,val,n))
  复杂度分析
  时间复杂度:O(NW)。
  其中N是重量元素的数量,W是容量。对于每个重量元素,我们遍历所有重量容量1lt;wlt;W。
  辅助空间:O(NW)。
  使用大小为NW的二维数组。方法3:使用记忆技术。
  方法:此方法基本上是递归方法的扩展,因此我们可以克服计算冗余案例的问题,从而增加了复杂性。我们可以通过简单地创建一个二维数组来解决这个问题,如果我们第一次得到它,它可以存储一个特定的状态(n,w)。现在,如果我们再次遇到相同的状态(n,w),而不是以指数复杂度进行计算,我们可以直接以固定时间返回存储在表中的结果。在此方面,此方法相对于递归方法具有优势。
  下面是上述方法的python代码实现val〔60,100,120〕wt〔10,20,30〕W50nlen(val)Weinitializethematrixwith1atfirst。t〔〔1foriinrange(W1)〕forjinrange(n1)〕defknapsack(wt,val,W,n):baseconditionsifn0orW0:return0ift〔n〕〔W〕!1:returnt〔n〕〔W〕choicediagramcodeifwt〔n1〕lt;W:t〔n〕〔W〕max(val〔n1〕knapsack(wt,val,Wwt〔n1〕,n1),knapsack(wt,val,W,n1))returnt〔n〕〔W〕elifwt〔n1〕gt;W:t〔n〕〔W〕knapsack(wt,val,W,n1)returnt〔n〕〔W〕print(knapsack(wt,val,W,n))
  复杂度分析:
  时间复杂度:O(NW)。
  由于避免了状态的冗余计算。
  辅助空间:O(NW)。
  使用2D数组数据结构存储中间状态。
  推荐阅读
  趣学算法
  陈小玉著

王牌飞行员(王牌飞行员系统)王牌飞行员(王牌飞行员系统)他是一位被历史忽略的王牌飞行员。他的身份比较特殊早期是国民党空军飞行员,后来是人民空军飞行员抗日战争时打的是日军战机,抗美援朝战争时打的是美军战机。美国拳击手的秘密(拳击手带怎么绑)拳击手的秘密(拳击手带怎么绑)格斗迷20210528125714三十多年前,一部少林寺在国内热映,在那个电视互联网还没有普及,一毛钱一张电影票的年代,李连杰荧幕上的一拳一脚,让多少空调使用常识(空调使用必知的8个要点)空调使用常识(空调使用必知的8个要点)随着天气燥热模式的开启,人们又到了需要空调救命的季节。但是作为一名用户,使用空调时应了解的注意事项,你又能遵守几个呢?如何才能够安全且健康的使昌吉景点(新疆十大美景)昌吉景点(新疆十大美景)途者天下20210511103757来新疆旅游这份各个景点门票详解请查收可可托海景区门票90区间车90开放时间10301830坐标阿勒泰富蕴县那拉提大草原门深圳网络摄像机厂家(深圳十大安防监控厂家)深圳网络摄像机厂家(深圳十大安防监控厂家)深圳市智慧安防商会201804161700473月31日,深圳市智慧安防商会第一届二次会员大会在深圳宝能科技园成功举办。此次大会以创新发展红袜子队(网红袜子)红袜子队(网红袜子)一个有钱的老板对于球队的帮助不亚于球队的巨星,毕竟只有老板手中有钱,球队才不会在补强的时候扣扣索索,比如说切尔西的阿布,没有阿布就没有如今辉煌的切尔西,再比如说长岛九丈崖(从蓬莱怎么去长岛)长岛九丈崖(从蓬莱怎么去长岛)长岛位于山东烟台,与蓬莱阁隔海相望。如果你是第一次自驾车去长岛玩的话,记住导航的时候目的地一定要选烟台蓬长客港,绝对不要选蓬莱码头。我就是选错了,结果30年是什么婚(选择20年房贷和30年房贷有何区别)30年是什么婚(选择20年房贷和30年房贷有何区别)前言在房地产行业刚刚起步的时候,房价并不算很高,加上当时人们提前消费的意识也并不强,人们基本上都会选择全款买房。不过随着时代的发陈冰母亲(陈冰妈妈50岁近照太年轻)陈冰母亲(陈冰妈妈50岁近照太年轻)看照猜猜猜,首先想必大家都不认识照片中这对夫妻是谁,不过说不出名字没有关系,小编其实也只是想让大家猜猜年纪而已。每年都有围观中国新歌声的网友们一家用台式电脑(家用台式电脑推荐2020)家用台式电脑(家用台式电脑推荐2020)2020年12月台式组装机电脑配置清单大全2020年diy配件新品层出不穷惊喜不断。现在已经临近年末,电脑配置网为大家总结了一下今年各种不同股权融资(十大融资平台)股权融资(十大融资平台)大河报大河财立方(记者裴熔熔)2020年河南上市公司融资情况如何?有哪些重大并购重组事件?发债规模在全国排在第几方阵?5月20日,河南上市公司白皮书(202
问世间情为何物直教人生死相许(你知道这首词背后的故事吗)问世间情为何物直教人生死相许(你知道这首词背后的故事吗)问世间,情为何物,直教人生死相许?天南地北双飞客,老翅几回寒暑。欢乐趣,离别苦,就中更有痴儿女。君应有语渺万里层云,千山暮雪鱼鳔的作用(原来有这么好的食补作用)鱼鳔的作用(原来有这么好的食补作用)鱼鳔鱼鳔(bio),又名鱼肚,为石首鱼科大黄鱼小黄鱼等的鱼鳔干燥而成。鱼鳔主要成分为高级胶原蛋白黏多糖和多种维生素及钙锌铁硒等多种微量元素,鱼鳔李佳琦开黄腔(李佳琦开黄腔内容)李佳琦开黄腔(李佳琦开黄腔内容)科技互联观察20210529171300每逢购物节,最忙的莫过于主播们。近日,618年中促销开始,网络上到处都是主播们摇旗呐喊招揽生意的信息。不料,痴情的诗句(让对方看到心疼的句子)痴情的诗句(让对方看到心疼的句子)唐诗宋词古诗词20180804101623李商隐一生都在牛李党争之中困顿失意,但是他心灵善感,一往情深,所作诗歌在晚唐独树一帜,无论是对仕途伤感哀舒婷经典语录(舒婷经典语录,美得让人心动!)舒婷经典语录(舒婷经典语录,美得让人心动!)1。谈恋爱,如果你太急切,太草率,随便付出自己的感情,等你理想的,你最想要的出现,你已经没有机会了。2。天生不爱倾诉苦难,并非苦难已经永远走高飞为什么这么火(和远走高飞一样火的歌)刚刚发布了新单曲的陌陌主播馨哥哥,在诠释追梦主题的音乐上似乎越来越有心得了,昨天便在直播间演唱了一首金志文和徐佳莹合唱的的大火歌曲远走高飞。不羁潇洒和坦荡是这首歌原本的主题涵义,而你妹电影网(哪些网站可以免费追剧)你妹电影网(哪些网站可以免费追剧)漯河顺成驾培201908282137现在的生活是越来越不容易了,听首歌曲都得要钱。在这个一切向钱看的时代里,像我这种穷屌丝还真的感觉到了鸭梨山大。东兔论坛(中国养兔网官方网站)东兔论坛(中国养兔网官方网站)暨草食动物养殖技术高手在民间征集活动成功举行2016年10月24日上午10点30分,由北京英美尔(北京优利保生物技术有限责任公司)冠名,东兔论坛主办,宜宾网址之家(中国十大论坛网站)宜宾网址之家(中国十大论坛网站)Hello我的大学20200706091759为了提前帮助各位考生及家长了解志愿填报的完整流程和具体需要填报哪些信息,以免在正式填报期间,因时间过短黑客病毒(简单的病毒编程代码)黑客病毒(简单的病毒编程代码)2006年底,一款超级计算机病毒开始席卷中国,它不断入侵个人电脑,感染门户网站,击溃数据系统,市面上所有的杀毒软件都对它束手无策。短短两个月时间里,给数码知识华为手机怎样恢复中文恢复中文教程如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多小技巧的,这些技巧很多小伙伴一般都是不知道如何来实用的,就好比最近就有很多小伙伴们想要知道华为手机怎样恢复中
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件