每次循环传递的条件呈指数级降低
condition exponentially less likely per loop pass
我想在 for 循环中实现一个条件,在每次循环通过后,该条件为真的可能性会呈指数级降低。
这是我当前的线性解决方案的简化版本:每个循环通过它时,随机数 === 0 的可能性降低 x+1,因此每个 运行 的概率降低。
for (let x = 0; x < 10; x++) {
if (getRandomInt(0,x) === 0) {
// do something
}
}
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
但我不知道如何更改条件,使每次循环通过的概率呈指数增长,而不是像我的解决方案中那样线性变小。
有人知道吗?感谢您的宝贵时间!
如果我明白你在找什么,你就不能跟着做吗?
for (let x = 0; x < 10; x++) {
if (getRandomInt(0,Math.pow(2, x)) === 0) {
// do something
}
}
不是通过加法来增加 x
,而是通过乘法来增加它。
for (let x = 1; x < 128; x *= 2) {
if (getRandomInt(0, x) == 0) {
// do something
}
}
我想在 for 循环中实现一个条件,在每次循环通过后,该条件为真的可能性会呈指数级降低。
这是我当前的线性解决方案的简化版本:每个循环通过它时,随机数 === 0 的可能性降低 x+1,因此每个 运行 的概率降低。
for (let x = 0; x < 10; x++) {
if (getRandomInt(0,x) === 0) {
// do something
}
}
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
但我不知道如何更改条件,使每次循环通过的概率呈指数增长,而不是像我的解决方案中那样线性变小。
有人知道吗?感谢您的宝贵时间!
如果我明白你在找什么,你就不能跟着做吗?
for (let x = 0; x < 10; x++) {
if (getRandomInt(0,Math.pow(2, x)) === 0) {
// do something
}
}
不是通过加法来增加 x
,而是通过乘法来增加它。
for (let x = 1; x < 128; x *= 2) {
if (getRandomInt(0, x) == 0) {
// do something
}
}