01背包问题个人剖析

news2024/12/22 23:59:05

背包问题

文章目录

  • 背包问题
    • 1 01背包问题
      • 1.1 问题阐述
      • 1.2 问题分析
    • 背包问题中我最初的一些疑惑

1 01背包问题

我参考了文献背包九讲。https://github.com/tianyicui/pack/raw/master/V2.pdf 背包九讲的作者是ACM大牛崔天翼。

1.1 问题阐述

N N N件物品和一个容量为 V V V的背包,放入第 i i i件物品所需的容量 C i C_i Ci, 得到的价值是 W i W_i Wi。求解将哪些物品放入背包可以使得价值总和最大。

1.2 问题分析

“最大”关键词表明本题是一个最优化问题。在本题中,我们通过做出一组选择”对于每一件物品是否放入背包“,来达到最优解。为了便于阐述,我们可以给每一种物品进行编号,1,2,3,…,N. 对于物品 i i i,我们有两种选择,放或者不放。

在一个最优方案中,物品 i i i被放入背包还是没有被放入背包,都有可能。因为最优方案可能不止一个,同时要注意到的是:最优值只有一个。

F [ i , v ] F[i,v] F[i,v]为编号为1,2,3, … \dots , i的物品放入容量为 v v v的背包所能够获得的最大价值。

(1)假设在一个最优方案中,我们将物品N放入了背包,则问题就转化为”编号为1,2,…,N-1的物品放入剩下容量为 V − C N V-C_N VCN的背包中“,此时能够获得的最大价值就是 F [ N − 1 , V − C N ] F[N-1,V-C_N] F[N1,VCN]再加上放入物品 N N N获得的最大价值 W i W_i Wi,即 F [ N , V ] = F [ N − 1 , V − C i ] + W i F[N,V] = F[N-1,V-C_i] + W_i F[N,V]=F[N1,VCi]+Wi. ”编号为1,2,…,N-1的物品放入剩下容量为 V − C N V-C_N VCN的背包中“这个子问题只和物品 1 , 2 , … , N − 1 1,2,\dots, N-1 1,2,,N1相关,是一个独立的子问题。

(2) 假设在一个最优方案中,物品N没有被放入背包,那么问题就转化为”物品 1 , 2 , 3 , … , N − 1 1,2,3,\dots, N-1 1,2,3,,N1放入容量为 V V V的背包中“。 价值为 F [ N − 1 , V ] F[N-1,V] F[N1,V].

然而我们并不知道是放入 D D D还是不放入 D D D能够取得最优值。有可能放入 D D D能够取得最优值,也有可能不放入 D D D能够取得最优值,还有可能放入 D D D或者不放入 D D D都可以取得最优值。例如,物品种数为4, 4中物品的容量均为3, 价值均为5,背包的容量为9,则任选3个物品即为一个最优解。

我们知道的是: F [ N , V ] = max ⁡ ( F [ N − 1 , V − C N ] + W N , F [ N − 1 , V ) F[N, V] = \max (F[N-1,V-C_N]+W_N , F[N-1,V) F[N,V]=max(F[N1,VCN]+WN,F[N1,V)

同时我个人对背包问题有一些理解。即背包问题的子问题几乎很少是重叠的子问题,使用自顶向下算法似乎更加高效。然而现有的算法大部分均是自底向上的。附上我自己推演的自顶向下的例子。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IX1SsuG7-1682996640892)(背包问题详解/image-20230502110102554.png)]

背包问题中我最初的一些疑惑

1 我们设F[i,j]考虑前i件物品,容量限制为j时背包所能装的最大价值。则递推公式需要考虑两种情况:

要么不放入第i件物品,则F[i,j] = F[i-1,j] 。

要么放入第i件物品,则F[i,j] = F[i-1, j- C i C_i Ci]

我们需要取这两者的最大值才是最终的F[i,j]。

即F[i,j] = max(F[i-1, j], F[i-1, j- C i C_i Ci]).

我的疑惑是:第i件物品后于第i-1件物品被考虑,是否会出现由于先装入了部分前i-1件物品所导致第i件非常有价值的物品无法被装入的情况?

答:之所以将N件物品进行一个先后的排序,主要是为了记录不同物品的重量和价值。然而,每当我们考虑一件新的物品时,该物品可以放,也可以不放。我们得到的最大价值是两种选择的最大值。所以不会出现返回的是非最优解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序猿搬砖笔记(十二)

文章目录 PostConstruct注解Mybatis的mapper-locations配置JsonFormat实现原理IDEA String Manipulation插件使用及设置快捷键在Windows中测试服务器端口是否开放Centos开放端口Nginx常用配置详解Nginx里面的路径定位关键词root、aliaszuul里面的prefix 和 strip-prefix学习解决…

【三十天精通Vue 3】第二十四天 Vue3 移动端适配和响应式布局

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、 移动端适配概述1.1 为什么需要移动端适配?1.…

3.5 并行存储器

学习步骤: 如果我要学习并行存储器,我会采取以下几个步骤: 了解并行存储器的基本概念和原理。学习并行存储器的前提是要对存储器的基本原理有所了解,包括存储器的分类、工作原理、读写时序等。 学习并行存储器的特点和应用。并行…

Java每日一练(20230502)

目录 1. 二叉搜索树的最近公共祖先 🌟🌟 2. 随机分组问题 🌟 3. K 个一组翻转链表 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…

Vue 框架入门介绍

前言 前端时间工作任务没有那么忙,在技术总监沟通中他认为我自己花点时间做技术扩展,由于项目中用到前端部分功能,框架用的是Vue,本身项目中和前端同时接触比较多,而且公司有现成的项目可以供我去练习,所以…

存储资源调优技术——SmartMigration智能数据迁移技术

目录 基本概念 工作原理 注意事项 基本概念 智能数据迁移技术是业务迁移的关键技术 在不中断主机业务的情况下,实现源LUN上的业务完整--业务相关的所有数据 迁移到目标LUN上 工作原理 业务数据同步 创建SmartMigration,源LUN和目标LUN之间建立Pair关系&a…

RabbitMq、Kafka、RocketMq整理

MQ的主要作用:异步提高性能、解耦提高扩展性、削峰。 一、常见中间件对比 Kafka、RocketMq和RabbitMq最大的区别就是:前两个是分布式存储。 1.1、ActiveMq 优点:1)完全支持jms规范的消息中间件 ,2)提供丰富的api, 3)多种集群构建模式。 缺点:)在高并发的场景下,性能可…

