最近有位朋友有向我问道关于“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背包”问题?相关推荐

  1. 价值链-名词解释01

    利润=总价值-活动1成本-活动2成本 价值链的框架,是将链条从基础材料到最终用户分解为独立工序,以理解成本行为和差异来源.通过分析每道工序系统的成本.收入和价值,业务部门可以获得成本差异.累计优势. ...

  2. 01背包问题详解(浅显易懂)

    01背包问题详解 01背包是一种动态规划问题.动态规划的核心就是状态转移方程,本文主要解释01背包状态转移方程的原理. 问题描述 01背包问题可描述为如下问题: 有一个容量为V的背包,还有n个物体.现 ...

  3. 不停刷朋友圈的人_还在为每天不停刷朋友圈烦恼吗?只要一个步骤轻松戒掉朋友圈...

    朋友圈 01. 眼睛一睁一闭,一天过去了.好多事还没干呢,天就黑了.时间都花在哪了?刷朋友圈. 你曾经有为自己每天刷朋友圈烦恼吗?大把的时间花在了刷朋友圈上. 几分钟之前才看过朋友圈,这会手又不听使唤 ...

  4. Java面试人事篇(二)

    1.请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有.其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能.最深入研究的知识领域 ...

  5. 三步走——带你打造一份完美的数据科学家简历|(附件有PPT福利)

    更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 互联网公司的秋招已经接近尾声,实习生的招聘已提上日程.今年互联网公司就业形势严峻,建议想投身互联网的同学早做准备 ...

  6. 《白话法律42讲》读后感

    今天看完了极客时间的专栏:<白话法律42讲> 这个专栏是我在18年底时购买的,印象中是在别人的推荐下购买的,但现在已经忘了是谁推荐的. 在19年年初的时候就想把这个专栏看完,但一直拖着没看 ...

  7. 新书上市 | 《复分析:可视化方法》

    之前在 2 月书讯,我们聊过这是一本"千呼万唤始出版"的图书.<复分析>的出版当年在数学界曾经引起过不小震动,主要原因是它的写法可谓独树一帜,在数学圈可谓不可替代: & ...

  8. layui树形父子不关联_DP专题7 | 没有上司的舞会 洛谷1352(树形DP)

    高能预警:这是一篇超过5分钟的学习文章,暑假了可以多学会 本篇继续咱们的DP专题,树形DP入门.动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~ 在讨论树 ...

  9. JavaScript闭包如何工作?

    您将如何向了解其闭包概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到了Scheme示例 ,但是不幸的是它没有帮助. #1楼 我知道已经有 ...

最新文章

  1. linux sar 命令详解
  2. 13.4 对锁和字段风格的事件的微小改变
  3. 数字化时代,CIO该如何理解数字能力
  4. Special Numbers 进制(1100)
  5. 编译Bootstrap3
  6. canvas综合应用绘制哆啦A梦
  7. 【必备干货】1000字讲清3大财务数据表
  8. 工业相机和镜头主要参数解释
  9. 【暑假阅读推荐书目】历史篇·中国史
  10. Ubuntu18.04与RTX1080Ti安装深度学习框架
  11. 融捷能源携手企企通,打造智能化、数字化采购平台
  12. java项目管理软件系统springboot+mysql+layui+mybatis-plus进销存源码
  13. 【转】 bio 与块设备驱动
  14. springmvc的过滤器--Filter
  15. deep supervision
  16. uva10635 Prince and Princess
  17. bzoj 3620: 似乎在梦中见过的样子 kmp算法+暴力
  18. coinex02// 撮合引擎 RingBuffer Disruptor的构建与使用
  19. 恶意驱动锁首手动处理的两种方法
  20. 张小龙演讲:信息互联的7个思考!

热门文章

  1. 获取计算机管理权限,Win7如何获得管理员权限
  2. Java程序员春招三面蚂蚁金服,1-3年Java开发工程师面试经验分享
  3. Hadoop3.x版本安装及其应用部署
  4. Python调用xbox手柄马达震动
  5. 点击量、点击率、访客数、的区别与作用
  6. cas607-34-1|5-硝基喹啉|5-Nitroquinoline淡黄色晶体
  7. 小米9私密相册怎么找_小米手机私密相册怎么用?怎么打开查看?
  8. 计算机上安装的网络协议,怎么安装网络协议
  9. 鸿蒙系统投影仪,投影仪有系统和无系统的区别 当贝OS好在哪里?体验完明白了!...
  10. 脉冲宽度调制(Pluse Width Modulation)