我在 javascript 中的生日悖论事件模拟器运行不正常
My birthday paradox event simulator in javascript is not working well
我试图在 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]
进行比较)——但这并不影响结果。
这个for循环有问题
for ( var v = 0; v < npers.length; v++ ) {
if (npers[v-1] == npers[v]) {
D++;
}
}
这将为试验中的每一对增加 D(成功次数),而不是在找到一对时只增加一次。你只关心一对的存在。在 D++;
之后插入 break;
应该可以解决这个问题。
我试图在 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]
进行比较)——但这并不影响结果。
这个for循环有问题
for ( var v = 0; v < npers.length; v++ ) {
if (npers[v-1] == npers[v]) {
D++;
}
}
这将为试验中的每一对增加 D(成功次数),而不是在找到一对时只增加一次。你只关心一对的存在。在 D++;
之后插入 break;
应该可以解决这个问题。