我曹嘞?你把那只狼儿给踩死嘞?
起因
话说前几天,我媳妇给我微信留言,是一道题
如果一件事成功率是1%,那反复100次至少成功1次的概率是多少?
我当时第一反应就是,使用列举法,真实环境去还原命题,想法是这样的
有个商家出售100个刮刮乐,只有一个一等奖,自行车一辆,那么中奖率就是1%,我买了100个刮刮乐,那么中奖率就是100%。
那么我得出的答案就是100%啦,但是,我这心里隐隐感觉不安,就去查询了答案,而答案却是63%。解题思路如下:
至少中奖一次的概率的反面是一次都没中,如果把所有情况想象成一个集合A(100%),那么
A = { 不中奖,中奖 },
中奖也是一个集合,
中奖 = { 中奖一次,中奖两次,中奖3次...,中奖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次。
以此类推,就可得出最终结果。