C 用最大容量为W的箱子包装n件物品时,尽量减少箱子的数量,同时尽量减少浪费的箱子空间?

C 用最大容量为W的箱子包装n件物品时,尽量减少箱子的数量,同时尽量减少浪费的箱子空间?,c,algorithm,dynamic-programming,greedy,bin-packing,C,Algorithm,Dynamic Programming,Greedy,Bin Packing,因此,您希望将不同重量的n物品w_i装入最大重量容量为w的箱子中 这类似于一般的箱子包装问题,但以下约束使其不同(可能更容易): 项目顺序为w_1,…,w_i,…,w_n和在考虑下一个项目之前,必须先放置第一个项目 最后,您还希望最小化每个垃圾箱中浪费的空间。这是由一个目标函数定义的——用外行的话说,一般的行为是这样的:如果垃圾箱的浪费量小于或等于5%,你就可以了,而且没有记录。否则,如果浪费超过5%,则会记录下来,您不希望这样 目标:尽量减少使用的垃圾箱数量,同时尽量减少浪费的空间优先考虑的是

因此,您希望将不同重量的n物品w_i装入最大重量容量为w的箱子中

这类似于一般的箱子包装问题,但以下约束使其不同(可能更容易):


  • 项目顺序为w_1,…,w_i,…,w_n和在考虑下一个项目之前,必须先放置第一个项目
  • 最后,您还希望最小化每个垃圾箱中浪费的空间。这是由一个目标函数定义的——用外行的话说,一般的行为是这样的:如果垃圾箱的浪费量小于或等于5%,你就可以了,而且没有记录。否则,如果浪费超过5%,则会记录下来,您不希望这样

    目标:尽量减少使用的垃圾箱数量,同时尽量减少浪费的空间优先考虑的是首先最小化箱子的数量。

    这方面的最佳算法/方法是什么


    我不确定这是否是装箱问题的变种,但我问它,好像它是无论如何。如果你们知道更适合哪个问题,请告诉我

    另外,我想知道我可以用来解决这类问题的所有可能的方法(动态规划或贪婪方法)

    一些未实现的解决方案尝试:

  • 我尝试了类似于First Fit算法的贪婪方法,但它并不总是得到最优解。有时,由于没有考虑其他组合,浪费的空间并不总是最小化。(这些其他组合浪费的空间更少)
  • 我还考虑了Dijkstra算法的一些变体,只关注最小化浪费的空间。然而,这一次,我发现它并不总是产生最小的垃圾箱
  • 就这样。到目前为止,我只是尝试了贪婪的方法,因为我希望有一个简单的方法来解决它。如果没有,那么请告诉我。即使有伤害,我也会接受真相。谢谢

    编辑:
    我只想知道它是否可以用另一种贪婪的方法解决。此外,我想知道我可以搜索和学习什么样的一般问题,以便它可以帮助我解决这个问题

    “在考虑下一个项目之前,必须先放置第一个项目”-这意味着您已经吃饱了。你所能做的就是猜测

    我想说的是,当每件物品到达时,你首先检查是否有一个垃圾箱会从>5%的垃圾变成垃圾≤5%的垃圾放在那里,然后你检查是否有一个箱子放在合适的地方,如果它不适合任何地方,你把它放在一个新的箱子里


    整个标准似乎有点可笑。为什么96%、94.5%、94.5%的三个垃圾箱比95%、95%和95%的三个垃圾箱更差?基本上,这意味着你想把一个垃圾桶装满95%以上,因为如果你把一个垃圾桶装满100%,可能意味着另一个垃圾桶低于95%。这是直到你需要一个新的垃圾箱,因为你有所有这些几乎5%的差距

    我投票结束这个问题,因为我们不是“做我的家庭作业”服务。将您的代码显示为,并说明您的具体问题。“在考虑下一个项目之前,必须先放置第一个项目”此条件的确切含义是什么?@n.m.在考虑下一个项目之前,必须先将第一个项目放置在当前箱子中。“我的错,它不清楚。@奥拉夫很抱歉说得含糊不清,我编辑了这篇文章。我并不是在要求对这个问题有一个完整的解决方案(所以我想对我的尝试有一些简单的见解就足够了)。我只是想找一些建议,这样我就可以从某个地方开始了。(但如果这个动机也是错误的,那么请告诉我我不是很确定)或者干脆删除这个问题,什么也不要问,因为这个新问题完全是无关紧要的。如果重量适合当前箱子,请将其放入当前箱子。如果没有,请启动一个新的垃圾箱。仅此而已。没有任何情况下,其他决定会导致更好的包装。是的,5%的标准只是某种偏好(想不出任何其他现实生活中的例子)。当有3个垃圾箱都达到95%时,技术上就不会浪费空间。与96%、94.5%、94.5%的示例(浪费了1%的空间)相比,您更喜欢此示例。此外,关于“你所能做的就是猜测”,这是否意味着没有最佳的方法?或者我仍然可以使用动态规划方法吗?如果必须在查看后续项目之前决定项目将进入哪个箱子,我不认为动态规划有什么帮助。当查看项目
    N
    时,您不能通过
    N-1
    更改项目
    1
    的位置,并且您不知道项目
    N+1
    的任何信息。所以我想正如@gnasher729所说的:你吃饱了。