01 背包专业化

2024-03-26

抱歉,如果这个问题已经得到解答,但我对算法没有深入的了解,并且并不总是注意到算法不同专业之间的微妙之处。我有(我认为是)01-背包问题的一个轻微变体。我有一个背包,其最大重量为 W,有 N 个重量为 w、价值为 v 的物品可供选择。我想要做的是最大化总价值 V,而不超过 W。

经典背包。

这是转折:在这些物品中,我需要确保我有一定的数量(不是最多的,但是exact数量)取自不同类别。

所以我们假设我们有类别

  • F - 食品
  • T - Toys
  • C - 衣服
  • M - 其他(F、T 或 C)

我要去 2 天的旅行,所以我需要带 2 份食物、1 个供孩子娱乐的玩具和 2 件衣服。作为一个补充,我可以额外选择一个 F、T 或 C 项目。请注意,每个项目都是唯一的,并且只能包含一次。

从我发现的所有算法来看,它似乎是 01(独特物品)和有界变体的混合体,尽管在经典的有界背包中,我们绑定了可以包含特定物品与特定物品的次数category

如果有人能给我指出正确的算法,我将不胜感激。使用“正常”语言编写的代码可以获得加分,如果实现允许我查看前 n 个最佳结果,则可以获得额外加分(你知道,如果最佳解决方案包括我真的无法忍受或拥有的玩具) 2 套相互冲突的服装)。

编辑:请注意,我希望最终能够进行更长的旅行,因此我考虑总共携带 8-10 件物品,并且类别最多可以包含 250 件左右的物品(那个孩子的玩具太多了)。我可以做一些优化来减少some每个类别中的项目的数量(我真的不会选择丑陋的夏威夷衬衫),但我无法将其减少到足以使直接暴力实施变得可行。


一种可能的 ILP/LP 表述(最明显的一种,但绝不只有一种表述)可能是:(未测试)

maximize sum(v[i] * x[i])
subject to:
0 <= x[i] <= 1        // can take every item at most once
sum(w[i] * x[i]) <= W // don't go over the weight limit
F <= sum(f[i] * x[i]) <= F + 1 // take F or F+1 food items
T <= sum(t[i] * x[i]) <= T + 1 // take T or T+1 toys
C <= sum(c[i] * x[i]) <= C + 1 // take C or C+1 clothes
sum(x[i]) == F + T + C + M     // take exactly the right number of items

Where v[i]是价值观,w[i]是权重,f[i]是物品的“善”,t[i]是“玩具”,现在你知道是什么了c[i]将。属于多个类别的物品计数为两倍或三倍(即,如果您拿走一个可食用玩具,它将计入玩具和食品),可以通过放入该物品的多个副本(每个副本一个)来避免这种情况其类别,其中每个副本仅属于一个类别。

但现在真正的问题是,如何解决?这仍然是一个活跃的研究领域,但这里有一个在这种情况下应该行之有效的想法。

有分支定界。使用线性松弛有界(用线性规划解决上述问题,允许决策变量x[i]是分数),对于这个问题,它应该给出一个相当不错的界限(并且可以接受,它总是会给出一个具有至少与解决 ILP 问题一样高的目标值的解决方案)。对非整数变量进行分支。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

01 背包专业化 的相关文章

  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l

