会抽到自己的那张吗?

  原文地址:http://blog.codingnow.com/2008/05/probability_e.html#more

周末和一个朋友聊天,说是要去阿里巴巴报道了。听说阿里巴巴的入职培训中有个有趣的游戏。所有学员都要在一张纸条上写下自己的一个短期愿望,投进纸箱中。然后大家各抽一张。抽到别人的愿望后,要想办法帮那个人实现愿望,且不能告诉对方是你抽到了他的愿望。

我突然想,如果抽到自己的愿望怎么办?:D

抽到自己的写的那张的概率是 1/n (n 为人数),这个概率和你先抽后抽无关。当人数很多时,概率自然是很小的,但是整个集体中,至少有一个人抽到自己那张的概率看起来却不小。到底是多少呢?我饶有兴趣的算了一下。

简化一下题目,其实就是把 1-n 个自然数,排成一个数列里,至少有一个数字 i 刚好排到第 i 个位置的概率。

n 个数字的全排列有 n! 种,我们只需要计算出,没有一个数字排在它所在次序位置的排列数。

先定义一个函数 f(n) ,表示把 n-1 个数字排到 n 个位置上,每个数字都不在自己位置上的排列数。

可知 f(2)=1 (把 1 排在两个位置上 , X 1) f(3)=3 (把 1 2 排在三个位置上, X 1 2 ,2 1 X ,2 X 1) ...

再定义一个函数 g(n) ,表示把 n 个数字,排到 n 个位置上,每个数字都不在自己位置的排列数。

可知 g(n+1) = n * f(n) ,这么理解, g(3)=g(1+2) 也就是排 3 个数字时,先把 2 或 3 排到第一个位置。剩下的两个数字中,1 一定不会在自己位置了。另一个数字排到 2 个空位不在自己位置的排列数就是 f(2)

又可以推导出: f(n+1) = g (n) + n * f(n)

这样理解: f(n+1) 可以分成两种情况,一种是空出那个多余的位置,剩下 n 个数字都不在自己位置的排列数即 g(n) ;另一种情况是,从 n 个数字里挑出一个放在多余的位置上,剩下 n-1 个数字去排 n 个空位,这种情况总数为 n 倍的 f(n) 。

两式联立得到 g(n+1) = n * ( g(n-1) + g (n) )

这样,我们就得到了一个递推式。由于已知 g(3) = 2 * f(2) = 2 ;g(4) = 3 * f(3) = 9 ,所以写个程序很容易求出后续数值。

然后来算概率,n 个数时,概率 h(n) = g(n)/n! 。

我用程序计算了前 100 项,发现从第 8 项开始,概率就几乎不变了,稳定在 0.3679 左右。这引起了我的好奇心,然后重新用笔来推导上面的公式。

h(n+1) * (n+1)! = n * ( h(n-1) * (n-1)! + h(n) * n! )

可以得到

和 ( h(n+1) - h (n) ) *(n+1) = h(n-1) - h (n)

我们可以看到, h(n) 这个数列,相邻两项的差是 1/2! , -1/3! , +1/4! ....

因为我们已知,h(2) = g(2) / 2! = 1/2 , h(3) = g(3) / 3! = 1/3

可以得到 h(n) = 1 -1 + 1/2! - 1/3! + 1/4! - 1/5! .... 1/n!

这看起来是什么?哈,正好是 1/e 的麦克劳林展开式 :D 所以 h(n) 当 n 增大时,它会收敛到 1/e = 0.367879 。且收敛速度极快 :D


结论:当 n 较大(n>5) 时,没有一个人抽到自己那张纸条的概率是 1/e = 36.8% 左右。还句话说,至少有一个人抽到自己写的那个愿望的可能性有 63.2% 左右,这种事情还是很容易发生的,无论人多还是人少。这个概率随 n 变化的量很小。

哈,怎么又绕到欧拉数 e上面去了,数学还真是神奇啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值