百囚犯问题(100 prisoners problem)

百囚犯问题(100 prisoners problem)

问题描述

Philippe Flajolet和Robert Sedgewick在2009年提出了“百囚犯问题(100 prisoners problem)”

一个房间里有100个抽屉,监狱长随意地把1到100这100个号码放入1号到100号抽屉中,每个抽屉一张。囚犯们逐个进入房间,每人可以任意打开50个抽屉,之后关上。如果每名囚犯都在这50个抽屉中发现了他的号码,那么所有的犯人都会被赦免;如果有人没有找到他的号码,那么所有的囚犯都会被处死。在第一个囚犯进入房间之前,囚犯们允许一起讨论开抽屉的“策略”,但一旦第一个囚犯进入房间,他们之间就被禁止交流。

如果随机打开,那么成功的概率为
( 1 2 ) 100 = 8 ∗ 1 0 − 31 (\frac{1}{2})^{100} = 8 * 10^{-31} (21)100=81031

策略选择

每名囚犯进入房间后都——

  1. 先打开自己的号码的抽屉。
  2. 如果这个抽屉里有他的号码,他就成功了。
  3. 否则,抽屉里会有另一个号码,然后他打开这个号码的抽屉。
  4. 不断重复第2步和第3步,直到他找到自己的号码或已经打开了50个抽屉(那就全体失败了)。

这个策略之所以可行:是因为 ( x , y ) (x,y) (x,y)形成了一个环(用 x x x表示箱子的号码, y y y表示箱子里面装的号码)就是从囚犯自己号码对应的箱子找,总能找到一个箱子有自己的号码;

下证 : ( x , y ) 形成了一个环 反证: 存在某一个路径不成环,设该路径为 ( x 1 , y 1 ) → ( x 2 , y 2 ) → ⋯ → ( x n , y n ) 根据策略的特点有: y k − 1 = x k 该路径不成环: y n ≠ x 1 那么 ( 证明在下面给出 ) : y n = x n − w , ( n − w ) ∈ ( 1 , n ) 又 ∵ y n − w − 1 = x n − w 则表明有两个箱子装着同一个号码,显然不合实际,故 ( x , y ) 形成了一个环 ( 从编号 x 的箱子找,总能在一个箱子中找到编号为 x 的号码 ) 下证 : y n = x n − w , ( n − w ) ∈ ( 1 , n ) 若 y n 不等于路径中的某一个 x ,那么一定能将这条路径延长, y n 就不是终点 y n ≠ x 1 且 y n ≠ x n ∴ y n = x n − w , ( n − w ) ∈ ( 1 , n ) \begin{aligned} 下证:& (x,y)形成了一个环 \\ 反证:& 存在某一个路径不成环,设该路径为 (x_1,y_1) \to (x_2,y_2) \to \dots \to (x_n,y_n) \\ &根据策略的特点有: y_{k-1} = x_k \\ &该路径不成环: y_n \neq x_1 \\ &那么(证明在下面给出): y_n = x_{n-w} ,(n-w) \in (1,n) \\ &又\because y_{n-w-1} = x_{n-w}\\ &则表明有两个箱子装着同一个号码,显然不合实际,故(x,y)形成了一个环(从编号x的箱子找,总能在一个箱子中找到编号为x的号码)\\ 下证:& y_n = x_{n-w} ,(n-w) \in (1,n)\\ &若y_n不等于路径中的某一个x,那么一定能将这条路径延长,y_n就不是终点 \\ &y_n \neq x_1 且y_n \neq x_n \\ &\therefore y_n = x_{n-w} ,(n-w) \in (1,n) \\ \end{aligned} 下证:反证:下证:(x,y)形成了一个环存在某一个路径不成环,设该路径为(x1,y1)(x2,y2)(xn,yn)根据策略的特点有:yk1=xk该路径不成环:yn=x1那么(证明在下面给出)yn=xnw,(nw)(1,n)ynw1=xnw则表明有两个箱子装着同一个号码,显然不合实际,故(x,y)形成了一个环(从编号x的箱子找,总能在一个箱子中找到编号为x的号码)yn=xnw,(nw)(1,n)yn不等于路径中的某一个x,那么一定能将这条路径延长,yn就不是终点yn=x1yn=xnyn=xnw,(nw)(1,n)

