繁体   English   中英

通过最少移动数来最小化装满球的桶的最大重量的算法

[英]Algorithms to Minimize Maximum Weight across Buckets filled with Balls by Making Least Number of Moves

我有K个水桶。 每个桶包含一定数量的球B,其中每个球都有一定的重量。

我想知道是否有算法可以完成以下任务:

我想一次移动一次,然后将一些重量从一个存储桶转移到另一个存储桶,以使所有存储桶的最大重量最小。 我想重复此过程,直到通过最少的步骤获得最平衡的重量配置。

有没有解决该问题的算法?

这是我想到的方法:

  1. 天真:遍历铲斗中所有球的组合,并采用具有min(max(所有铲斗上的重量)的变体。这是我的最佳配置。现在一次移动一个球,直到实现此配置。 ,但无法编程,因为我们有num_buckets ^ num_balls个复杂度,这会导致无效的球数很大。

  2. 贪婪树:从头开始,以循环方式贪婪地将球分布在垃圾箱中。 在每次迭代中-将球放入最大最小的容器中。 这不会带来最佳的平衡,但是会带来更好的平衡,然后我可以一步一步地实现此配置。

这感觉就像是一个问题,其中我具有成本函数,并且在第一步中具有BxK的移动次数。

是否有已知的算法可以激发更好的解决方案? (由于我有固定数量的垃圾箱,因此垃圾箱在这里不起作用。)我不是在寻找一种解决方案,而是寻找一种解决平衡问题的算法,即使看起来不完全一样,它也与此相似。

首先,让我们对贪婪算法进行一些限制:将球按降序排列(最重)。

之后,从最重到最轻的垃圾箱进行工作。 对于每个垃圾箱,寻找可以减轻其重量而又不使移动的其他垃圾箱达到最大重量的交换或移动。 继续此过程,直到无法再改善最重的垃圾箱为止。

我无法证明这是否会为您提供最佳解决方案,但这将是非常不错的。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM