我有一个有趣的(或者也许很简单)的问题需要解决。 有不同的大小块(例如0.5或50等任何实数)可在存储桶之间分配。铲斗尺寸始终为64。
要解决的问题是以这样的方式分配块:浪费存储区中最少的空间。
寻求天真解决方案的人可以在存储桶上进行迭代,然后将第n个元素推入该块可以放入的第一个存储桶中。如果没有适合该元素的存储桶-将创建新的存储桶。
有没有更好的方法做到这一点,或者天真的解决方案还是一种最佳解决方案?
答案 0 :(得分:1)
这是一个数学上很复杂的问题,称为Bin Packing Problem。
您可能会找不到实现optimal soloution的简便方法。 This页提到了一种解决方案,始终将块放在适合它的最大存储桶中。
我认为事先分析整个数据集是获得最佳解决方案的关键,但似乎实施起来并不容易。
答案 1 :(得分:0)
您可以按可用空间(例如,从最大可用空间到最小可用空间)对存储分区进行排序。算法为: