Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将N个项目均匀分配到C个箱子中_Algorithm_Uniform Distribution - Fatal编程技术网

Algorithm 将N个项目均匀分配到C个箱子中

Algorithm 将N个项目均匀分配到C个箱子中,algorithm,uniform-distribution,Algorithm,Uniform Distribution,我有许多物品N,我想将它们均匀地分布在多个C箱子中。我的第一个想法是生成一个介于0和1之间的随机双倍数,然后将其与数字N相乘,但它没有像我预期的那样工作。我们目前正在进行一个Java项目,但是一个通用算法就可以了 箱子没有特定的容量,数字也没有重量鉴于所有物品和箱子都是相同的,我们可以使用以下简单的方法,这肯定不是最有效的方法,但它很简单且有效 创建一个包含序列1到N的向量,并使用函数随机洗牌这些值(例如,Collections.shuffle(values))。然后将第一个N/C项目放在第一个

我有许多物品N,我想将它们均匀地分布在多个C箱子中。我的第一个想法是生成一个介于0和1之间的随机双倍数,然后将其与数字N相乘,但它没有像我预期的那样工作。我们目前正在进行一个Java项目,但是一个通用算法就可以了


箱子没有特定的容量,数字也没有重量

鉴于所有物品和箱子都是相同的,我们可以使用以下简单的方法,这肯定不是最有效的方法,但它很简单且有效

创建一个包含序列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}
。然后用这个来得到以下两个箱子
bin1:{4,8,2,1,9}和bin2:{10,5,3,6,7}

您没有指定“均匀分布”的含义


有M=CN变量将N个项目分配到C个箱子中。因此,您可以随机选择0..M-1范围内的整数,并将其表示为随机组合。

所有项目是否具有相同的大小/重量,即箱子上没有容量限制?没有箱子上没有容量,也没有我应该提到的将立即编辑的重量!感谢您订购了垃圾箱(意味着只将物品1、2、3放入垃圾箱1与放入垃圾箱5不同)?项目是否可以不平等地划分为箱子,例如箱子=2,项目=1,2,3?一些输入和输出的例子总是有助于澄清问题。你应该用C乘以随机数,而不是N。也许这只是一个打字错误;在任何情况下,你都应该澄清你的期望没有得到满足的原因。(这将使您更清楚地了解您的期望值。)“均匀分布”可能意味着每个仓位拥有相等数量的物品(或者如果物品%bins!=0,仓位中的物品计数差为1).@Dukeling我们可以想出这个词的许多含义:)希望作者能澄清他的需求。@Dukeling这就是我需要的数字,比如说100和10个箱子,一个箱子可以有12个物品,另外10个,以此类推……@Fotis 9个箱子每个有1个物品,一个箱子有91个物品是有效的可能性吗?或者9个箱子有0个物品,1个箱子有100个?@Dukeling我认为在这种情况下,物品分布不均匀。