Fork me on GitHub

百囚徒挑战

问题

监狱决定给关押的100名囚徒一次特赦的机会,条件是囚徒通过一项挑战。所有囚徒被编号为1-100,对应他们编号的100个号码牌被打乱顺序放在了100个抽屉里。每个囚徒需要从所有抽屉里打开至多半数(50个),并从中找出对应自己编号的号码牌。如果找到了则该名囚徒的任务成功。所有囚徒会依次单独进入挑战室完成任务,并且从第一个囚徒进入挑战室开始,直到所有囚徒结束挑战为止囚徒之间任何形式的交流都是禁止的。当一名囚徒完成任务后,挑战室会被恢复为他进入之前的样子。在这100名囚徒中,任意一名囚徒的失败都会导致整个挑战失败,只有当所有囚徒全部成功完成任务时,他们才会统一得到特赦的机会。最后,在开始挑战之前,监狱给了所有囚徒一个月时间商量对策。那么,囚徒究竟有多大的几率得到释放?

一眼看上去囚徒获胜的概率小的可怜,因为假如每个人的任务都是一次独立实验,那么他完成任务的概率只有 1/2 。再加上基数 100 人 即为 (1/2)^100

但是只要囚徒采取了正确的策略,那他们获胜的概率很大。

解答

不妨假设抽屉里的号码牌是随机放置的(否则,囚徒可以自己在脑内打乱所有抽屉的位置以达到同样的效果),之后囚徒首先为抽屉编号,例如从左上到右下依次编号。而每个囚徒的策略,就是首先打开与自己编号相同的抽屉,从中取出号码牌,并打开号码牌所对应的抽屉。之后,重复此过程,直到找到自己的号码牌,或者50个抽屉的机会用完。

例如,29号囚徒首先打开了29号抽屉,里面放着51号的号码牌,于是他打开51号抽屉,里面放着18号的号码牌,于是他打开18号的抽屉,里面放着29号的号码牌,他完成了任务。(只是随便举例)

为了计算成功概率,首先对这个游戏进行化简。将抽屉与号码牌的对应关系视为一个映射 f(29)=51 f(51)=18 f(18)=29那么从任意一个数出发,不停地迭代计算,最终总能回到这个数。通过这种方法,1-100 的数字被分割为了一些“圆环”,而每个圆环的长度不一,比如 f(3)=3 这种圆环长度就是1,意味着3号抽屉里装着3号号码牌; f(29)=51 f(51)=18 f(18)=29 这种圆环长度是3;这时,我们发现,所有囚徒能够通过挑战,当且仅当所有圆环的长度不超过50 ,此时显然每个囚徒都能在50次以内找到自己的号码牌,反之如果有一个圆环长度超过50,那么这个圆环上的所有人都会失败。

接下来就是计算了。比起计算“所有圆环的长度不超过50”的概率,“有一个圆环长度超过50”的概率更容易计算。因为“有一个圆环的长度是51”和“有一个圆环的长度是52”之类的事件是彼此互斥的(圆环的长度总和是100),所以总概率就是它们的和。

而对于 m>= 51只需先选出 m 个元素,将它们构成一个环,之后再将剩下的元素随机打乱即可唯一地得到一种分布。具体地说,所有形成长度为 m 环的映射种类为 100!/m 。全排列个数为 m! ,因此这个概率等于 P(m) = 1/m

综上,所有圆环长度不超过50的概率等于 1-(1/51)-(1/52)-...-(1/100) 其值大约是 0.312,这个概率就是囚徒被释放的概率。

扫描二维码,拯救贫困山区大学生!
-------------本文结束感谢您的阅读-------------