非均匀随机数发生器实现?

5 random statistics numbers

我需要一个随机数生成器,它使用可编程平均值来选择指定范围内的数字.

例如,我需要选择2到14之间的数字,我需要随机数的平均值为5.

我经常使用随机数发生器.通常我只需要一个统一的分布.

我甚至不知道该怎么称呼这种分布.

感谢您提供的任何帮助或见解.

Dan*_*yer 6

如果您对该分布的形状感到满意,则可以使用二项分布.设置n = 12且p = 0.25.这将为您提供0到12之间的值,平均值为3.只需为每个结果添加2即可获得您想要的范围和平均值.

编辑:至于实现,您可能会找到一个支持非统一分发的所选语言库(我自己为Java编写了一个).

使用均匀的RNG可以相当容易地近似二项分布.只需执行n次试验并记录成功次数.因此,如果你有n = 10和p = 0.5,就像连续10次掷硬币并计算头数一样.对于p = 0.25,只生成0到3之间的均匀分布值,并且仅将零作为成功计数.

如果你想要一个更有效的实现,那么在Knuth的计算机编程艺术第2卷的练习中隐藏着一个聪明的算法.


Fra*_*ack 0

我的第一个想法是:

  • 生成 0..1 范围内的数字
  • 缩放范围为 -9..9 ( x-0.5; x*18)
  • 移位范围 5 -> -4 .. 14(加 5)
  • 将范围截断为 2..14(丢弃 < 2 的数字)

这应该会给你你想要的范围内的数字。