2013-02-19 83 views
7

所以我想制作一个脚本,它将随机将4的值分成12个不同的变量。我想不出一个好的方法来正确地做到这一点。我考虑过对数字进行随机化,以使它们接近0.33(4/12中的1/12),但这往往会导致最后几个数字被忽略。任何人都曾尝试过这样的事情,或者对于如何使这个尽可能随机且均匀不均匀有什么好的想法?将一个数字划分为随机不等份

回答

17

从您最喜欢的随机数生成器中生成12个随机数,请拨打r1..r12

将它们全部加起来,请拨打总和sum

4的第一个随机部分是(r1/sum)*4。其余的应该是显而易见的。

+0

太棒了!非常感谢! – Tom 2013-02-19 13:58:40

+0

请注意,此解决方案不会生成以逻辑方式均匀分布的数字集,但它是大多数人似乎选择的解决方案,因为他们不明白为什么它不能产生真正一致的东西。 – 2013-02-19 16:09:37

+0

@woodchips:为这种批评提供一些证明(虽然它是正确的),对于提供生成均匀分布的分区的答案更有帮助。我试图做后者,但我不确定它是否正确。 – rici 2013-02-19 19:21:17

8

生成任何大于1的随机数,然后重新缩放到所需的总和。

实施例:

  • 必需总和:4
  • 随机编号:1 2 3 4 5 6 7 8 9 10 11 12
  • 萨姆= 78
  • 重标号:

1 rescaled to(1 * 4)/ 78

2重新缩放至(2×4)/ 78

...

12重新缩放到(12 * 4)/ 78

2

下面的算法提供了均匀分布的分区,假定有可能以在连续范围内(或者至少在具有足够多的可能值的离散范围上产生均匀分布的随机数,以致重复的可能性可忽略不计)。

为了产生的t一个分区到k值:

  • 范围[0, t]生成k-1均匀分布的值。

  • 对它们进行排序,并在开始处添加0,最后添加。

  • 使用相邻的差异作为分区。