当前位置: 首页 > 知识库问答 >
问题:

从最少数量的商店购买购物清单中的所有商品

田玉韵
2023-03-14

我有一个清单,上面有我想买的n个项目。(每项不同)

list = {item1, item2, item3 .... itemn}
shop1 = {item3, item5, item6 ...}
shop2 = {item1, item5, item8 ...}
...
shopk = {item1, item6, item8 ...}

我的解决方案1我使用暴力DFS和记忆。这给出了最优解,但具有昂贵的复杂性(O(N!))不符合我的要求。(k和n有时可达300)

我的解决方案2我使用了一个贪婪的解决方案,在这个解决方案中,我会访问在我的清单上提供最大数量商品的商店。购买项目,并从列表中删除所有这些项目。我重复这个,除非我的购物清单不是空的。(所需物品均不买)

虽然解决方案2运行得非常快,但不幸的是,这个解决方案并不是最佳的。

在谷歌搜索Solution3时,我发现了一个类似的问题,这个问题是用二分图和流解决的。(我仍在尝试设置一个类比,并检查这种方法是否适用于我的问题)

共有1个答案

姜智渊
2023-03-14

这是一个已知的问题吗?

是的,这是一个集合覆盖问题(具体地说,它的未加权品种)。它已知是NP完全的,所以你目前只限于近似的或太慢而无法实用的解。

 类似资料:
  • 偶尔,我妻子带着购物清单送我去一家真正的超市(她给我写一张纸,或者给我发短信)。 我通过的超级中的任何项:检查我的列表(m)中是否有这样的项,将给我一个共谋,这不是那么有效。 “划分”商店的行:站在每一行的开头,我可以阅读标志或查看我应该在那里找到哪种类型的商品,而不是迭代我的列表,试图记住列表中我应该在那一行找到的所有商品。而不是走那一行并将那些项目添加到我的购物车,应该给我共谋。但这种情况从未

  • 我对Java的概念很陌生。我使用核心java设计了一个购物车应用程序。但我无法获得所需的输出。这是我的pojo课程项目。Java语言 主要课程是ShopCartTest。Java语言 有4个pojo的购物车,库存,项目,用户。用户必须能够选择多个数量的多个项目。(对于项目,将创建一个列表,对于数量:映射。其中项目对象是键,数量是值)。用户选择类别、项目,然后选择数量。然后他可以继续结帐。所以当他决

  • 下载(购买)商品 若要使用此机能,可能需先更新系统软件。 进入(PlayStation®Store),可下载(购买)PSP™专用游戏、游戏的追加道具、影像内容等商品。但在(PlayStation®Store)下载(购买)商品前,需先新建PlayStation®Network的账户。 已下载(购买)的商品会保存至以下其中一个位置: - Memory Stick™ - 主机内存   1. 进入主选单的

  • 服务商品的购买 服务商品的购买 更新时间:2018-03-14 17:47:17 从服务商品的详情页开始,选择合适的套餐版本,可以看到对应套餐配额,配额即为该规格下支持调用服务API的次数。Link Develop平台的服务产品,“购买时长”固定为“单次”,购买的套餐个数只能为1个。点击“立即购买”,进入下方的确认订单页。 确认订单页会根据所选规格自动计算价格。核对订单信息无误,点击“去支付”。

  • 硬件商品的购买 硬件商品的购买 更新时间:2018-03-14 17:46:36 从硬件商品的详情页开始,选择合适的规格及数量,页面会根据商品后台设置的计价规则自动计算价格。Link Develop平台的硬件产品,“购买时长”固定为“单次”,购买的套餐个数只能为1个。点击“立即购买”,进入下方的确认订单页。 确认订单页会根据所选规格自动计算价格,硬件的物流地址可以通过“添加订单备注”来标注。核对订

  • Web插件商品的购买 Web插件商品的购买 更新时间:2018-03-14 17:48:16 从Web插件商品的详情页开始,选择合适的套餐版本,可以看到对应套餐配额,配额即为该规格下支持应用集成该插件的次数。Link Develop平台的Web插件产品,“购买时长”固定为“单次”,购买的套餐个数只能为1个。点击“立即购买”,进入下方的确认订单页。 确认订单页会根据所选规格自动计算价格。核对订单信息