炉石开包引发的血案(雾

原文地址: http://tianma.space/post/1310087385/

昨天星苏直播开炉石卡包,并发起对应的竞猜,竞猜内容大致是: 50包卡包中,出现橙卡数目的奇偶性。 然后就有弹幕说:“哎呀,猜单双多没意思呀,可能性一样,赔率不会悬殊,没意思。” 那么,奇偶出现的可能性是一样吗?

模型建立

暴雪爸爸前段时间发布了关于《炉石传说》卡牌包抽取概率公告,其中有两条关键信息:

平均20个炉石卡牌包,可获得一张传说品质卡牌。
此外,需要说明的是:随着卡牌包抽取数量的增多,玩家实际获得高品质卡牌的概率也将同步提高。

通过官方的说明,加上对开包已有的认知,可以将 卡牌包抽取  行为近似抽象为 伯努利试验(或 重复独立试验)。由于卡牌包抽取数量的增大,获得传说(橙卡)的概率也会相应提高,也就是前面的试验结果会对后续的试验结果产生一定影响,故而这里的 伯努利试验  模型并不十分精确。但在开包数目相对较小的情况下,我们还是可以使用 伯努利试验  进行近似建模抽象的。毕竟,官方没有透露任何关于卡牌包出传说概率模型的消息,也只能用 伯努利试验  对其进行简单抽象了。

另外,这里也可以得知,单包出橙卡的概率为 1/20 即 0.05。

在 n 次重复独立试验中,用 ξ 表示事件A发生的次数,用 p 表示事件A在单次试验中发生的概率,则事件A发生 k 次的概率 P 为:


建立了数学模型,可以方便解决问题了。\(≧▽≦)/

编码实现

/**
 * 重复独立试验
 * @author Tianma
 *
 */
public class BernoulliExperiment {

    /**
     * 重复独立试验(伯努利试验),单次出现概率为p(0
     * P(k,n,p) = C(n,k)*(p^k)*((1-p)^(n-k)),其中(k = 0,1,2,...,n)
     */
    public double probability(int n, int k, double p) {
        return combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);
    }

    /**
     * 计算C(n,m)组合数的值
     */
    public long combination(int n, int m) {
        long[] arr = new long[m + 1];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = 1;
        }
        for (int i = 1; i <= n - m; i++) {
            for (int j = 1; j <= m; j++) {
                arr[j] += arr[j - 1];
            }
        }
        return arr[m];
    }

    public static void main(String[] args) {
        BernoulliExperiment bernoulli = new BernoulliExperiment();
        double p = 0.05;
        int n = 50;
        double oddProbability = 0, evenProbability = 0;
        for (int i = 0; i <= n; i++) {
            double probability = bernoulli.probability(n, i, p);
            if (i % 2 == 0) {
                evenProbability += probability;
            } else {
                oddProbability += probability;
            }
        }
        System.out.println("Odd probability : " + oddProbability);
        System.out.println("Even probability : " + evenProbability);
        System.out.println("Odd + Even : " + (evenProbability + oddProbability));
    }
}

上述代码中涉及到组合数的计算,详情可以看之前的博客 组合数的计算。

运行结果如下:

Odd probability : 0.497423112396339
Even probability : 0.502576887603659
Odd + Even : 0.999999999999998

从运行结果我们可以看出,50个卡包开出橙卡数目的奇偶性的概率大致一样,但还是有略微差别。如果对 n 和 p 取不同的值,得到的奇偶性概率差又会不一致。也就是说,需要经过一定的计算才能判断最终结论走向。

最后的最后,想说一句,芝士就是力量(大雾) ╰( ̄▽ ̄)╮

你可能感兴趣的:(炉石开包引发的血案(雾)