一文读懂背包问题(附经典例题详解)

2019 年 6 月 12 日 九章算法

背包问题,一直以来雄踞Google、Facebook等一线大公司面试题型必考榜首,同时,也是一不留神就会跪的面试题。

 

一听背包问题就发怵?其实,背包问题也没那么难。

 


1.什么是背包问题?


背包问题 (Knapsack problem) 是一种组合优化的NP完全问题。

 

一般来说,就是给定一组有固定价值和固定重量的物品,以及一个已知最大承重量的背包,求在不超过背包最大承重量的前提下,能放进背包里面的物品的最大总价值。



如果用一句话形象地描述,大概就是:有个小偷半夜闯入豪宅,可以偷的东西非常多,但是负重能力有限,偷哪些东西才更加不枉此行?(误)

 

这一类问题是典型的使用动态规划解决的问题,我们可以把背包问题分成3种不同的子问题:0-1背包问题、完全背包和多重背包问题,剩下一些都是这3种的变形以及组合。

 

  • 01背包


有 N 件物品和一个容量为 V 的背包,第 i 件物品消耗的容量为 Ci,价值为 Wi,求解放入哪些物品可以使得背包中总价值最大。

 

  • 完全背包


有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用,第 i 件物品消耗的容量为 Ci,价值为 Wi,求解放入哪些物品可以使得背包中总价值最大。

 

  • 多重背包


有N种物品和一个容量为V的背包,第 i 种物品最多有 Mi 件可用,每件物品消耗的容量为 Ci,价值为 Wi,求解放入哪些物品可以使得背包中总价值最大。

 


2.背包问题的难点在哪里?


三种背包问题都有一个共同的限制,那就是背包容量,背包的容量是有限的,这便限制了物品的选择,而三种背包问题的共同目的,便是让背包中的物品价值最大。

 

不同的地方在于物品数量的限制,不过虽然三种背包问题对于物品数量的限制不一样,但都可以转化为01背包问题来进行思考。 所以说,01背包问题是所有背包问题的基础,弄懂了01背包问题后,完全背包和多重背包就没有什么困难的地方了。



但真正在面试中,你可能会遇到很多背包问题的变形。如果你没有一双火眼金睛,一眼看出题目的本质其实是个背包问题,你可能会走很多弯路。

 

如:

  • Target sum 问题(LintCode链接:www.lintcode.com/problem/target-sum)

  • Airbnb的menu order 问题(点菜,菜的价格为double, 问如何正好花完手中的钱)


本质上都是背包问题,很多同学没有看透问题的真面目,会觉得每道题都是独立的,很难做到举一反三,于是就深陷其中不得章法,如果把背包问题的几种类型都弄懂,类似的很多题其实都能迎刃而解了。

 


3.经典背包问题及其题解


背包问题都有哪些经典例题呢?

 

  • 01背包

在N个物品中挑选若干物品装入背包,最多能装多满?

假设背包的大小为V,第i个物品的大小为C[i]

注意:你不可以将物品进行切割。

  • LintCode链接:

    https://www.lintcode.com/problem/backpack

  • 题解链接:

    https://www.jiuzhang.com/solution/backpack/

 

有N件物品和一个容量为V的背包。放入第i件物品耗费的费用是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大?

  • LintCode链接:

    https://www.lintcode.com/problem/backpack-ii/

  • 题解链接:

    https://www.jiuzhang.com/solution/backpack-ii/

 

  • 完全背包

给出一个都是正整数的数组 nums,其中没有重复的数。从中找出所有的和为 target 的组合个数。

注意:一个数可以在组合中出现多次。数的顺序不同则会被认为是不同的组合。

  • LintCode链接:

    https://www.lintcode.com/problem/combination-sum-iv

  • 题解链接:

    https://www.jiuzhang.com/solution/combination-sum-iv/

 


4.经典学习资料


学习资料:


关于背包问题,最经典的讲义莫过于《背包问题九讲》

下载链接:

https://github.com/tianyicui/pack/blob/master/V2.pdf


九章微课堂——动态规划之背包问题

专题教程免费放送啦!

你将免费获得微课堂的访问密码!

(领取方式见文末)


福利预览


 微课堂《动态规划之背包问题专题教程》   


💥助力求职,帮你横扫 FLAG offer !


部分资料展示



课程推荐:


  • 九章算法强化班


动态规划、follow up问题一网打尽,攻克FLAG面试所有算法难题。



秋招临近,根据最近FLAG面试情况,《九章算法强化班》的题型作了部分调整,对课程内容进行了完善、修改:

1. 迎合秋招趋势,更新第5章节和第6章节的内容

