在六次机会内猜出一个五字母英文单词,已经成为许多人每天的小习惯,“第一个词猜什么最好”也总能引发讨论。它背后是实打实的数学:计数、概率和信息论。本文只把这个游戏当作切入点,讲清这三个在游戏之外同样有用的概念。例子中的词表和数字都是假设的,只为让计算简洁。

计数:五字母的"词"有多少个?

先看乘法原理:一个选择有 aa 种方式,另一个独立选择有 bb 种方式,两者组合就有 a⋅ba \cdot b 种。字母表有 26 个字母、允许重复时,五字母序列的每个位置都有 26 种选择。

26⋅26⋅26⋅26⋅26=265=11,881,37626 \cdot 26 \cdot 26 \cdot 26 \cdot 26 = 26^5 = 11{,}881{,}376
允许重复的五字母序列数(乘法原理)。

如果五个字母必须互不相同,第一个位置有 26 种,第二个 25 种,依此类推。这就是从 26 个元素中取 5 个的排列数。

A265=26!21!=26⋅25⋅24⋅23⋅22=7,893,600A_{26}^{5} = \frac{26!}{21!} = 26 \cdot 25 \cdot 24 \cdot 23 \cdot 22 = 7{,}893{,}600
字母不重复的五字母序列数。

这些序列几乎都不是真正的单词。这类游戏的答案表通常只有几千个词,只占约 1188 万个序列的极小部分。正因如此游戏才玩得下去:语言本身在你第一次猜之前就排除了绝大多数可能。

再做一次计数:反馈的每一格有三种颜色(字母对且位置对、字母存在但位置不对、字母不存在)。五格共有 353^5 = 243 种颜色模式。有些模式实际上不会出现,但 243 是一次猜测最多能分出的组数。

概率:盲猜命中的机会

若剩下 N 个等可能的候选词,随机选一个命中的概率是 1/N。200 个候选时为 1/200,即 0.5%;2 个候选时为 50%。整个游戏就是尽快缩小 N,而每次猜测都是一个把候选表按颜色模式分组的问题。

信息:为什么会出现对数

设答案是 N 个等可能选项之一。一个设计良好的是非题能把候选减半。需要多少个这样的问题?就是满足 2k=N2^k = N 的 kk,即 k=log⁡2Nk = \log_2 N。这个量的单位是比特。

I=log⁡2NI = \log_2 N
从 N 个等可能选项中确定一个所需的比特数。

200 个候选时,log⁡2200\log_2 200 约为 7.64 比特。游戏中的一次猜测不是是非题,它最多有 243 种反馈,所以理论上最多提供 log⁡2243\log_2 243,约 7.92 比特。真实单词远达不到,但这给出了理论上限。

05010015020025002468候选数比特log₂ N
比特数 = log₂ N:候选数翻倍只多 1 比特。200 个候选约需 7.64 比特;243 种模式约 7.92 比特。

当一次猜测把 N 个候选分成大小为 n1,n2,…,nkn_1, n_2, \dots, n_k 的组时,落入第 ii 组的概率是 pi=ni/Np_i = n_i/N。有两个指标评价猜测:

E[剩余]=∑ipi⋅ni=∑ini2NE[\text{剩余}] = \sum_i p_i \cdot n_i = \frac{\sum_i n_i^2}{N}
猜测之后剩余候选数的期望。
H=∑ipilog⁡21piH = \sum_i p_i \log_2 \frac{1}{p_i}
熵:一次猜测的期望信息量,单位为比特。

第一个很直观:你落入某组的概率与组的大小成正比,落入后剩下的正是这么多。第二个是香农熵,衡量猜测平均能”对半砍”几次。期望剩余越小、熵越大,猜测越好。

例题:比较两次猜测

假设还剩 200 个候选(假设数据)。猜测 A 把它们分成大小为 80、60、40、20 的四组;猜测 B 分成四组各 50 个。哪个更好?

80A:第 1 组60A:第 2 组40A:第 3 组20A:第 4 组50B:每组
猜测 A 留下 80、60、40、20 个候选的四组;猜测 B 留下四组各 50 个。
猜测 A 与猜测 B
  1. p=0.4, 0.3, 0.2, 0.1\displaystyle p = 0.4,\ 0.3,\ 0.2,\ 0.1 猜测 A 的概率:各组大小除以 200。
  2. 802+602+402+202200=12,000200=60\displaystyle \frac{80^2+60^2+40^2+20^2}{200} = \frac{12{,}000}{200} = 60 猜测 A 的期望剩余:平方和除以 200。
  3. 4⋅502200=10,000200=50\displaystyle \frac{4 \cdot 50^2}{200} = \frac{10{,}000}{200} = 50 猜测 B 的期望剩余。
  4. 0.4log⁡22.5+0.3log⁡2103+0.2log⁡25+0.1log⁡210≈1.85\displaystyle 0.4\log_2 2.5 + 0.3\log_2 \tfrac{10}{3} + 0.2\log_2 5 + 0.1\log_2 10 \approx 1.85 猜测 A 的熵(比特,四舍五入)。
  5. 4⋅14log⁡24=2\displaystyle 4 \cdot \tfrac14 \log_2 4 = 2 猜测 B 的熵:四个等大的组恰好是 2 比特。
  6. 结论:B 平均剩余更少、信息更多。组数相同,但均匀的分组更有价值。

验算。 A 的各组之和 80 + 60 + 40 + 20 = 200,B 为 4 × 50 = 200,没有候选遗漏。A 的概率之和 0.4 + 0.3 + 0.2 + 0.1 = 1。四组最多只能提供 log⁡24\log_2 4 = 2 比特,且只有各组相等时才达到,正是 B 的情形。B 之后还剩 50 个候选,约 5.64 比特待解,这也说明为什么一次猜不中。

60猜测 A50猜测 B
猜测后剩余候选数的期望:A 为 60(大组权重更大),B 为 50,均匀划分更好。

常见错误

  • 把序列当成单词。 26 的 5 次方数的是序列,真正决定 N 的是小得多的答案表。
  • 允许重复时却用排列数。 真实单词会有重复字母,7,893,600 只适用于字母互不相同的情况。
  • 以为第一次绿格越多越好。 关键是你落入的组的期望大小,而不是某一轮的运气。
  • 直接取各组大小的平均。 80、60、40、20 的平均是 50,但期望是 60,因为大组更可能被落入。
  • 对数底数用错。 比特对应以 2 为底;用自然对数单位变为”奈特”,除以 ln⁡2\ln 2 即可换算。

常见问题

26 个字母能组成多少个五字母组合?

作为序列有 26 的 5 次方,即 11,881,376 个;字母不重复时为 26 × 25 × 24 × 23 × 22 = 7,893,600 个。真实单词只占其中很小一部分。

一次猜测值 2 比特是什么意思?

平均而言,它像两个精心设计的是非题一样,把候选缩小到原来的四分之一。

为什么期望值要用平方和?

落入第 i 组的概率是 n_i/N,落入后剩 n_i 个候选。对所有组求 n_i/N 乘 n_i 之和,就得到平方和除以 N。

数学能保证几次内猜中吗?

一般不能,这取决于词表。数学提供的是一个选择标准:挑平均能最大程度缩小候选表的猜测。