我有许多项目N,我想将它们均匀地分布在多个C箱中。我的第一个想法是生成一个介于 0 和 1 之间的随机双数,然后将它与数字N相乘,但它没有按我预期的那样工作。我们目前正在开发一个 Java 项目,但一般算法就可以了。
垃圾箱没有特定的容量,数字没有重量
我有许多项目N,我想将它们均匀地分布在多个C箱中。我的第一个想法是生成一个介于 0 和 1 之间的随机双数,然后将它与数字N相乘,但它没有按我预期的那样工作。我们目前正在开发一个 Java 项目,但一般算法就可以了。
垃圾箱没有特定的容量,数字没有重量
您尚未指定“均匀分布”的含义。
将 N 个项目分配到 C 个箱中有 M=C N个变体。因此,您可以在 0..M-1 范围内随机整数并用C 进制数字系统表示它以获得随机组合。
鉴于所有物品和箱子都是相同的,我们可以使用以下简单的方法,这绝对不是最有效的方法,但它既简单又有效。
创建一个包含序列 1 到 N 的向量,并使用函数随机打乱这些值(例如Collections.shuffle(values)
)。然后将第一个 N/C 项目放在第一个 bin 中,以下 N/C 项目放在第二个 bin 中,依此类推。
例如,我们有 N=10 个项目和 C=2 个箱。我们创建向量val = {1,2,3,4,5,6,7,8,9,10}
并使用随机 shuffle 函数给出val = {4,8,2,1,9,10,5,3,6,7}
. 然后用这个得到以下两个bin1:{4,8,2,1,9}和bin2:{10,5,3,6,7}