上帝掷硬币的智力题,从 9 胜 6 开始的深入研究
from 专栏 无专栏
数学, 趣味数学, 组合数学(Combinatorics), 焦子南, 无专栏
最近看到一道智力题,大意如下:
上帝让 Alice 和 Bob 两人玩一个猜硬币游戏。猜硬币共进行 13 轮,每轮上帝将硬币盖在手下,让 Alice 和 Bob 分别猜硬币是正面还是反面。两人各自独立作出猜测并同时公布,上帝随后揭晓答案,只有 Alice 和 Bob 都猜对才算这一轮胜利,否则就失败。13 轮猜测依次进行,上一轮结束后 Alice 和 Bob 都能看见上帝的答案和对方的猜测,然后再开始下一轮。
猜硬币之前,上帝会告诉 Alice 所有 13 轮上帝手握硬币的正反,也就是说 Alice 知道上帝每一轮出正面还是反面,但 Bob 不知道这些信息。
在上帝告诉 Alice 这些信息之前,Alice 和 Bob 可以互相交流制定策略(当然二人完全知悉以上所有规则,包括上帝告密的事情),但在上帝开始告密之后,双方便不能交流。
问:Alice 和 Bob 能否保证必胜 9 局?
(我们假设 Alice 和 Bob 被封闭于不同的两个房间内,只能通过一台显示终端做出猜测,并且不能不猜测。规定时间到后,机器同时公布两人猜测并验证答案是否正确,以保证双方绝对不能通过手势、口音、猜测时间等变量互相传递信息。双方只能通过自己的猜测给对方后续的猜测传递信息。)
若此题过于困难,可尝试简易版本:总共进行 9 轮猜硬币,保证必胜 6 局。
此题看似平平无奇,深入研究之后发现作者显然对此题的结构有深入研究,选取的数值非常巧妙,恰如其分。我们先从简易版的答案说起。
初见此题,可能先会想到最简单的方法:奇数局提示偶数局的答案。Alice 在第奇数局猜下一局的正确答案,可保证下一局必然猜对。但这样保证猜对的局数不超过总局数的一半,显然是不够的。
利用分组的思想稍加变通,又可推出另一种稍强的策略:Alice 第 1 局提示第 2~4 局中占多数的正确答案(换言之,2~4 局的正确答案如果正面多,Alice 第 1 局就出正面,否则就出反面)。Bob 第 2~4 局每次都出 Alice 第 1 局猜的答案,Alice 在 Bob 猜对的那两局也出一样的答案,保证胜两局,剩下错的那局提示第 5~7 局中占多数的正确答案。如果不巧 2~4 局正确答案都相同,则约定 Alice 在第 4 局提示 5~7 局中的多数。此后依次类推。
可以看到这种策略把每 3 次猜测分成一组,每组可胜 2 局;剩下一局提示下一组的多数答案,保证可持续发展。这种策略可以保证 13 局胜 8 局,或者 9 局胜 5 局,但是还差一点。
下面转述来自智力题吧帖子(7楼)“毒酒滴冻鸭”大神的 9 局胜 6 局的方案:
首先 5 局可以保证胜 3 局:Alice 第 1 局提示 2~4 局多数答案。如果 2~4 局答案都一样则直接达成胜 3 局;否则 Alice 在错的那局提示第 5 局答案,拿下第 5 局,同样可以胜 3 局。
接下来给出 9 局胜 6 局的策略。
Alice 第 1 局提示 2~4 局多数答案,让 Bob 在 2~4 局每局都选这个答案。如果 2~4 局答案都一样,则双方 2~4 局全胜,后面只需执行 5 胜 3 的策略即可。
如果 2~4 局答案不都一样,则 Alice 在错的那局可以提示 Bob 一个答案,让 Bob 在 5~8 局每局都选这个答案。这里又分几种情况:
1)若 5~8 局正确答案全都一样或者成 3:1,则 Alice 提示 5~8 局的多数答案,而 Bob 在 5~8 局都猜这个答案。注意 2~4 局已经胜了 2 局,如果 5~8 局答案都一样则直接达成胜 6 局;否则 Alice 在错的那局提示第 9 局答案,拿下第 9 局,同样可以胜 6 局。
2)若 5~8 局答案为 PPQQ 形,则 Alice 在第 2~4 局中提示 P,然后 Alice 在第 5~6 局 故意答错 一次,无论在哪局答错,Bob 在第 7~8 局都改猜 P 的另一面,从而在 5~8 局中获胜 3 局。同时 Alice 通过选择答错第 5 局还是第 6 局告诉 Bob 第 9 局的答案,拿下第 9 局,目标达成。
3)若 5~8 局答案为 PQQP 形,则 Alice 在第 2~4 局本该获胜的两局中 故意答错 一次。Alice 用 2~4 局中本该答错的那局告诉 Bob 哪一面是 P,再通过选择答错两局中前一局还是后一局告诉 Bob 第 9 局的答案,于是能保证 5~9 局全胜,目标达成。
4)若 5~8 局答案为 PQPQ 形,则 Alice 在第 1 局 故意告诉 2~4 局中占少数的那一面 。这样 2~4 局中必然答错两局,Alice 在前一局告诉 Bob 哪一面是 P,后一局告诉 Bob 第 9 局的答案,于是能保证 5~9 局全胜,目标达成。
13 局胜 9 局的策略同样可以通过精心安排“故意错某些题传递特定信息”的方法构造,但符合要求的策略非常繁琐;另外,构造策略可以证明 13 局能胜 9 局,却不能证明 13 局不能保证胜 10 局,直接枚举所有策略又明显不可行。我们需要把上帝硬币问题转化为更简单的问题。
首先规定:分别用
转化问题的关键是利用 最优子结构 。Alice 每局猜测无非是为了两个目的:在这一局获胜,以及向 Bob 传递信息。设总共猜
姑且举一个最简单的例子:取
现在假设我们要在 9 局中胜 6 局,前 2 局的情况如同以上假设的那样,则后 7 局就变成了下面的问题:
这样我们把上帝硬币问题一般化,允许 Alice 在事先规定的范围内选择要胜的局数,并告诉 Bob 一个限定范围的整数。我们用一个简练的记号表示这种问题:例如,用
这里有一个小细节,当讨论问题
接下来我们马上会看到,这种问题是有最优子结构的!仍然以
此外 Bob 再不知晓任何信息,因此 Bob 只能对每种情况指定一个 0/1 整数作为自己的猜测。先考虑第一种情况,假设 Bob 猜 0,那么在本局结束后又有 4 种分支:
如果是第一个分支,那 Alice 和 Bob 后面只需胜 4 局,否则就需要胜 5 局。请注意,我们在任何时刻总是把 Bob 的策略函数以及 上帝已经揭示的正确答案 看作是固定的,前者当然没有问题,我们没有更改 Bob 的策略,但后者要求我们把前两种分支(上帝的正确答案是 0 )和后两种分支(上帝的正确答案是 1 )分开处理。于是目前的状态不能记为
另外还有一件非常重要的事:这 4 种分支都会出现吗?当然不一定!事实上 Alice 可以随意控制每一种分支是否出现。例如:
此处只有唯一一条限制: 4 种分支至少要出现 1 种 ,否则 Alice 喊出“我们要胜 5 局”的情况就无法继续下去了。
最后,以上都是讨论 Bob 猜 0 的情况,事实上 Bob 还可以猜 1,此时仍然有 4 种分支,而本局结束后的状态则变为
现在我们考虑
注意,竖线左边表示上帝本局选 0,右边表示上帝本局选 1,因此当我们把所有情况加总在一起后,结果便是
回忆一下,上帝前 2 轮给的答案是 10,于是结果就变成
只要问题
当然,分裂过程需要满足一些限定条件。具体地说,只需满足以下两个条件就可以了:
此处可以说明之前奇怪规定的原因了,如果不做那种奇怪规定,当所有数字都分裂成左右两集时,有可能左边右边都有分支,但右边的所有分支都不可能出现,这是不可能做到的,因此干脆规定所有(没被显式禁掉的)分支都必须出现,以排除掉这种“隐形违规”的情况。
注意到,实际上只要补充定义“空的多重集
枚举所有可能的分裂比直接枚举策略快得多,但是还不够快。下面常用
命题1 若
前面解释过为什么
我们把满足
命题2
由命题 1 直接推出。
命题3 若正常集
时命题显然成立,因为此时唯一一个正常集就是
对正整数
(该命题从直观上非常容易理解:若 Alice 有
命题4 若
简而言之就是“子集可解的正常集也可解”。
对正整数
注意到只要中间有一步落入第三种情况,
实际上,
定义 称
命题5 若
(该命题是显然的。)
命题6 若
必要性很容易证明。假设
下面证明充分性,假设
此时,我们可以删掉一些落在左边的分支,使得
现在我们终于摆脱了烦人的
至此终于可以推出我们想要的核心结论:
定义 设
命题7 若
由命题 6 立即可得充分性。为证必要性,设
结论:若
枚举满分裂比枚举所有分裂简单得多,因为每个数字都只需要考虑两种分裂方式。
现在我们来看看前几个
:可解集只有
:极小可解集有
:极小可解集有
:极小可解集有
:极小可解集有
……
随着
容易看出,对任意
假设已经算出
其中最外层的
枚举满足
然后考虑如何算出整个字典
按照
由于我们计算
计算
时若枚举到超过 个元素的集合,则套用 的处理方式(即若 是最后一个非零项,则把 清零并让 自增 1),跳过这个集合。
这样当
利用以上方法,我用 Python 编写了一个程序,算出前几个
大多数情况下
可以看到,原题选取 9 胜 6 和 13 胜 9 两道题目,显然是已经对上帝硬币问题有了深刻的理解!
最后补充一个严格证明,证明上帝硬币问题与多重集分裂问题是等价的。定义:
定义推广的猜硬币游戏:
定理 Alice 和 Bob 能保证胜利,当且仅当
证明:
先假设 Alice 和 Bob 存在一种策略能保证胜利。假设 Alice 报出的数字是
这些分支至少出现一个。如果出现第一个分支,就在左边放一个数字
现在断言:若用多重集
假设这
这时,在虚构游戏中 Bob 已经知道 Alice 报的数字以及 Alice 第一轮的选择,以后双方模仿已有的必胜策略即可。最终,双方在虚构的游戏中至少胜
同理可得:若用多重集
反过来,假设
由定义,可设
现在将分裂过程中得到的所有集合中的所有元素都视为图的顶点,并在这些顶点之间连有向边,连边方法如下:
(标记
如此便构成了一个多叉森林,根节点是
Alice 和 Bob 事先约定并记住这个多叉森林。假设上帝正确答案是长为
Bob 的策略是唯一确定的,这是因为每次猜硬币过后无论 Alice 还是 Bob 都很清楚当前走到了哪个节点,而每个节点所有出边的标记的最后一位要么都是 0,要么都是 1,这样 Bob 就能确定猜哪个了;而 Alice 事先知道走哪条路,只需选择对应的数字即可。因此该策略的确是成立的必胜策略。
本文给出了一种判定上帝硬币问题是否可解的算法(事实上,如果可解,本文最后一节还给出了构造必胜策略的方法),顺带解决了推广的上帝硬币问题。
上帝硬币问题仍有一些问题值得研究,最基础的问题便是能否给出
另外,除了单调性以外,函数
若规律成立,则可能用三分法等算法加速。但很遗憾,这是错的。第一个反例出现在
它不满足上述不等式。
Yuz.Scarlet:
只有当 Alice 和 Bob 的猜测与上帝相同时才算这一轮猜对,否则算错
这句话有点难懂,如果我没有理解错的话,建议改成“当Alici和Bob同时猜对时才算猜对,否则算错” (28 赞)
Kether -> Yuz.Scarlet: 我还以为上帝也要猜呢,还一时没有看懂 (9 赞)
Yuz.Scarlet -> Kether: 我第一次读到这一句也以为是三个人一起猜,然后发现题目条件里没说上帝会怎么猜,所以意识到应该指的是上帝的硬币结果而不是上帝的猜测,那换句话说和结果一样就是猜对了…… (4 赞)
焦子南 -> Yuz.Scarlet: 我去改下题目描述。 (1 赞)
十项全能刘青春 -> Yuz.Scarlet: 如果是任何一个,会把和改成或吧😱 (1 赞)
北巷 -> Yuz.Scarlet: 不是说同时公布结果的吗?那怎么提醒答案的?
真名 -> 北巷: 两人先制定方案,然后上帝把13局答案都告诉A,然后让A在无交流情况下给B传递信息,让B猜。 (1 赞)
北巷 -> 真名: 怎么无交流
真名 -> 北巷:
你有看这篇回答吗?
A和B不能有交流,A唯一能够传递信息给B的手段就是自己每次公布出来的答案,因为两个人每轮的选择都是公开的。然后这篇回答整篇都在讲,A和B要制定什么策略,来帮助B理解A透露的信息 (3 赞)
魏景亮: 这题目很适合让最强大脑节目来做,分组pk,临时出题,限时讨论策略,肯定精彩 (16 赞)
L-云 -> 魏景亮: 运气成分太大,万一队伍没讨论出最优策略但是瞎蒙的几次全对了…… (6 赞)
魏景亮 -> L-云: 增加回合数可以有效防止这种情况,而且可以放出来商量的策略 (1 赞)
观察者 -> 魏景亮: 这种综艺节目真8行 (8 赞)
七只海马 -> 观察者: 95%的观众看不懂的综艺? (3 赞)
even -> 魏景亮: 你太高估最强大脑了吧 (5 赞)
冷睿: 看到后来开始看不懂了[发呆]但是感觉依然很精妙 (17 赞)
夢光Hikari -> 冷睿:
“妙啊”“哪里妙?”“看起来就很妙!”
哈哈哈哈,俺也一样! (17 赞)
Crear: 这不就是bit信息算熵么。。。 (14 赞)
Daniel -> Crear: 啥意思。。
Crear -> Daniel: 通信原理第一课
Daniel -> Crear: 具体要怎么应用到这个问题上
莫某人: 逐渐加速 (9 赞)
月似当时: 这游戏好有趣的样子➡️努力思索➡️滑动速度逐渐暴躁➡️阿巴阿巴➡️师傅别念了 (6 赞)
蛮蛮吖 -> 月似当时: 你是不是在窥探我的屏幕! 说,监视器安装在哪儿了! (1 赞)
月似当时 -> 蛮蛮吖: 😂在手机前置摄像头那,这就拆
夜青: 刚开始看得精精有味,直到出现一堆公式后就 (7 赞)
张驰: 这种思路很像桥牌里的叫牌。某些时候我方牌力较强的时候不是一步到位而是利用路上的一些叫牌透露给同伙手牌信息 (5 赞)
贾铭: 哎,为啥写的是中文但是我却看不懂呢? (4 赞)
中華喜多: 没觉得此题平平无奇…… (4 赞)