我有很多项 N ,我想在一些 C 箱中统一分发它们。我的第一个是生成0到1之间的随机双数,然后将它与数字 N 相乘,但它没有像我预期的那样工作。我们目前正在开发一个Java项目,但通用算法没问题。
垃圾箱没有特定容量,数字没有重量
答案 0 :(得分:0)
鉴于所有项目和箱子都是相同的,我们可以使用以下简单方法,这绝对不是最有效的方法,但它很容易且有效。
创建一个包含序列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}
答案 1 :(得分:0)
您没有通过“均匀分发”来指明您的意思。
存在M = C N 变体,其中N个项目分布到C个区间。所以你可以在0..M-1范围内随机整数,并在C-ary numeral system中表示它以获得随机组合。