2. 移除与算法班重复的动态规划部分

3. 全面更新课件,加入题目和详细算法描述

4. 新增热门题目讲解

5.新增现场写代码环节,贴近实战



学员评价  




课程大纲


课程安排:每节2小时, 共7节,第一节免费试听


同时附上最新的课程大纲哦:


FLAG算法面试难度提高?如何准备?数据结构(上)之并查集与字典树数据结构(下)之堆与栈那题精讲二分法 和 扫描线动态规划(上)-滚动数组与记忆化搜索,区间型动态规划(下)-双序列与背包如何解决 follow up 问题


适合谁?


适合希望拿Google/Facebook/Amazon 等大IT企业offer的同学。

适合上过九章算法班,或有一定的算法基础的同学。

适合希望学习更多的数据结构与算法,知道一些较难的面试题怎样解决的同学。



报名截止时间 


美西时间 6月11日周二 19:00

美东时间 6月11日周二 22:00

北京时间 6月12日周三 10:00



报名方式 


长按二维码即可免费报名试听


或点击“阅读原文”



福利领取方式


扫码添加九章算法-小葵微信号


成为好友后,提供课程报名截图或本图文转发截图

小葵会在一个工作日内将

《动态规划之背包问题》

微课堂链接和专属密码发给大家

登录查看更多
12

相关内容

网络情报(WI)是网络情报联盟(WIC)的官方期刊,WIC是一个国际组织,致力于促进网络情报时代的合作科研和工业发展。WI寻求与该领域的主要协会和国际会议合作。WI是一份同行评议的期刊,每年出版四期,电子版和纸质版都有。 官网地址:http://dblp.uni-trier.de/db/journals/wias/
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
366+阅读 · 2020年6月24日
【经典书】贝叶斯编程,378页pdf,Bayesian Programming
专知会员服务
251+阅读 · 2020年5月18日
【经典书】机器学习高斯过程,266页pdf
专知会员服务
200+阅读 · 2020年5月2日
【新书】Python中的经典计算机科学问题,224页PDF
专知会员服务
59+阅读 · 2019年12月31日
可解释推荐:综述与新视角
专知会员服务
114+阅读 · 2019年10月13日
三本书,帮你解决阅读难题
罗辑思维
8+阅读 · 2019年6月13日
干货 | 一文总结机器学习类面试问题与思路
THU数据派
3+阅读 · 2018年7月15日
两套经典的用户画像
产品100干货速递
26+阅读 · 2018年6月19日
干货 :基于用户画像的聚类分析
数据分析
22+阅读 · 2018年5月17日
JavaScript 背包问题详解
前端大全
7+阅读 · 2018年1月17日
【推荐系统】详解基于内容的推荐算法
产业智能官
23+阅读 · 2018年1月11日
推荐系统杂谈
架构文摘
28+阅读 · 2017年9月15日
认识个性化推荐系统:从推荐算法到产品冷启动
人人都是产品经理
6+阅读 · 2017年9月15日
Augmentation for small object detection
Arxiv
13+阅读 · 2019年2月19日
Arxiv
4+阅读 · 2019年2月8日
Arxiv
11+阅读 · 2018年9月28日
Arxiv
5+阅读 · 2017年11月13日
VIP会员
相关VIP内容
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
366+阅读 · 2020年6月24日
【经典书】贝叶斯编程,378页pdf,Bayesian Programming
专知会员服务
251+阅读 · 2020年5月18日
【经典书】机器学习高斯过程,266页pdf
专知会员服务
200+阅读 · 2020年5月2日
【新书】Python中的经典计算机科学问题,224页PDF
专知会员服务
59+阅读 · 2019年12月31日
可解释推荐:综述与新视角
专知会员服务
114+阅读 · 2019年10月13日
相关资讯
三本书,帮你解决阅读难题
罗辑思维
8+阅读 · 2019年6月13日
干货 | 一文总结机器学习类面试问题与思路
THU数据派
3+阅读 · 2018年7月15日
两套经典的用户画像
产品100干货速递
26+阅读 · 2018年6月19日
干货 :基于用户画像的聚类分析
数据分析
22+阅读 · 2018年5月17日
JavaScript 背包问题详解
前端大全
7+阅读 · 2018年1月17日
【推荐系统】详解基于内容的推荐算法
产业智能官
23+阅读 · 2018年1月11日
推荐系统杂谈
架构文摘
28+阅读 · 2017年9月15日
认识个性化推荐系统:从推荐算法到产品冷启动
人人都是产品经理
6+阅读 · 2017年9月15日
Top
微信扫码咨询专知VIP会员