Javascript 我能用返回加权布尔值的函数实现加权随机性吗?
我有一种模仿不公平硬币的方法。您可以传入一个百分比,它通过返回一个布尔值来告诉您是否成功。因此,如果用.25调用它,它将在25%的时间内返回Javascript 我能用返回加权布尔值的函数实现加权随机性吗?,javascript,random,Javascript,Random,我有一种模仿不公平硬币的方法。您可以传入一个百分比,它通过返回一个布尔值来告诉您是否成功。因此,如果用.25调用它,它将在25%的时间内返回true25% 我试图找出是否可以使用此函数创建一个加权随机函数,其工作原理如下:它返回x的概率为25%,返回y的概率为40%,返回z的概率为35%。这只是一个示例。我希望函数可以处理无限数量的字母,但加在一起的百分比应该等于1 诀窍是,我希望能够以我刚才描述的方式来思考它。换言之: result = function ({.25, x}, {.4, y},
true
25%
我试图找出是否可以使用此函数创建一个加权随机函数,其工作原理如下:它返回x的概率为25%,返回y的概率为40%,返回z的概率为35%。
这只是一个示例。我希望函数可以处理无限数量的字母,但加在一起的百分比应该等于1
诀窍是,我希望能够以我刚才描述的方式来思考它。换言之:
result = function ({.25, x}, {.4, y}, {.35, z})
结果
应为25%的时间,依此类推。我可以用我的Undercoin实现这个功能吗
下面是我在评论中的措辞。这可能会澄清我的要求: 如果我在这里犯了错误,请更正我的逻辑,但假设XY和Z都有.3333。。。我不能用我不公平的硬币来传球吗。。。如果返回true,则表示结果为X。如果返回false,则再次调用my Unfaced。5如果返回true,则返回Y,否则返回Z。如果这是正确的,如果数字不是.3333,并且如果有三个以上的硬币,则我不知道如何使其工作。如果你有已知概率为人头的硬币 假设您有一个函数
infaircoin(p)
,该函数以已知的概率p
产生正面,否则产生反面。例如,它可以这样实现:
function unfairCoin(p) {
return Math.random() < p ? True : false;
}
如果你有硬币的头部概率未知
另一方面,如果您有一个函数COIN
,它以未知的概率输出正面,反之则输出反面,那么要获得解决方案,需要解决两个问题:
COIN()
,它以未知的概率输出正面,否则输出反面。(如果已知硬币产生人头的概率为0.5,则您已经拥有一枚公平的硬币,可以跳过此步骤。)
在这里,我们可以使用冯·诺依曼1951年的算法,将有偏见的硬币变成公平的硬币。它的工作原理如下:
function unfairCoin(p) {
return Math.random() < p ? True : false;
}
FAIRCOIN()
(请注意,有其他方法可以通过这种方式产生公平的硬币,统称为随机抽取器,但冯·诺依曼方法可能是最简单的。)
从普通硬币到装骰子
现在,将公平的硬币变成装满的骰子的方法要复杂得多。可以说,有很多方法可以解决这个问题,其中最新的一种被称为,它只使用普通硬币生产一个装模(事实上,它平均使用6个普通硬币投掷,超过了生产每个装模辊的最佳数量)。该算法的实现并不简单,但请参见快速加载骰子辊的作者的my和
请注意,要使用快速加载的骰子滚轮,您需要将每个概率表示为整数权重(例如示例中的25、40、35)。如果您的硬币的正面概率已知
假设您有一个函数infaircoin(p)
,该函数以已知的概率p
产生正面,否则产生反面。例如,它可以这样实现:
function unfairCoin(p) {
return Math.random() < p ? True : false;
}
如果你有硬币的头部概率未知
另一方面,如果您有一个函数COIN
,它以未知的概率输出正面,反之则输出反面,那么要获得解决方案,需要解决两个问题:
COIN()
,它以未知的概率输出正面,否则输出反面。(如果已知硬币产生人头的概率为0.5,则您已经拥有一枚公平的硬币,可以跳过此步骤。)
在这里,我们可以使用冯·诺依曼1951年的算法,将有偏见的硬币变成公平的硬币。它的工作原理如下:
function unfairCoin(p) {
return Math.random() < p ? True : false;
}
FAIRCOIN()
(请注意,有其他方法可以通过这种方式产生公平的硬币,统称为随机抽取器,但冯·诺依曼方法可能是最简单的。)
从普通硬币到装骰子
现在,将公平的硬币变成装满的骰子的方法要复杂得多。可以说,有很多方法可以解决这个问题,其中最新的一种被称为,它只使用普通硬币生产一个装模(事实上,它平均使用6个普通硬币投掷,超过了生产每个装模辊的最佳数量)。该算法的实现并不简单,但请参见快速加载骰子辊的作者的my和
请注意,要使用快速加载的骰子滚轮,您需要将每个概率表示为整数权重