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

我写了一段简单的代码来比较随机数组的差异,发现了一些……我不太明白的东西。

  1. 我生成了 2 个充满随机数的数组

  2. 将随机数之间的差异相加

  3. 打印出平均差异

我原以为结果是接近 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>


收到一只叮咚
浏览 231回答 3
3回答

潇湘沐

这基本上归结为一个限制,这是有道理的。考虑 0 到 10 之间的数字组合,并计算您可以做出的各种差异。例如,有一种组合的差值为 9 — (0, 9)。有5个,相差5个:[0, 5],&nbsp;&nbsp;[1, 6],&nbsp;[2, 7],&nbsp;[3, 8],&nbsp;[4, 9]但是相差1的有九种组合:[1, 2],&nbsp;[2, 3],&nbsp;...&nbsp;[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。

慕斯709654

(事实上,您不是在查看差异,而是查看随机数之间的绝对差异。存在差异。(请原谅双关语。))如果您有两个独立的均匀分布随机变量X, Y ~ U[0,1],那么它们的绝对差|X-Y|将遵循期望为 1/3的三角形分布。一切都是应该的。这个分布结果,以及计算期望,是概率论中一个相当标准的作业问题。直觉直接跟随马克的论点。这是绝对和非绝对差异的直方图。在左侧,您会看到较小的绝对差异有更多的质量,从而降低了预期。代码: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="")

凤凰求蛊

这是一个几何参数,用于说明结果收敛到 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript