我有一些物品N我想将它们均匀分配到若干C箱中。我的第一个目的是生成一个0到1之间的随机双数,然后将它与数字N相乘,但它没有按我的预期工作。我们目前正在开发一个Java项目,但一般算法会很好。将N物品均匀分配到C箱
垃圾箱没有具体的容量和数量没有权重
我有一些物品N我想将它们均匀分配到若干C箱中。我的第一个目的是生成一个0到1之间的随机双数,然后将它与数字N相乘,但它没有按我的预期工作。我们目前正在开发一个Java项目,但一般算法会很好。将N物品均匀分配到C箱
垃圾箱没有具体的容量和数量没有权重
由于所有项目和箱相同,我们可以用下面简单的办法,这是defintely不走最有效的方式,但很容易和作品。
创建包含序列1至N的矢量和使用函数来随机洗牌的值(例如,Collections.shuffle(values)
)。然后,第一N/C物品放置在第一仓,在第二个,等等以下N/C项..
实施例,我们有N = 10个项目和C = 2个箱。我们创建矢量val = {1,2,3,4,5,6,7,8,9,10}
并使用随机洗牌功能给出val = {4,8,2,1,9,10,5,3,6,7}
。然后用这个来得到以下两个bin: bin1:{4,8,2,1,9}和bin2:{10,5,3,6,7}
您还没有指定“均匀分配“。
有M = C N N个项目分布到C仓的变种。所以你可以在0..M-1范围内随机整数,并在C-ary numeral system中表示它以获得随机组合。
是否所有项目具有相同的尺寸/重量,即有在垃圾箱没有容量限制? – Michiel
不,没有容量的垃圾箱,没有重量我应该提到,现在将编辑!谢谢 – Fotis
是否订购了箱子(意味着只将物品1,2,3放入箱子1中与将箱子放入箱子5不同)?物品可以不平均分成多个箱子,例如箱= 2,物品= 1,2,3?一些示例输入和输出总是有助于澄清问题。 – Dukeling