不同大小的块可最佳分配给固定大小的存储桶

时间:2018-08-22 17:43:39

标签: javascript algorithm

我有一个有趣的(或者也许很简单)的问题需要解决。 有不同的大小块(例如0.5或50等任何实数)可在存储桶之间分配。铲斗尺寸始终为64。

要解决的问题是以这样的方式分配块:浪费存储区中最少的空间。

寻求天真解决方案的人可以在存储桶上进行迭代,然后将第n个元素推入该块可以放入的第一个存储桶中。如果没有适合该元素的存储桶-将创建新的存储桶。

有没有更好的方法做到这一点,或者天真的解决方案还是一种最佳解决方案?

2 个答案:

答案 0 :(得分:1)

这是一个数学上很复杂的问题,称为Bin Packing Problem

您可能会找不到实现optimal soloution的简便方法。 This页提到了一种解决方案,始终将块放在适合它的最大存储桶中。

我认为事先分析整个数据集是获得最佳解决方案的关键,但似乎实施起来并不容易。

答案 1 :(得分:0)

您可以按可用空间(例如,从最大可用空间到最小可用空间)对存储分区进行排序。算法为:

  1. 列表最初是空的。
  2. 为即将到来的新块创建第一个块。
  3. 下一个来了。检查它是否适合第一个存储桶。如果没有,请创建一个新的并检查是否可用。如果新的可用空间比第一个大,请将其放在列表的前面,否则追加到末尾。
  4. 从本质上讲,此问题的范围缩小到执行二进制搜索以找到哪个存储桶适合新元素,并为您在当前步骤中更新的元素找到新位置。