我该如何向我的朋友解释“01背包”问题?
最近有位朋友有向我问道关于“01背包”算法问题的理解。由于她本人在基础年纪没有学过《计算机算法设计与分析》这门课程,正如每一位初始的人学习一种新的知识一样,学习过程中总是遇到各种疑问。学习过程中,有疑问时一种好事,但是过于完美的一遍读懂,似乎确实有困难。认知一门知识,无非两种选择,一是可以反复阅读,直至每一次认识一点点,好处在于,短时间对认识有一定的掌握,但是到完全理解还是需要不断在读几遍;另一就是慢慢读,一遍就有一个很好的理解层次,这需要时间稍长。
在这文章中,我希望自己用他人的知识背景,解释我对自己学习过的知识进行理解。下面将是我对01背包问题的理解:
预备知识:对C语言了解、有一定的数据结构概念、Max{}函数的知识、有些基本生活阅历常识。
算法名称解释:“背包”这个词可以这么想,在日常生活中,比如说我们出去旅游时的背包吧!当你决定背着它去旅行的时候,这背包的体积(背包的大小)或是最大能装物品的重量,此时当然是固定的啦。这里的“0和1”呢,其实就是一种状态,是什么呢,拿你的旅行包为例。比如说你在出发前,你可能最先想到你要带几件衣服啦,但是也不是所有衣服都带是不是,可能带一套就够了,这时,你选则一件你认为最好看的放进背包里,那么在计算机中,这个放进去的过程用“1”来表示喽,没有被选中的衣服,肯定也没有放进去,这是用“0”来表示了。好了,以上就是对这个算法名称的通俗解释啦。
算法情景分析案例: 比如前一阵子我去了一次贵州“西乡苗寨”两日游为例吧,去旅游,可能衣服、牙刷之类没的说,一定带,背包肯定也可以放下去,但是对于吃的零食呢,肯定是能装下多少就使劲往里塞对不对。但是,但是不同零食个头体积都不一样呀,当然我是全想带,全带的话,你的背包能装的下么?估计不行,所以我只能考虑一下,有些零食只能算了。那么问题就来了:我怎样做,才能把那些我最喜欢的零食放进背包里呢,然后开心地去旅行了?
算法情景分析假设:我背包的大小即容量,我们假设V,这里V是固定的;零食中的苹果、矿泉水、饮料、瓜子、面包、、、等的体积我假设用C[i]来表示;对应每种零食我的喜爱程度(需要程度)肯定不是一样重要的,按照这些零食对我的需要价值我假设用P[i]表示。放入零食的时候,每种零食只能整包放入,不可以拆开哦。F[i][V]表示第1、2、3...i个零食放到容量为V的背包中后,此时恰好也是我背包里的前i个零食价值总和的最大值。则该函数的表示如下:
F[i][V] = Max{ F[ i-1 ][ V ] , F[ i-1 ][ V-C[i] ] + P[i] }
这里要说的是,此处是采用动态规划来完成的,即在考虑放不放第[i]个零食时,我们只说放还是不放,这样的话,假如我们实际上没有放入第[i]个零食,则此时最大值是F[i-1][V],如果放入第[i]个零食,则此时变成了前[i-1]个零食在体积V-C[i]下的最大值F[i-1][V-C[i]]。
如果采用回溯法解决的法,我们涉及到二叉树的来构造解空间,解空间其实就是我们规定X[i]的取值为0和1.还记得我们内存吗,每一位使用二进制,要么0,要么1,假如有N位的话,则可以表示2的N次方个树,在数据结构可以采用完全二叉树来表示的。所以你有N个零食要放入背包的话,总共有2的N次方方案放入。这里肯定有最优的值。
回溯则体现在一个二叉树,从根节点开始,只要往左可以做的话,就不回往右,万一到了一个左边的节点行不通了,则退回到最近的父节点,然后往右走。回溯的含义就在于此。
以上的说的是我对01背包问题的思路分析,具体代码此处没有提供。
我该如何向我的朋友解释“01背包”问题?相关推荐
- 价值链-名词解释01
利润=总价值-活动1成本-活动2成本 价值链的框架,是将链条从基础材料到最终用户分解为独立工序,以理解成本行为和差异来源.通过分析每道工序系统的成本.收入和价值,业务部门可以获得成本差异.累计优势. ...
- 01背包问题详解(浅显易懂)
01背包问题详解 01背包是一种动态规划问题.动态规划的核心就是状态转移方程,本文主要解释01背包状态转移方程的原理. 问题描述 01背包问题可描述为如下问题: 有一个容量为V的背包,还有n个物体.现 ...
- 不停刷朋友圈的人_还在为每天不停刷朋友圈烦恼吗?只要一个步骤轻松戒掉朋友圈...
朋友圈 01. 眼睛一睁一闭,一天过去了.好多事还没干呢,天就黑了.时间都花在哪了?刷朋友圈. 你曾经有为自己每天刷朋友圈烦恼吗?大把的时间花在了刷朋友圈上. 几分钟之前才看过朋友圈,这会手又不听使唤 ...
- Java面试人事篇(二)
1.请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有.其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能.最深入研究的知识领域 ...
- 三步走——带你打造一份完美的数据科学家简历|(附件有PPT福利)
更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 互联网公司的秋招已经接近尾声,实习生的招聘已提上日程.今年互联网公司就业形势严峻,建议想投身互联网的同学早做准备 ...
- 《白话法律42讲》读后感
今天看完了极客时间的专栏:<白话法律42讲> 这个专栏是我在18年底时购买的,印象中是在别人的推荐下购买的,但现在已经忘了是谁推荐的. 在19年年初的时候就想把这个专栏看完,但一直拖着没看 ...
- 新书上市 | 《复分析:可视化方法》
之前在 2 月书讯,我们聊过这是一本"千呼万唤始出版"的图书.<复分析>的出版当年在数学界曾经引起过不小震动,主要原因是它的写法可谓独树一帜,在数学圈可谓不可替代: & ...
- layui树形父子不关联_DP专题7 | 没有上司的舞会 洛谷1352(树形DP)
高能预警:这是一篇超过5分钟的学习文章,暑假了可以多学会 本篇继续咱们的DP专题,树形DP入门.动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~ 在讨论树 ...
- JavaScript闭包如何工作?
您将如何向了解其闭包概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到了Scheme示例 ,但是不幸的是它没有帮助. #1楼 我知道已经有 ...
最新文章
- linux sar 命令详解
- 13.4 对锁和字段风格的事件的微小改变
- 数字化时代,CIO该如何理解数字能力
- Special Numbers 进制(1100)
- 编译Bootstrap3
- canvas综合应用绘制哆啦A梦
- 【必备干货】1000字讲清3大财务数据表
- 工业相机和镜头主要参数解释
- 【暑假阅读推荐书目】历史篇·中国史
- Ubuntu18.04与RTX1080Ti安装深度学习框架
- 融捷能源携手企企通,打造智能化、数字化采购平台
- java项目管理软件系统springboot+mysql+layui+mybatis-plus进销存源码
- 【转】 bio 与块设备驱动
- springmvc的过滤器--Filter
- deep supervision
- uva10635 Prince and Princess
- bzoj 3620: 似乎在梦中见过的样子 kmp算法+暴力
- coinex02// 撮合引擎 RingBuffer Disruptor的构建与使用
- 恶意驱动锁首手动处理的两种方法
- 张小龙演讲:信息互联的7个思考!
热门文章
- 获取计算机管理权限,Win7如何获得管理员权限
- Java程序员春招三面蚂蚁金服,1-3年Java开发工程师面试经验分享
- Hadoop3.x版本安装及其应用部署
- Python调用xbox手柄马达震动
- 点击量、点击率、访客数、的区别与作用
- cas607-34-1|5-硝基喹啉|5-Nitroquinoline淡黄色晶体
- 小米9私密相册怎么找_小米手机私密相册怎么用?怎么打开查看?
- 计算机上安装的网络协议,怎么安装网络协议
- 鸿蒙系统投影仪,投影仪有系统和无系统的区别 当贝OS好在哪里?体验完明白了!...
- 脉冲宽度调制(Pluse Width Modulation)