做一个简单的示意图

在这里插入图片描述

在这里插入图片描述

那么很显然,这个环的最大长度决定了囚犯能否获救,如果所有抽屉中的号码恰好构成了长度为100的环,那么显然囚犯会失败;如果有一条长度为49的环、一条长为20、一条为31的环,那么囚犯显然能获救;所以问题的临界情况就在环的长度等于50;

  • 所有的摆放情况(100个不同箱子,塞100个不同的东西,相当于全排列)
    A 100 100 = 100 ! A_{100}^{100} = 100! A100100=100!
  • 最长的环为 K ( K ≥ 50 ) K(K\geq50) K(K50)
    选出 K 个,在 K 个箱子里面形成一个环,剩下的 100 − K 在 100 − K 个箱子里全排 C 100 K ( K − 1 ) ! ( 100 − K ) ! = 100 ! K P = C 100 K ( K − 1 ) ! ( 100 − K ) ! 100 ! = 1 K 选出K个,在K个箱子里面形成一个环,剩下的100-K在100-K个箱子里全排\\ C_{100}^K (K-1)! (100-K)! = \frac{100!}{K}\\ P = \frac{C_{100}^K (K-1)! (100-K)!}{100!} = \frac{1}{K} 选出K个,在K个箱子里面形成一个环,剩下的100K100K个箱子里全排C100K(K1)!(100K)!=K100!P=100!C100K(K1)!(100K)!=K1

那么所有 K ≥ 50 K\geq 50 K50的情况都是囚犯没救的情况,有救的情况为
P = 1 − 1 100 − 1 99 − ⋯ − 1 51 = 31.2 % P = 1-\frac{1}{100}-\frac{1}{99}-\dots-\frac{1}{51} = 31.2\% P=11001991511=31.2%

拓展到2n个囚犯

即使拓展到2n个囚犯,也是采取相同的策略,则成功概率为
P = 1 − 1 2 n − 1 2 n − 1 − ⋯ − 1 n + 1 P = 1-\frac{1}{2n}-\frac{1}{2n-1}-\dots-\frac{1}{n+1} P=12n12n11n+11
根据调和级数的欧拉和
∑ n = 1 k 1 n = ln ⁡ k + γ + ϵ k \sum_{n=1}^k\frac{1}{n} = \ln k + \gamma +\epsilon_k n=1kn1=lnk+γ+ϵk
其中是 γ \gamma γ欧拉-马歇罗尼常数,而 ϵ k \epsilon_k ϵk约等于 1 2 k \frac{1}{2k} 2k1,并且随着 k k k 趋于正无穷而趋于 0。这个结果由欧拉给出。
P = 1 − 1 2 n − 1 2 n − 1 − ⋯ − 1 n + 1 = 1 − ( 1 2 n + 1 2 n − 1 + ⋯ + 1 n + 1 ) = 1 − ( 1 2 n + 1 2 n − 1 + ⋯ + 1 1 − ( 1 n + 1 n − 1 + ⋯ + 1 1 ) ) = 1 − ( ln ⁡ 2 n − ln ⁡ n ) = 1 − ln ⁡ 2 = 30.68 % \begin{aligned} P &= 1-\frac{1}{2n}-\frac{1}{2n-1}-\dots-\frac{1}{n+1} \\ &=1 - (\frac{1}{2n}+\frac{1}{2n-1}+\dots+\frac{1}{n+1}) \\ &=1 - (\frac{1}{2n}+\frac{1}{2n-1}+\dots+\frac{1}{1} - (\frac{1}{n}+\frac{1}{n-1}+\dots+\frac{1}{1})) \\ &=1 - (\ln 2n - \ln n) \\ &=1 - \ln2 = 30.68\% \end{aligned} P=12n12n11n+11=1(2n1+2n11++n+11)=1(2n1+2n11++11(n1+n11++11))=1(ln2nlnn)=1ln2=30.68%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PD我是你的真爱粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值