以最佳方式将多个文件分组

时间:2014-05-21 09:00:49

标签: algorithm

我需要将二进制文件列表分为4批。我不想拆分单个二进制文件,只需将它们分组,使每个批处理的总文件大小几乎相同。例如,如果我有6个大小为10,20,30,40,50,60 MB的文件。我希望他们在批次1中分别为60,批次2 50,批次3 50(40 + 10),批次4 50(30 + 20)。 在大多数情况下是否存在实现最佳分组的算法。谢谢。

2 个答案:

答案 0 :(得分:1)

它记得我的垃圾箱问题 - > http://en.wikipedia.org/wiki/Bin_packing_problem 您的案例中的大小是最大文件的维度,因为您不想将它们拆分。

答案 1 :(得分:1)

如上所述,它是垃圾箱包装。通常情况下,人们希望尽可能地收拾垃圾箱,并使用较少的垃圾箱,但听起来你总是只有四个,并希望它们尽可能地均匀包装。

如果您始终拥有可供排序的整个文件列表,我认为“降序最差”方法将起作用:

1. sort the list of files
2. for each file in the sorted list:
3.     pack it in the bin which is currently least-packed

如果你有很多垃圾箱,我建议你把它们放在一堆,但是考虑到它只有4个,它足够快,可以全部通过它们并不断更新对最少打包的引用。

这是典型包装策略的一个很好的概述:http://www.cs.arizona.edu/icon/oddsends/bpack/bpack.htm