01背包问题的详细概述 - William_xh

William-xh 2021-08-13 原文


01背包问题的详细概述

对于背包问题,林喵喵推荐我看了dd大佬的背包九讲,在此附上链接:http://blog.csdn.net/pi9nc/article/details/8142876

网上应该有下载的版本:https://wenku.baidu.com/view/7c1ed28dbd64783e08122b65.html

然后花了一个晚上和一个上午的时间,终于对最简单的01背包问题有了一点点自己的理解,在此进行一些自己的解释。

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] }

f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
Pi表示第i件物品的价值。
决策:为了背包中物品总价值最大化,(如果第i件物品放得下的话)第 i件物品应该放入背包中吗 ?(当然,如果放不下,那就只能选择不放了)

题目描述:

有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?

 

name weight value 1 2 3 4 5 6 7 8 9 10
a 2 6 0 6 6 9 9 12 12 15 15 15
b 2 3 0 3 3 6 6 9 9 9 10 11
c 6 5 0 0 0 6 6 6 6 6 10 11
d 5 4 0 0 0 6 6 6 6 6 10 10
e 4 6 0 0 0 6 6 6 6 6 6 6

 

只要你能通过找规律手工填写出上面这张表就算理解了01背包的动态规划算法。(如果是第一次学01背包,请务尝试必手写这张表)

首先要明确这张表是至底向上,从左到右生成的。

为了叙述方便,用e2单元格表示e行2列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为2的背包,那么这个背包的最大价值是0,因为e物品的重量是4,背包装不了。

对于d2单元格,表示只有物品e,d时,承重为2的背包,所能装入的最大价值,仍然是0,因为物品e,d都不是这个背包能装的。(这个就是在循环中的一个判断(if(v[i]<=j)))

同理,c2=0,b2=3,a2=6。

对于承重为8的背包,a8=15,是怎么得出的呢?

根据01背包的状态转换方程,需要考察两个值,

一个是f[i-1,j],(就是在这个物品放得下的前提下,我们不放这个物品,可以理解为,这个物品占空间位置大,且价值小)对于这个例子来说就是b8的值9,另一个是f[i-1,j-Wi]+Pi(表示我要把这个物品放入背包,那就是为这个物品腾出空间,然后看在j-wi的空间下,放I-1件物品的时候,最大的价值是多少,把那个最大+wj)

在这里,

 f[i-1,j]表示我有一个承重为8的背包,当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值

f[i-1,j-Wi]表示我有一个承重为6的背包(等于当前背包承重减去物品a的重量),当只有物品b,c,d,e四件可选时,这个背包能装入的最大价值

f[i-1,j-Wi]就是指单元格b6,值为9,Pi指的是a物品的价值,即6

由于f[i-1,j-Wi]+Pi = 9 + 6 = 15 大于f[i-1,j] = 9,所以物品a应该放入承重为8的背包。

大概就是这样,如果有什么问题,我今后再补充。

文章参考:http://blog.csdn.net/mu399/article/details/7722810

发表于
2017-08-08 11:13 
William_xh 
阅读(12036
评论(0
编辑 
收藏 
举报

 

版权声明:本文为William-xh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/William-xh/p/7305877.html1

01背包问题的详细概述 - William_xh的更多相关文章

  1. MySQL数据库安装与配置详解 – 泽强

    MySQL数据库安装与配置详解   转载提示:在原文http://www.cnblogs.com/sshoub […]...

  2. DDD:订单管理 之 如何组织代码 – 幸福框架

    DDD:订单管理 之 如何组织代码 背景 系统开发最难的是职责的合理分配,或者叫:“如何合理的组织代码”,今天 […]...

  3. JAVAEE学期总结 – Sean521

    JAVAEE学期总结      声明:除第一张思维导图为博主所制作,其他思维导图皆来自网络,若侵权,望告知,必 […]...

  4. AppScan–图解Web扫描工具IBM Security App Scan Standard – 帅胡

    AppScan–图解Web扫描工具IBM Security App Scan Standard A […]...

  5. Linux & Windows 查看 ip 地址

    Windows 查看本机 IP 打开 cmd,输入 ipconfig,回车,找到IPv4地址   或者通过以下 […]...

  6. (一)将elementUI官方文档部署到本地 – 昭冥大人呀

    (一)将elementUI官方文档部署到本地 Posted on 2020-04-17 16:13  昭冥大人 […]...

  7. Python – 面向对象(一)入门篇

    Python里面有一句话:万物皆是对象   如何面向对象编程 设计类 创建类实例对象 实例对象调用方法 创建对 […]...

  8. 全景视频拼接关键技术 – pengfengting~

    全景视频拼接关键技术 2015-11-24 15:09  pengfengting~  阅读(808)  评论 […]...

随机推荐

  1. 移动web开发之touch事件

    前面的话   iOS版Safari为了向开发人员传达一些特殊信息,新增了一些专有事件。因为iOS设备既没有鼠标 […]...

  2. aliyun

    DDoS原生防护是一款针对阿里云ECS、SLB、Web应用防火墙、EIP等产品直接提升DDoS防御能力的安全产 […]...

  3. 开源:Sagit.Framework For IOS 开发框架

    一:创造Sagit开发框架的起因: 记得IT连创业刚进行时,招了个IOS的女生做开发,然后: —& […]...

  4. 手机号名字替换*号

    手机号名字替换*号 名字替换*号/** * @param $str 字符串 * @param $start 替 […]...

  5. Java设计模式学习记录-迭代器模式

    前言 这次要介绍的是迭代器模式,也是一种行为模式。我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点 […]...

  6. ssh 链接服务器出现 Write failed: Broken pipe

    方法来源 Ssh “Write failed: Broken pipe” – NewInstanc […]...

  7. 不作伪分享者决定完整分享我自学Python3的全部过程细节

    不作伪分享者决定完整分享我自学Python3的全部过程细节     我不要作伪分享者 十六年前我第一次见到了电 […]...

  8. haproxy+keepalived主备与双主模式配置

    Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相 […]...

展开目录

目录导航