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

Algorithm 通过最少的移动次数最小化装满球的桶的最大重量的算法,algorithm,load-balancing,Algorithm,Load Balancing,我有K个桶。每个桶包含一定数量的球B,其中每个球都有一定的重量 我想知道是否有算法可以实现以下功能: 我想一次移动一个位置,将一些重量从一个桶移动到另一个桶,使所有桶的最大重量最小化。我想重复这个过程,直到我通过最少的步骤实现桶中重量的最平衡配置 在解决这个问题时,有哪些算法是有用的 以下是我想到的方法: 天真:检查桶中所有球的组合,并选择最小值(最大值)(所有桶的重量)的变体。这是我的最佳配置。现在一次移动一个球,直到达到此配置。这将起作用,但无法编程,因为我们有num_bucket ^num

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

我想知道是否有算法可以实现以下功能:

我想一次移动一个位置,将一些重量从一个桶移动到另一个桶,使所有桶的最大重量最小化。我想重复这个过程,直到我通过最少的步骤实现桶中重量的最平衡配置

在解决这个问题时,有哪些算法是有用的

以下是我想到的方法:

  • 天真:检查桶中所有球的组合,并选择最小值(最大值)(所有桶的重量)的变体。这是我的最佳配置。现在一次移动一个球,直到达到此配置。这将起作用,但无法编程,因为我们有num_bucket ^num_balls复杂度,这将在球数方面效率低下。非常好

  • 贪婪树:从头开始,以循环的方式贪婪地将球分配到各个箱子中。在每次迭代中,将球放入具有最小最大值的箱子中。这不会提供最佳平衡,但会提供更好的平衡,然后我可以一次采取一步来实现此配置

  • 这感觉像是一个问题,我有一个成本函数,在我的第一步有BxK的移动次数


    有没有已知的算法可以激发出更好的解决方案?(箱子打包在这里不起作用,因为我有固定数量的箱子。)我不是在寻找一个解决方案,而是在寻找一种算法来解决与此类似的平衡问题,即使不完全相同。

    首先,让我们稍微限制贪婪算法:将球按降序排列,最重的放在第一位

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

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