抽奖那些事

2020-03-07  本文已影响0人  火锅伯南克

我曹嘞?你把那只狼儿给踩死嘞?

起因

话说前几天,我媳妇给我微信留言,是一道题

如果一件事成功率是1%,那反复100次至少成功1次的概率是多少?

我当时第一反应就是,使用列举法,真实环境去还原命题,想法是这样的

有个商家出售100个刮刮乐,只有一个一等奖,自行车一辆,那么中奖率就是1%,我买了100个刮刮乐,那么中奖率就是100%。

那么我得出的答案就是100%啦,但是,我这心里隐隐感觉不安,就去查询了答案,而答案却是63%。解题思路如下:

至少中奖一次的概率的反面是一次都没中,如果把所有情况想象成一个集合A(100%),那么
A = { 不中奖,中奖 },
中奖也是一个集合,
中奖 = { 中奖一次,中奖两次,中奖3次...,中奖100次 }
显然使用 100% - 不中奖概率更简单。

中奖率 = 100% - (99%)^100 = 63.39676587267709%

猜想

但是问题来了,明显我的举出的案例也符合题意啊,为什么会出现的这样的问题呢,我就咨询了大学同学,她说啊,这两个是不同的问题,刮刮乐是拿出不放回,而这个题是拿出再放回(独立实验),我一想,没错,我把这个问题忽视了。(无颜见高中数学老师...没事,我可以再学)

但是我隐隐感觉两个题目其实是一个问题,只不过是题目的先决条件不一样,也就是环境不一样,就如我们把苏联那一套社会主义拿来用,发现走不通,于是产生了中国特色的社会主义,同样是社会主义,一样的实施方式放在两个国家却产生了两种不同的结果,但是两个国家本质还是社会主义。

如果我把刮刮乐的案例延伸至独立实验的量级,得到的答案会不会就和件事案例(独立实验)一样的成功率呢?

大胆猜想,小心求证吗。

求证

首先,我要把刮刮乐的案例答案求出,如下:

有个商家出售 X 个刮刮乐,只有 X/100 个一等奖,自行车一辆,那么中奖率就是1%,我买了100个刮刮乐,那么中奖率是多少?

当X = 100时,
中奖率 = 100% - (99/100 * 98/99 * 97/98 * ... * 0/1) = 100%
当X = 200时,
中奖率 = 100% - (198/200 * 197/199 * 196/198 * ... * 99/101) = 75.1256%
当X = 500时,
中奖率 = 100% - (495/500 * 494/499 * 493/498 * ... * 396/401) = 67.3965%

为了演示更大的数值,我们以函数计算,哈哈,终于体现了我们职业的便利

    function calc(total){
        let have = total/100,
            limit = 100,
            start = 1;
        for(let i = 0;i < limit;i ++){
            start *= (total - have) / total
            total--;
        }
        return `${(1-start) * 100}%`
    }

表格如下

刮刮乐总数 奖品数 中奖率 买多少 最终中奖概率
100 1 1% 100 100%
200 2 1% 100 75.1256281407035%
500 5 1% 100 67.39653982126597%
1000 10 1% 100 65.3072285207994%
100000 1000 1% 100 63.41507511953775%
10000000 100000 1% 100 63.39694888961026%
1000000000000 10000000000 1% 100 63.39676587450722%

我们可以对比下 刮刮乐总数为1000000000000 (万亿)次的最终中奖率独立实验

63.39676587450722%
63.39676587267709%

结果就不用多说了吧。

结论

设:∞ = 正无穷
有个商家出售 ∞ 个刮刮乐,只有 ∞/100 个一等奖,中奖率1%,买了100个刮刮乐,那么最终中奖率将为
独立实验结果:100% - (99%)^100

我们常见的福利彩票的概率算法和独立实验是一样算法,而不是刮刮乐,因为福利彩票是用户买完了彩票在摇号,自己想想吧。

- - 游戏中的抽奖 - -
大家应该都玩过游戏中的抽奖,游戏中的抽奖大致分为两类:
①有保底的抽奖 ②无保底的抽奖。
现在有抽奖转盘,抽到绝版皮肤的概率为1%。
如果是有保底抽奖,相当于每个人都有一个独立的奖池,皮肤就在你的独立奖池中,所以只要你抽够100次,那么就一定能拿到皮肤,和开篇说到的刮刮乐中自行车那个一样。(假设你运气够好,当你在抽够100次前就拿到皮肤,奖池是否重置就得看游戏公司的良心了。)
如果是没有保底的抽奖,那么就很坑了。这个就是独立实验了,抽一百次抽中概率就为63.4%,假设你土豪,抽两百次,那么概率就为 :
1 - (99/100)^200 = 86.6%
没有保底的中奖率1%,抽200次,抽中的概率才为 86.6%。哎。理性充值吧兄弟们。

补充

对于,如果一件事成功率是1%,那反复100次至少成功1次的概率是多少,我们使用的是反推方法得出结果,那如果我们用正推该如何解答呢?
改一下题

如果一件事成功率是1/5,那反复5次至少成功1次的概率是多少?

反推: 1 - (4/5)^5 = 67.232%
正推:
成功率 = ①只成功1次 + ②只成功2次 + ③只成功3次 + ④只成功4次 + ⑤只成功5次;

① C51 * ( 1/5 * 4/5 * 4/5 * 4/5 * 4/5) = 40.96%
② C52 * ( 1/5 * 1/5 * 4/5 * 4/5 * 4/5) = 20.48%
③ C53 * ( 1/5 * 1/5 * 1/5 * 4/5 * 4/5) = 5.12%
④ C54 * ( 1/5 * 1/5 * 1/5 * 1/5 * 4/5) = 0.64%
⑤ C55 * ( 1/5 * 1/5 * 1/5 * 1/5 * 1/5) = 0.032%

成功率 = 40.96% + 20.48% + 5.12% + 0.64% + 0.032% = 67.232%

A排列,排列顺序影响结果
C组合,排列顺序不影响结果

/*
    ** 有序排列
    ** arr为总项数,n为取几项
    ** 从arr.length个值中,拿出 n 项,有多少拿法
    ** type: true 为组合, false为 排列
    */
    var generateParenthesis = function (arr, n, type) {
        let res = [];
        arr = arr.join('');
        function h(ps) {
            if (ps.length === n) {
                res.push(ps);
                return;
            }
            let e = arr;
            for(let i =0,l = ps.length; i < l; i++){
                e = e.replace(ps[i],'');
            }
            for(let s = 0,l = e.length;s < l;s++){
                h(ps + e[s])
            }
        }
        h('');
        type && (res = [...new Set(res)])
        return res;
    };

我们以做5次只成功2次(C52)为例说明
绿色代表成功, 红色代表失败
C52 = 5 * 4 / 2 = 10 ,所以5次成功2次的事件会发生10次。

C52的组合全图

以此类推,就可得出最终结果。

上一篇 下一篇

猜你喜欢

热点阅读