百囚问题——颠覆你的常识系列一

背景

“百囚问题”是由丹麦计算机学家 Peter Bro Miltersen 于 2003 年提出的,但关于问题本身,Peter Bro Miltersen 并没有找到解决方法,最终解决方案还是由他的同事 Sven Skyum 找到的,然后他俩还发表了一篇论文《The cell probe complexity of succinct data structures》。感兴趣的同学可以去查一下原文。

问题

现在一共有 100100100 个囚犯,你是监狱长,你决定给他们最后一次机会,现在一个房间里有 100100100 个箱子,箱子上写着 111100100100 的数字,每个箱子中有一张纸,纸上是 111100100100 中随机的一个数字(保证任意两张纸的数字不一样),现在每个囚犯可以进去任意打开 505050 个箱子,在打开完 505050 个箱子之后要把所有箱子关上,不能做任何痕迹,如果这 100100100 个犯人都开到了写着自己号码的纸,那么他们就都可以被释放,如果其中一人没开到,那么所有囚犯会被立即处决。囚犯们在进去之前可以商量策略,请问他们应该怎么做?

解决方法

正常来讲,如果这 100100100 个囚犯进去之后真就随便打开 505050 个箱子,那么他成功的概率就是 12\cfrac{1}{2}21100100100 个囚犯就是 12×12×⋯×12⏟100个12≈8×10−30\underbrace{\cfrac{1}{2}\times\cfrac{1}{2}\times\cdots\times\cfrac{1}{2}}_{100\text{个}\frac{1}{2}}\approx8\times10^{-30}1002121×21××218×1030,几乎可以看做没有。但有一种方法可以让这个概率提升到 31%31\%31% 左右,这到底是怎么做到的呢?

在这个问题中,我们要注意的是通过当前我已知的条件去推测未知,因为这个房间内每个箱子都有一张纸,所以这里面的箱子就必然能组成很多个环,最小的就是一个自环,最大的就是这 100100100 个箱子全组成一个环,那我们只需要先打开自己编号的那个箱子,然后再打开这个箱子内的纸上写的编号的那个箱子,那在经过了很多个箱子后,这个人必然会通过某一个环开到含有他编号的箱子。

但这看上去似乎概率也很小啊,怎么算的 31%31\%31%?就下来就让我来给你证明一下。

证明

首先假设我要从 100100100 个箱子里面选出 kkk 个箱子组成一个环,那我能选出 kkk 个箱子的情况就是 C100kC_{100}^kC100k,而这 kkk 个箱子又可以组成很多个环,我们可以算一算。

首先第一个点可以在 kkk 个中选择一个,就有 kkk 种情况,那么第二个点就只能在 k−1k-1k1 种中选择一个,接着是 k−2,k−3…k-2,k-3\dotsk2,k3,一直到 111,所以总的方案数就是 k!k!k!,但有一个问题:环是可以转的,而转了之后的环是和原本一样的,但我们算作是不一样的,具体见下面这张图:

所以我们要早原本的基础上除以 kkk,再乘上前面的 C100kC_{100}^kC100k,我们就可以得到组成一个长度为 kkk 的环的所有总方案为:

C100k×k!k\cfrac{C_{100}^k\times k!}{k}kC100k×k!

然后我们就要考虑把这些纸片放进去的情况了,假设我们只选了长度为 kkk 的所有环中的一种,那么我们看看放纸片有多少种情况。跟上面算箱子的算法一样,但是不能除以 kkk 了,因为这个纸条是有一定顺序的,转一下就不成立了,所以他的种类数就是 C100k×k!C_{100}^k\times k!C100k×k!,那么我们能从中挑出唯一的一种的概率就是 1C100k×k!\cfrac{1}{C_{100}^k\times k!}C100k×k!1,把上下两个乘起来,我们就得到了满足条件的环的概率是:

C100k×k!kC100k×k!=1k\cfrac{\cfrac{C_{100}^k\times k!}{k}}{C_{100}^k\times k!}=\cfrac{1}{k}C100k×k!kC100k×k!=k1

然后我们假设 kkk 是所有环中长度最大的那个环,因为每个囚犯可以开 505050 个箱子,所以只要 k>50k\gt50k>50,那么就必然不会成功,我们可以算算失败的概率是:

P⁡(fail)=∑k=511001k≈69%\operatorname{P}(fail)=\sum_{k=51}^{100}\cfrac{1}{k}\approx69\%P(fail)=k=51100k169%

所以成功的概率就是 1−P⁡(fail)≈31%1-\operatorname{P}(fail)\approx31\%1P(fail)31%

然而这还不是它最惊艳的地方,它最惊艳的地方在于按照这种方法,不管有多少个犯人,最终他们活下来的概率都是 30%30\%30% 以上,正是这一点才让它如此著名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值