计算机视觉——day88 读论文:基于驾驶员注意视野的交通目标检测与识别

基于驾驶员注意视野的交通目标检测与识别 II. RELATED WORKSA. 通用对象检测B. 交通标志检测与识别C. 车辆检测D.行人检测E. 交通灯检测 III. PROPOSED METHODA. The RoadLAB DatasetB. 驾驶员注视定位C. 目标检测阶段模型A模型B D.数据扩充E.综合检测结果F.物体识别阶段 IV. 实…

【Git】Git(分布式项目管理工具)在Windows本地/命令行中的基本操作以及在gitee中的操作,使用命令行、window,进行提交,同步,克隆

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

​【五一创作】基于mysql关系型实现分布式锁

看完该文预计用时:15分钟 看之前应具体的技术栈:springboot mysql nginx(了解即可) 目录 0.写在前面 1. 从减库存聊起 1.1. 环境准备 1.2. 简单实现减库存 1.3. 演示超卖现象 1.4. jvm锁问题演示 1.4.2. 原理 1.5. 多服务问…

Linux CentOS本地搭建Web站点,并实现公网访问

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章:Linux CentOS本地搭建…

ChatGPT提示词工程(六):Expanding扩展

目录 一、说明二、安装环境三、扩展(Expanding)1. 自定义自动回复客户电子邮件2. 提醒模型使用客户电子邮件中的详细信息3. 参数 temperature 一、说明 这是吴恩达 《ChatGPT Prompt Engineering for Developers》 的课程笔记系列。 本文是第六讲的内容…

linux编写脚本之快速入门

前言 在进行Linux测试时编写脚本是必不可少的。最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本。可以把太多的命令写成一个脚本,这样每次执行一遍 shell文件,就可以省去了敲击键盘的时间。于是在网上搜了一…

3.7 虚拟存储器

学习目标: 建议按照以下学习目标进行学习: 了解虚拟存储器的基本概念和原理。包括什么是虚拟存储器、虚拟地址和物理地址、虚拟内存、页面置换算法等。 了解虚拟存储器的实现方式。包括基于请求分页、请求分段和请求段页混合的虚拟存储器实现方式&…

前置操作:Kubernetes快速安装组件Kubectl Kubeadam Kubeinit

文章目录 配置K8S主从集群前置准备操作一:主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二:安装自动填充,虚拟机默认…

对接ChatGPT开发对话机器人小程序

前言 ChatGPT已经非常火爆了,企业开始招聘ChatGPT工程师,可能对接ChatGPT接口进行企业级开发是程序员必备的技能了。本篇文章主要是基于ChatGPT开发接口进行对接,使用微信小程序制作一款自己的聊天机器人,通过这一案例你可以展开…

图神经网络:在KarateClub上动手实现图神经网络

文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 文献阅读:代码实操: 文献阅读: 参考文…

JavaWeb05(删除增加修改功能实现连接数据库)

目录 一.实现删除功能 1.1 url如何传参? xx.do?参数参数值&参数名参数值 1.2 servlet如何拿对应值? //根据参数名拿到对应的参数值 String str req.getParameter("参数名") 1.3 如何询问? οnclick"return con…

区位码-GB2312

01-09区为特殊符号 10-15区为用户自定义符号区(未编码) 16-55区为一级汉字,按拼音排序 56-87区为二级汉字,按部首/笔画排序 88-94区为用户自定义汉字区(未编码) 特殊符号 区号:01 各类符号 0 1 2 3 4 …

I/O多路转接——epoll服务器代码编写

目录 一、poll​ 二、epoll 1.epoll 2.epoll的函数接口 ①epoll_create ②epoll_ctl ③epoll_wait 3.操作原理 三、epoll服务器编写 1.日志打印 2.TCP服务器 3.Epoll ①雏形 ②InitEpollServer 与 RunServer ③HandlerEvent 四、Epoll的工作模式 1.LT模式与ET…