将数字除以随机不等的部分

时间:2013-02-19 13:53:26

标签: php algorithm math

所以我试图创建一个脚本,将4的值随机分成12个不同的变量。我想不出一个好的方法来做到这一点。我考虑过随机化数字,使它们接近0.33(1/4 of 4),但这通常会导致最后几个数字的优先级不足。任何人之前都尝试过这样的事情,或者对于如何使其尽可能随机且均匀地不均匀有任何好主意?

3 个答案:

答案 0 :(得分:23)

从您最喜欢的随机数生成器生成12个随机数,称之为r1..r12

全部添加,调用总和sum

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

答案 1 :(得分:8)

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

示例:

  • 所需金额:4
  • 随机数:1 2 3 4 5 6 7 8 9 10 11 12
  • Sum = 78
  • 重新调整的号码:

1重新缩放为(1 * 4)/ 78

2重新调整为(2 * 4)/ 78

...

12重新调整为(12 * 4)/ 78

答案 2 :(得分:2)

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

要生成tk值的分区:

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

  • 对它们进行排序,并在开头添加0,在结尾添加t

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