随机推荐

  • PHP第一次将字符串写入新行而不是文件末尾

    使用Codeigniter函数write file 我可以像这样写入现有文件 write file path to file String four n a 假设我已经有一个这样的文件 String one String two Strin
  • Lua中如何去除字符串中的空格?

    我想从 Lua 中的字符串中删除所有空格 这是我尝试过的 string gsub str string gsub str string gsub str s 这似乎不起作用 如何删除所有空格 它有效 您只需分配实际结果 返回值 使用以下变体
  • 使用 Perl 的 SOAP::Lite 和 WSDL 文件进行 SOAP 调用

    我想对本地 Web 服务进行 SOAP 调用 Web 服务是通过 WSDL 文件定义的 见下文 我想使用 Perl 和 SOAP Lite 我试过这个 use strict use warnings use SOAP Lite my end
  • Xcode 异常断点不会打印抛出异常的详细信息

    SUMMARY 当我设置异常断点时 我没有收到异常消息 如何获取异常消息 我已经知道如何获取堆栈跟踪 但不包括异常消息 DETAILS 过去我使用 Xcode 开发 iOS 应用程序 当出现问题时 我会收到错误 异常 该异常通常会出现 无法
  • 如何在 Gattle 中注入恒定数量的用户?

    我不清楚如何控制加特林中的封闭工作负载模型 如果我使用constantConcurrentUsers 像这样 myScenario inject constantConcurrentUsers 40 during 2 minutes 我认为
  • Rails 资产最佳实践 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是 Rails 新手 无法找出组织
  • 迅捷继承:超级的超级

    假设这三个类具有简单的层次结构 class A func foo print A class B A override func foo super foo print B class C B override func foo print
  • 使用迭代器初始化字符串,出现“转置指针范围”异常

    也许是一个菜鸟问题 但为什么是这两行 vector
  • 将方法列表中的方法应用于 pandas 数据框

    这是我的第一个问题 所以请耐心等待 我的问题如下 假设我们有一个 pandas Dataframe 并且我们希望动态地将一些 pd Series 方法应用于该 Dataframe 的一组列 为什么下面的例子不起作用 testframe pd
  • Jenkinsfile 中的 Anaconda

    由于我们运行的测试越来越长 我认为从 Travis CI 切换到 Jenkins 在我的本地计算机上 是个好主意 设置 Jenkins 相对简单 但让我的 Jenkinsfile 工作 却不是那么简单 我正在尝试下载 miniconda g
  • 基于存储过程参数的条件 where 子句?

    我有一个带有参数的 SQL Server 2005 存储过程 includeClosedProjects 有一个WHERE我想根据这个参数控制的子句 create proc sel projects incClosedRel int 1 a
  • Sublime Text 2 Javascript 控制台

    我是 Sublime Text2 和 Javascript 新手 使用 Windows 8 我正在尝试在 Sublime Text 中创建一个 Javascript 控制台 我尝试了两种方法 但没有一个对我有用 方法一 我已经安装了在这里找
  • 如何在 android 中从 Http 或 RTSP Url 流式传输视频

    我想在 android 上播放 Http 和 Rtsp 的视频 目前我正在尝试使用 http 链接 但是当我的活动开始时 它只是开始播放带有空白黑屏的音频 没有视频显示 我在下面发布了我的代码 感谢您提前提供的任何帮助 如果有人可以提供一个
  • 检测字节顺序

    我目前正在尝试创建一个C无论目标系统的字节顺序如何 源代码都能正确处理 I O 我选择了 little endian 作为我的 I O 约定 这意味着 对于 big endian CPU 我需要在写入或读取时转换数据 转换不是问题 我面临的
  • C++ TR2 文件系统库的状态如何?

    截至上次布里斯托尔会议 C TR2 文件系统库的状态如何 它将成为 C 1Y C 14 的一部分 还是暂停 或者最近三次会议有任何已知的评论吗 It has 最近获得ISO委员会一致批准 http article gmane org gma
  • Ember 数据:已加载数据哈希...但未提供主键“未定义”

    我正在尝试使用 Ember Data 来加载模型 获取模型的 AJAX 调用似乎成功 但我得到以下信息 Uncaught Error assertion failed A data hash was loaded for a model o
  • 该元素导致 Firefox 中的元素溢出

    我不使用 Bootstrap 或 reset css reboot css 我正在尝试使用通用 css 构建一个网站 我正在做非常基本的事情 但我到处都得到 这个元素导致元素溢出 我已经有一段时间没有在没有任何 css 框架的情况下完成布局
  • C 中的字符串和指针

    include
  • 未检测到 Flash 10:世界上最普遍的网络视频错误?

    问题如下 确保您对网站上 Flash 版本 x 的要求能够正确检测到更高版本的 Adob e Flash Player 版本 10 或 1y 的存在的最佳方法是什么 现在谜团来了 为什么这么多需要 Flash Player 版本 8 和 9
  • 01 背包专业化

    抱歉 如果这个问题已经得到解答 但我对算法没有深入的了解 并且并不总是注意到算法不同专业之间的微妙之处 我有 我认为是 01 背包问题的一个轻微变体 我有一个背包 其最大重量为 W 有 N 个重量为 w 价值为 v 的物品可供选择 我想要做