【经典概率题】百囚徒挑战

起因,这两天多校概率题挺多的,又不太会做。

刚好学长发了一些概率问题知识就有这个就去了解了一下

有一个很反直觉的问题,叫作百囚徒挑战。

很多时候,我们都会靠直觉去评价一件事情,但很多时候,我们的直觉是错的,哪怕感觉有多么准确,而最著名的反直觉问题,就是百囚徒挑战。

img

问题描述

监狱决定给关押的100名囚徒一次特赦的机会,条件是囚徒通过一项挑战。

1、所有囚徒被一一编号,编号为1-100。
2、将编号1-100的100个号码牌,随机放在100个抽屉。
3、每个囚徒可以打开最多50个抽屉,如果找到对应自己编号的号码牌,则该囚徒挑战成功,反之挑战失败。
4、所有囚徒全部挑战成功,该项挑战才算成功,任意一名囚徒挑战失败,则该项挑战失败!

囚徒们有一个月的时间去讨论策略,那么,这100个囚徒有多大的概率能够得到释放?

前三点看起来并不难,但第四条直接将难度直线升级。从直觉来看,每个囚徒完成挑战的概率就是1/2,而且每个囚徒的挑战都是独立事件,所以100个囚徒同时成功的概率就是(1/2)的100次方,这个数,几乎接近于零!

那么为什么说这个问题是反直觉的?

实际上,这个题目并不是单纯的概率题。比如考虑最简单的情况,囚徒只有两人,那么他们每人只能从两个抽屉里选择一个抽屉打开,这时他们被释放的概率是1/4吗?不是。如果两个囚徒打开不同的抽屉,那么他们被释放的概率是 1/2,反之如果两个囚徒打开同一个抽屉,那么他们被释放的概率是0.

因此,只要囚徒采取了正确的策略,那他们获胜的概率很大,在人数为100人时,仍旧有 \(30\%\) 那么多。同时,当人数趋于无穷,这个概率不会变得更小,而是趋近于 \(1 – ln\ 2\) !!

下面开始解释为什么概率是趋近于 \(1 – ln\ 2\)


解答的细节来自知乎的大佬 Yuz.Scarlet

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

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

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

接下来就是计算了。比起计算“所有圆环的长度不超过50”的概率,“有一个圆环长度超过50”的概率更容易计算。因为“有一个圆环的长度是51”和“有一个圆环的长度是52”之类的事件是彼此互斥的(圆环的长度总和是100),所以总概率就是它们的和。而对于 \(m \ge 51\) ,只需先选出 \(m\) 个元素,将它们构成一个环,之后再将剩下的元素随机打乱即可唯一地得到一种分布。

具体地说,所有形成长度为 \(m\) 环的映射种类为 \(C_{100}^m * (m-1)!*(100 – m)! = 100!/m\) ,全排列个数为 \(100!\) ,因此这个概率等于 \(P(m) = 1 / m\)

综上,所有圆环长度不超过50的概率等于 \(P = 1 – \sum\limits_{m = 51}^{100}\frac 1m ≈ 0.312\) ,这个概率就是囚徒被释放的概率。当囚徒人数趋于无穷大时,概率趋向于 $ P = 1 – \sum\limits_{m = N + 1}^{2N}\frac 1m ≈ 1-ln\ 2$

Seg-Static

不那么严密地说,这个策略的关键点在于让所有囚徒尽可能地一起成功或者一起失败,因此所有玩家的任务不再是独立的,一旦有一个人成功,他所翻出的号码牌对应的人也一定会成功,同时只要有一半的人成功,剩下的人都一定成功。

通过计算可得,在之前所有人都成功的条件下,下一个人成功的概率依次为

\[50\%,75.25\%,89.26\%,95.63\%,……
\]

这个策略被证明最优。

Seg-Static

※否则,囚徒可以自己在脑内打乱所有抽屉的位置以达到同样的效果
因为在挑战开始之前有一个月时间商讨对策,所以囚徒可以在这段时间内约定好随机打乱抽屉的方式。另外,如果担心囚徒的策略被狱警知晓,也可以考虑迪菲赫尔曼密钥交换(前提是P≠NP),这是一种大声说悄悄话的方法,具体做法是利用非对称算法,使得两个没有任何共同知识的人知晓一个共同的关键词,并且任何窃听者无法通过两人的对话推理出这个关键词,之后这个关键词可以作为加密的秘钥使用。

※※另外直观地解释一下这个策略的含义,这里以10个人的情况举两个例子。

假如说10个抽屉与号码牌的对应关系如下:
1号抽屉→5号牌
2号抽屉→7号牌
3号抽屉→3号牌
4号抽屉→2号牌
5号抽屉→9号牌
6号抽屉→10号牌
7号抽屉→4号牌
8号抽屉→8号牌
9号抽屉→1号牌
10号抽屉→6号牌

1号囚徒首先打开自己的编号对应的抽屉即1号抽屉,取出5号号码牌,接着打开5号抽屉,取出9号号码牌,接着打开9号抽屉,取出1号号码牌,完成任务;
2号囚徒首先打开自己的编号对应的抽屉即2号抽屉,取出7号号码牌,接着打开7号抽屉,取出4号号码牌,接着打开4号抽屉,取出2号号码牌,完成任务;
……
10号囚徒首先打开自己的编号对应的抽屉即10号抽屉,取出6号号码牌,接着打开6号抽屉,取出10号号码牌,完成任务;

就这样,在这种对应关系下,所有囚徒都完成了任务;

假如说10个抽屉与号码牌的对应关系如下:
1号抽屉→2号牌
2号抽屉→8号牌
3号抽屉→5号牌
4号抽屉→6号牌
5号抽屉→1号牌
6号抽屉→4号牌
7号抽屉→10号牌
8号抽屉→9号牌
9号抽屉→3号牌
10号抽屉→7号牌

1号囚徒打开1号抽屉,取出2号号码牌;打开2号抽屉,取出8号号码牌;打开8号抽屉,取出9号号码牌;打开9号抽屉,取出3号号码牌;打开3号抽屉,取出5号号码牌;任务失败
4号囚徒打开4号抽屉,取出6号号码牌;打开6号抽屉,取出4号号码牌;任务成功