【问题标题】:Do I need to use a bin packing algorithm, or knapsack?我需要使用装箱算法还是背包?
【发布时间】:2017-03-07 17:04:16
【问题描述】:

这是问题陈述:

我有 m 个整数长度的巧克力棒和 n 个孩子 想要整数数量的巧克力。哪里总巧克力需要 孩子们小于或等于巧克力的总量 你有。您需要编写一个算法,将巧克力分发到 孩子们通过对酒吧进行最少数量的切割。

例如,对于 M = {1,3,7},N = {1,3,4},最少切割数为 1。

我没有任何正式的算法经验,谁能给我任何提示,告诉我应该从什么开始阅读以有效地解决这个问题?

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。 StackOverflow 不是设计、编码或教程服务。
  • m & n 有多大?
  • @shole,m和n可以是任意大小,但巧克力的总量总是大于等于孩子们的总需求量

标签: python algorithm dynamic-programming knapsack-problem bin-packing


【解决方案1】:

这个任务可以简化为解决几个背包问题。为了解决这些问题,通常采用贪婪搜索的原理,切割的数量是搜索的标准。

算法的第一个明显步骤是检查余额。 第二步是排列巧克力棒和巧克力需求的数组,这将简化进一步的计算。这实现了贪婪搜索的原理。 第三个明显的步骤是找到并使用所有条形,它们的大小与需要相符。

下一步是找到并使用满足需求的所有条形组合。此任务需要按需求降序进行“贪婪”搜索,这将在进一步的计算中继续进行。这个标准不是最优的,但它可以形成一个基本的解决方案。

如果不是所有的孩子都收到了巧克力,那么割伤就很明显了。搜索应根据图块的递减大小进行。首先,应该检查所有可能性,一次将切割的瓷砖给两个孩子,然后一样,但如果使用一个现有的瓷砖,等等。 之后有一个明显的变体“一刀一需要”,允许形成基本变体。但如果还有计算资源,可以先用它们来计算“二缝三需”等类型的选项。

进一步优化包括返回到以下变体的步骤和计算。

【讨论】:

  • 这很能反映我的想法,谢谢你的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多