小编Aar*_*all的帖子

计算公平掷骰子的概率(非指数时间)

这方面的变化是很常见的问题,但我所有的 google-fu 都让我难住了。我想计算掷骰子公平的几率,但我想有效地做到这一点。有很多关于如何做到这一点的例子,但我发现的所有算法在计算上都过于昂贵(指数时间),无法用于大量具有多面的骰子。

简单问题:计算 xy 面骰子上 n 卷的几率。

简单的解决方案:创建滚动的 n 元笛卡尔积,对每个乘积求和,计算和作为目标的次数,做一点除法,瞧。

Go 中的简单解决方案示例: https : //play.golang.org/p/KNUS4YBQC0g

简单的解决方案完美地工作。我将其扩展为允许丢弃最高/最低的 n 个面等情况,结果经得起现场测试。

但是考虑一下{Count: 20,Sides: 20,DropHighest: 0,DropLowest:0, Target: 200}

如果我用以前的解决方案评估它,我的“表”将有 104 个奇怪的 septillion 单元,并且很容易使 CPU 达到最大值。

有没有更有效的方法来计算大量多面骰子的概率?如果是这样,它是否可以解释更复杂的“成功”条件选择,例如丢骰子?

由于这个美丽网站的存在,我相信这是可能的:https : //anydice.com/program/969

编辑:

最适合我的解决方案是 David Eisenstat 的答案,我将其移植到:https : //play.golang.org/p/cpD51opQf5h

algorithm probability go dice

5
推荐指数
1
解决办法
798
查看次数

标签 统计

algorithm ×1

dice ×1

go ×1

probability ×1