为了账号安全,请及时绑定邮箱和手机立即绑定

关于 JavaScript Math.random() 和基本逻辑的问题

关于 JavaScript Math.random() 和基本逻辑的问题

收到一只叮咚 2021-06-17 13:10:02
我写了一段简单的代码来比较随机数组的差异,发现了一些……我不太明白的东西。我生成了 2 个充满随机数的数组将随机数之间的差异相加打印出平均差异我原以为结果是接近 0.5 的随机数,但实际上是 0.3333。为什么随机数数组位于 0.3 而不是 0.5?const result = document.getElementById('result');const generateRandomNrArray = (nrNumbers) => {    let i;    let result = [];    for (i = 0; i < nrNumbers; i++) {        result.push(Math.random());    }    return result;}const getArrayDiff = (arr1, arr2) => {  var diff = 0;  arr1.forEach(function (v1, index) {      diff += Math.abs(v1 - arr2[index]);  });  return diff;}const run = (nr) => {  const arr1 = generateRandomNrArray(nr);  const arr2 = generateRandomNrArray(nr);  const totalDiff = getArrayDiff(arr1, arr2);     result.innerHTML = "Average difference:" + (totalDiff / nr);}button {font-size: 2em;}<div id="result"></div><button id="run" onclick="run(1500)">Click Me</button>
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

这基本上归结为一个限制,这是有道理的。考虑 0 到 10 之间的数字组合,并计算您可以做出的各种差异。


例如,有一种组合的差值为 9 — (0, 9)。有5个,相差5个:


[0, 5],  

[1, 6], 

[2, 7], 

[3, 8], 

[4, 9]

但是相差1的有九种组合:


[1, 2], 

[2, 3], 


... 

[8, 9]

0 - 10 的计数为:


{1: 9, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4, 7: 3, 8: 2, 9: 1}

有 45 种组合,这些组合的平均差异3.6666不是5因为小差异比大差异多。


当您将粒度从 0 - 10 增加到 0 - 100 时,相同的模式成立。有 99 种组合导致差异为 1,只有 50 种组合的平均值为 50 33.6666。


当您在相反方向和相反方向以 0 和 1 之间越来越精细的划分增加有效数字的数量时,您会发现与极限接近的过程相同1/3。较小的差异比较大的差异要多得多,从而拉低了平均差异。因为 0-1在 0.1 间隔内,您会看到 9 相差 0.1 和 5 相差 0.5,在 0.01 处将有 99 相差 0.01,而 50 相差 0.5。随着间隔接近 0,差异的平均值接近1/3。


查看完整回答
反对 回复 2021-06-18
?
慕斯709654

TA贡献1840条经验 获得超5个赞

(事实上,您不是在查看差异,而是查看随机数之间的绝对差异。存在差异。(请原谅双关语。))

如果您有两个独立的均匀分布随机变量X, Y ~ U[0,1],那么它们的绝对差|X-Y|将遵循期望为 1/3的三角形分布。一切都是应该的。这个分布结果,以及计算期望,是概率论中一个相当标准的作业问题。直觉直接跟随马克的论点

这是绝对和非绝对差异的直方图。在左侧,您会看到较小的绝对差异有更多的质量,从而降低了预期。

//img1.sycdn.imooc.com//60cbf5a50001e44c13710645.jpg

代码:


set.seed(1)

xx <- runif(1e5)

yy <- runif(1e5)

par(mfrow=c(1,2))

hist(abs(xx-yy),main="|X-Y|",col="grey",xlab="")

hist(xx-yy,main="X-Y",col="grey",xlab="")


查看完整回答
反对 回复 2021-06-18
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

这是一个几何参数,用于说明结果收敛到 1/3 的原因。

首先,让我们定义 f(x, y) = abs(x - y)。我们需要证明的是,对于 X 和 Y 是在 [0, 1] 中均匀分布的两个独立随机变量,E(X, Y) = 1/3。

如果我们在 3D 中将函数 f 可视化为正方形 [0, 1] x [0, 1] 上的高度场,则 f 下的体积由两个四面体组成,其底为半单位正方形,高度为单位高。

E(X, Y) 是 f 下的体积。根据金字塔体积公式,两个四面体中的每一个都有 a*h/3 的体积,其中 a 是底面积,h 是高度。这意味着每个四面体的体积为 1/2 * 1 * 1/3 = 1/6,因此 E(X, Y) = 2 * 1/6 = 1/3


查看完整回答
反对 回复 2021-06-18
  • 3 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信