猜数字(又称 Bulls and Cows)是一种源自20世纪中期的密码破译类益智游戏,通常由两人或多个人参与,也可一人与电脑对战。该游戏旨在通过猜测对方隐藏的数字序列,逐步逼近正确答案。
游戏规则
猜数字游戏的标准规则是由两人参与,其中一人为出题人,另一人为猜谜人。出题人预先选定一个无重复数字的四位数,而不让猜谜人知晓。猜谜人则开始猜测数字,每次猜测后,出题人会根据猜测数字提供一组“A-B”的反馈,其中“A”代表位置正确的数字数量,“B”代表数字正确但位置错误的数量。例如,若正确答案为5234,而猜谜人猜测5346,则出题人的反馈应为1A2B,表明有一个5的位置正确,而3和4这两个数字虽然正确,但位置不对应。
标准的猜数字游戏由10个数码(0-9)和4个数位组成。可以通过变化数码或数位来丰富游戏,例如使用9个数码玩4个数位的游戏。
当猜谜人收到“A-B”反馈后,可以根据反馈调整自己的猜测,直至猜中全部四个数字(即4A0B)为止。游戏中通常设定了一定的猜测次数上限,根据计算机模拟,采用严谨的猜测策略,任何数字都可以在不超过七次的尝试中被猜中。需要注意的是,有时即使已经确定了数字,仍可能需要额外的一次猜测才能达到4A0B的结果。
变体规则
猜数字游戏还有一种变体规则,称为Mastermind,允许数字重复。在这种规则下,如果猜测数字中有重复的部分,它们只计数一次,且按照最优原则判断。例如,当正确答案为5543,而猜谜人猜测5255时,根据最优原则和每个数字仅能计数一次的规定,反馈应为1A1B,因为第一个5的位置正确,记为1A,而第二个5与答案中的第二个5匹配,记为1B。
解法
猜数字游戏的解决方法通常有两种目标:一种是在限定次数内获胜,另一种则是尽可能减少猜测次数。前者追求的是最差情况下的最少猜测次数,后者则关注平均情况下的最少猜测次数。然而,对于特定的数字和位数组合,这两种目标可能会有所冲突。例如,在Mastermind规则下,平均猜测次数最少的策略平均需要4.340次,但在最差情况下需要6次猜测;如果限制猜测次数至5次,则平均猜测次数最少的策略平均需要4.341次。
目前已知的最少猜测次数为7次,由田中哲朗在1996年提出的解决方案达到了平均5.213次的最佳成绩。系统化的猜测策略可分为三种类型:简单策略、启发式策略和最优策略。这三种策略均适用于不同的游戏规则变体。
简单策略
简单策略是一种直截了当的方法,每次猜测都选择可能答案中的最小值。例如,首次猜测1234,如果得到2A0B的反馈,则下次猜测可能是1256,因为它是最小的可能答案之一。尽管简单策略速度快,但由于猜测次数较多,其效率并不理想。在标准规则下,简单策略最多需要9次猜测,平均需要5.560次。
启发式策略
启发式策略是猜数字游戏中最常见的解法。它的基本流程包括:
1. 首次猜测1234,获取初始反馈(xAyB)。
2. 根据反馈筛选出所有可能的答案集合,称为“可能集”。
3. 对于所有数字,评估其优劣并给予分数,然后选择得分最高者进行猜测。如果多个数字得分相等,则优先选择可能集中的数字。
4. 重复步骤2-3,直到猜中4A0B为止。
启发式策略的关键是如何评估数字的好坏程度。常见的评价指标包括:
- 最坏情况指标(Knuth, 1977):选择能使最大反馈分区内的元素数量最少的数字进行猜测。在标准规则下,这种方法最多需要7次猜测,平均需要5.385次。
- 平均情况指标(Irving, 1978):选择能使可能集预期大小最小的数字进行猜测。在标准规则下,这种方法最多需要7次猜测,平均需要5.268次。
- 预期步数指标(Neuwirth, 1982):也称“熵”指标,选择能使下一步猜测所需的预计步数最小的数字进行猜测。在标准规则下,这种方法最多需要7次猜测,平均需要5.265次。
- 反馈个数指标(Kooi, 2005):选择能带来最多不同反馈的数字进行猜测。在标准规则下,这种方法最多需要8次猜测,平均需要5.308次。
值得一提的是,启发式策略的表现也可能受到数字排列的影响,但这通常不会产生显著差异。
最优策略
最优策略是通过计算机穷举所有可能的猜测方案来寻找最佳策略。由于每次猜测的选择范围有限,而且我们确信能在有限次数内猜中所有答案,因此计算机能够遍历所有的猜测方法,从而找到最优策略。此外,还有一些研究采用了遗传算法等技术来解决猜数字问题,这里不再赘述。
不同规则下的表现
下面是几种解法在不同规则下的表现。这些数据都是通过计算机程序计算得出的。