【问题标题】:How can I distort the distribution of a set of random numbers?如何扭曲一组随机数的分布?
【发布时间】:2012-11-07 05:21:51
【问题描述】:

我想设计一个算法,它会给我随机的数字,我不知道它们会是什么,但同时,更接近 0 的数字必须更有可能作为输出出现,而那些更接近1 的可能性必须较小。我想同时使用线性和指数分布,所以请至少给出实现两者的提示。

我已经考虑过如何解决这个问题,但我仍然没有任何线索,所以任何指针都将不胜感激。

注意:我不打算讨论,也不了解“真实”与“伪”随机性的复杂性......这与安全性或密码学无关,为此我会只需使用 Javascript 的 Math.random() 作为种子,这样我们就清楚我在问什么。

【问题讨论】:

  • 您可以使用指数函数,但必须使用概率密度,或者您可以建立一个范围,例如 P(0
  • 抱歉,您能给我一个关于您正在使用的符号的快速入门吗?我制作了这个简单的图形脚本,以便通过插图更好地理解这些内容,但它并没有真正起作用。也许你也可以看看那个? jsfiddle.net/eg3bU/2
  • @AlbertoBonsanto 搞定了... :) 看看! jsfiddle.net/RTbrL

标签: javascript math random numbers distribution


【解决方案1】:
var random = Math.pow(Math.random(), 2);

【讨论】:

  • 你能再详细说明一下吗?由于随机数的迷幻性,我真的很难理解这会产生什么影响,但它似乎很有趣。
  • 它为您提供 0 到 1 之间的随机数。数字更可能在 0 左右而不是在 1 左右。如果增加数字 2,随机数将更可能在 0 左右。
  • 如何获得线性递减分布? var rand = 2*Math.random()?
  • 2*Math.random() 只会给你 0 到 1.9999999999999999 之间的数字...任何数字都有相同的变化。
  • 顺便说一句,我刚刚创建了这个脚本来轻松绘制不同类型的分布函数。现在一切正常。 jsfiddle.net/RTbrL
【解决方案2】:

看看泊松分布,也许你可以将它用于你自己的目的,本质上泊松分布不是确定性的,但它有一定的发生频率:维基百科对此有很好的介绍性信息:http://en.wikipedia.org/wiki/Poisson_distribution

算法:

algorithm poisson random number (Knuth):
init:
     Let L ← e−λ, k ← 0 and p ← 1.
do:
     k ← k + 1.
     Generate uniform random number u in [0,1] and let p ← p × u.
while p > L.
return k − 1.

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2015-03-29
    • 2018-03-25
    • 2012-02-20
    • 2020-05-05
    • 2016-06-25
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多