栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有多个袋子和仅重量的物品的背包

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有多个袋子和仅重量的物品的背包

这被称为垃圾箱包装问题(NP难题)。

通过简单地按其大小对降序进行排序,然后将每个项目插入列表中具有足够剩余空间的第一个垃圾箱中,就可以得到

11/9 OPT +6/9
垃圾箱(其中
OPT
是最佳解决方案中使用的垃圾箱数)。这很容易实现
O(n²)
,或者可能
O(n log n)
具有有效的实现。

就最佳解决方案而言,没有一个背包问题众所周知的动态编程解决方案。该资源有一个选项-基本思想是:

D[{set}] = the minimum number of bags using each of the items in {set}Then:D[{set1}] = the minimum of all D[{set1} - {set2}] where set2 fits into 1

bag
and is a subset of
set1

上面的数组索引实际上是一个集合-可以将其视为集合到值的映射,位图或多维数组,其中每个索引为1或0以指示我们是否包括与该维度相对应的项。

链接的资源实际上考虑了多种类型,这些类型可以多次出现-我从中得出了上述解决方案。

运行时间将在很大程度上取决于可放入袋子的物品的数量-它将是多少。

O(minimumBagsUsed.2maxItemsPerBag)

在1袋的情况下,这本质上是子集和问题。为此,您可以将重量与值视为相同,并使用背包算法求解,但是对于多个袋子来说,这实际上并不是很好。

为什么不?考虑

5,5,5,9,9,9
袋子大小为的物品
16
。如果只解决子集和,则剩下的只有
5,5,5
一个袋子,
9
每个袋子一个(总共
4
袋子),而不是
5,9
三个袋子。

子集总和/背包的问题已经很棘手-如果使用它不能为您提供最佳解决方案,那么您也可以使用上面的排序/贪婪方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号