javascript - 我的生日悖论事件模拟器在 JavaScript 中运行不佳

标签 javascript arrays debugging random birthday-paradox

我尝试用 Javascript 为 23 名学生做一个生日悖论事件,它应该给我 51% 的平均概率,但它总是给我 67% 左右的数字。代码如下:

var pers = [];
var D = 0;
for (var i = 0; i < 10000; i++) {
    for (var k = 0; k < 23; k++) {
        pers.push(Math.floor((Math.random()*366) + 1));
    }
    var npers = pers.slice();
    npers.sort();
    for ( var v = 0; v < npers.length; v++ ) {
        if (npers[v-1] == npers[v]) {
            D++;
        }
    }
    pers = [];
}
D = D / 100;
var DD = D.toString(); 
DD = DD + "%";
document.write(DD);

您能告诉我我哪里犯了错误吗?非常感谢。我确信我犯了一个错误,因为我得到的最低百分比是 66%,远远超过了 51% 的目标。 (我已经运行了好几次了)。再次感谢您的帮助,我已经花了好几个小时试图弄清楚我做错了什么,但我无法弄清楚。

最佳答案

您计算的是所有巧合的数量,而不是房间内至少存在一个巧合的情况的数量。也就是说,如果在给定的集合中,例如,有三个人共享生日,或者有两对人共享生日,则将 D 递增两次。

D++; 之后添加一个 break;,您将得到 50% 左右的数字。

顺便说一句,您的 v 循环在索引 npers 下(在 v=0 处,您比较 npers[-1] 反对 npers[0]) - 但这不会影响结果。

关于javascript - 我的生日悖论事件模拟器在 JavaScript 中运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966567/

相关文章:

Javascript Array.sort 实现?

javascript - BackboneJS 未捕获错误 : A "url" property or function must be specified

javascript - js,如何从元素中获取选择器

python - 为什么 Python 数组模块以不同方式处理字符串和列表?

arrays - "Flattening"元胞数组

sql - Android 应用程序测试和调试问题

c# - 调试时如何评估延迟的 Linq 语句?

javascript - 如何在单击第 3 方按钮时设置断点?

javascript - 未使用的 JavaScript 参数

php - 从PHP中的大json文件读取大数组