【问题标题】:Uniformly distribute N items into C bins将 N 个项目均匀地分配到 C 个 bin 中
【发布时间】:2017-05-25 11:14:18
【问题描述】:

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

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

【问题讨论】:

  • 所有物品的尺寸/重量是否相同,即箱子没有容量限制?
  • 不,垃圾箱上没有容量,也没有我应该提到的现在要编辑的重量!谢谢
  • 箱子是否有序(意味着仅将项目 1、2、3 放入箱子 1 与将它们放入箱子 5 不同)?物品是否可以不均等地分成垃圾箱,例如箱 = 2,项目 = 1,2,3?一些示例输入和输出总是有助于澄清问题。
  • 您应该将随机数乘以 C,而不是乘以 N。也许这只是一个错字;无论如何,您应该澄清您的期望是如何没有得到满足的。 (这样可以更清楚地说明您的期望是什么。)

标签: algorithm uniform-distribution


【解决方案1】:

您还没有具体说明“均匀分布”是什么意思。

有 M=CN 个变体将 N 个项目分配到 C 个箱中。所以你可以在 0..M-1 范围内随机整数并用C-ary numeral system 表示它以获得随机组合。

【讨论】:

  • “均匀分布”可能意味着每个 bin 具有相同数量的项目(或者,如果 items % bins != 0,则 item-count-in-bin 差异为 1)。
  • @Dukeling 我们可以想出这个词的很多含义:)希望作者能澄清他的需求。
  • @Dukeling 这就是我需要有一个数字让我们说 100 和 10 个垃圾箱,一个垃圾箱可以有 12 件物品,另外 10 个等等......
  • @Fotis 9 个箱子每个有 1 件物品,一个箱子有 91 件物品是否可行?还是 9 个箱子有 0 个项目,1 个箱子有 100 个?
  • @Dukeling 我相信在这种情况下,这些物品不是均匀分布的。
【解决方案2】:

鉴于所有物品和垃圾箱都是相同的,我们可以使用以下简单方法,这绝对不是最有效的方法,但它既简单又有效。

创建一个包含序列 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} 并使用随机洗牌函数给出val = {4,8,2,1,9,10,5,3,6,7}。然后用这个得到下面两个bin bin1:{4,8,2,1,9} 和 bin2:{10,5,3,6,7}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2012-05-21
    • 2012-04-11
    • 2021-06-03
    • 2011-12-29
    相关资源
    最近更新 更多