🔢 数理与计算科学 · 数学科普

七次找到你:0~100 猜数游戏与离散分布

一个「大了 / 小了」的小游戏,藏着一整棵数学大树
Find You in Seven Tries — The Number-Guessing Game and Discrete Distributions

1 · 先来玩一局

规则很简单:我心里想一个 0~100 的整数,你每次猜一个数,我只回答三个字——小了、大了,或者 猜中。

EN: The rules are simple: I pick an integer from 0 to 100, and you guess one number at a time. I can only answer with three words — “too low”, “too high”, or “correct!”

下面换过来:你在心里想一个 0~100 的数,让机器来猜。点击下面的数字条选一个数(或按「随机想一个」),然后看机器怎么一步步缩小范围找到它——注意看绿色的区间是怎么收缩的。👇

EN: Now let's switch roles: YOU think of a number from 0 to 100, and let the machine guess it. Tap a spot on the number bar (or press “Pick a random one”), then watch the machine close in step by step — keep an eye on how the green interval shrinks! 👇

🎮 小游戏:机器猜你心里想的数 · Mini-Game: The Machine Reads Your Mind

① 在数字条上点一个数(或点「随机想一个」)→ ② 点「开始猜!」→ ③ 看区间一步步收缩
EN: ① tap the number bar (or “Pick a random number”) → ② press “Start” → ③ watch the range shrink step by step
🎯 你心里想的数:50 Your number: 50
0255075100

EN: Think of a number from 0 to 100 and watch the machine narrow it down by always cutting the remaining range in half.

2 · 为什么「砍半」这么厉害?

🧠 先停下来想一想:0~100 猜数,只有「砍半」这一种办法吗?还有其他更好的方法吗?
Are there OTHER ways to play — or even better ones? Think first before you read on!
👉 如果是你,会怎么猜?脑海里先冒出几个方案,再往下看,看看你有没有把它们都想到~

先把规则钉死:每次只能猜一个数,对方只回答「大了 / 小了 / 猜中」。只要遵守这两条,什么方法都合法——所以这个游戏确实藏着好几种算法。下面把大家最容易想到的四种摆在一起,逐个评一评 👇

1️⃣ 顺序查找 Linear Search ✅ 规则允许

从 0 开始:1、2、3、4……一个挨一个往上猜,像查字典从第一页翻起。

❓ 想一想:对方想的是 100,你从头猜起要猜几次?——100 次!因为每猜一次,只排除掉 1 个数。
最坏 100 次 · 平均 ≈50 次🐌 慢
EN: Guess 0,1,2,3… in order. Worst case: 100 guesses (each guess removes just 1 number).
2️⃣ 倒着找 / 跳着找 Reverse or Step-by-Step ✅ 规则允许

从 100 往下试;或者隔 10 个一跳:0、10、20、30……

❓ 想一想:目标 73,用「0、10、20…」怎么找?——先跳到 70(小了)→ 80(大了)→ 知道躲在 71~79 → 还得挨个再试最多 9 次 → 一共约 19 次。比顺序快,但还是慢。
最坏 ≈19 次🐢 还是慢
EN: Guess 0,10,20… then search the gap. ~19 guesses for 73 — better, but not great.
3️⃣ 随机乱猜 Random Guess ✅ 合法但…

想到哪个数就报哪个,完全看心情。

❓ 想一想:它合法吗?合法。但它聪明吗?——它可能重复猜同一个数,运气差时几百次也猜不中,而且没有任何「越猜越接近」的趋势。
最坏:说不准,全靠运气🎲 赌运气
EN: Legal but reckless — it can repeat guesses and never gets closer. Pure luck.
4️⃣ 二分查找 Binary Search ⚡ 刚才机器用的

每次都猜当前范围的正中间:先猜 50,再根据回答把范围对半切开,继续猜新的中间。

💡 想一想它凭什么快?——不管回答是「大了」还是「小了」,剩下的数字都只剩一半:猜 50 → 小了 → 还剩 51~100 共 50 个;大了 → 还剩 0~49 共 50 个。一次排除约 50 个数!
最坏 7 次🚀 最快
EN: Always guess the middle. Every answer halves the range: 101 → 50 → 25 → 12 → 6 → 3 → 1.

把四种方法放在一起看

方法能用在这个游戏?最坏猜几次每猜一次排除几个数
1️⃣ 顺序查找✅ 能100 次1 个
2️⃣ 倒着 / 跳着找✅ 能≈19 次1 个(跳着 10 个)
3️⃣ 随机乱猜⚠️ 能但不推荐说不准靠运气
4️⃣ 二分查找✅ 能,且最优7 次 ←一半 ≈50 个
🔑 发现秘密了吗?猜得快的秘诀不在「猜得准」,而在「排除得多」:慢方法一次排除 1 个数,二分一次排除一半。101 个数被砍 7 次半就只剩 1 个——7 次的来历就在这里。

EN: Compare the four strategies. The winner isn't about guessing “luckily” — it removes the most numbers per guess: half the range each time.

❓ 交给你想想

  1. 上面四种方法,哪种最慢?哪种最聪明?你能给它们排个名次吗?
  2. 如果让你当设计师,能发明一种比「砍半」还快的方法吗?(提示:规则只允许一次猜一个数、回答只有三个字哦)
  3. 「7 次」到底是一个好方法碰巧的结果,还是这个游戏的极限?下一节见分晓 👇

EN: Your turn: rank the four strategies — and try to invent a faster one. Spoiler: next section proves 7 is the game's hard limit, not a lucky coincidence.

3 · 为什么最多 7 次?(两个版本的证明)

结论先亮出来:0~100 一共 101 个数,任何策略最坏都要 7 次,而二分查找正好 7 次搞定——它是最优的。

为什么是 7?因为 2⁶ = 64 < 101 ≤ 128 = 2⁷。下面的证明分两个难度,选一个你喜欢的读法。

🧒 小学生版 · 翻倍的魔法

把问题反过来想

每猜一次,你只能得到两种回答。那么反过来问:猜 k 次,最多能区分多少个数?

猜 1 次最多区分 2 个数(比如 0 和 1,先猜 0)
猜 2 次最多区分 4 个数
猜 3 次最多区分 8 个数
猜 k 次最多区分 2 × 2 × … × 2 = 2ᵏ 个数

每一次回答,都让「你能搞定的数字」翻一倍:

1 → 2 → 4 → 8 → 16 → 32 → 64 → 128 EN: 1, 2, 4, 8, 16, 32, 64, 128 — doubling seven times finally passes 101.

101 个数,翻倍到第 7 次(128)才第一次超过 101。
所以:最坏 7 次,一次不多,一次不少。🧙

EN (for kids): Each “higher/lower” answer doubles how many numbers you can handle. Doubling 1→2→4→…→128 takes 7 steps, and 128 ≥ 101. So 7 guesses always suffice.

🎓 进阶版 · 信息论(Information Theory)

每次回答 = 1 个「比特」

「大了 / 小了」是一个二选一的回答。二选一的信息量,恰好是 1 bit(比特)——计算机里 1 bit 只能表示 0 或 1 两种状态。

猜 k 次 = 最多收集 k 个 bit = 最多区分 2ᵏ 种情况。

目标可能有 101 种,所以需要的比特数 k 必须满足:

2ᵏ ≥ 101  ⇔  k ≥ ⌈log₂ 101⌉ = ⌈6.66…⌉ = 7 EN: since 2⁶ = 64 < 101 ≤ 128 = 2⁷, six bits are not enough — you need seven.

⌈⌉ 是向上取整。因为 2⁶ = 64 装不下 101 种情况,6 个 bit 是不够的——这给出了任何策略都绕不开的下界(lower bound):

任何猜数策略,最坏情况都 ≥ 7 次 EN: No strategy in the world can guarantee success in fewer than 7 guesses.

而二分查找每次回答都恰好提供满 1 bit(范围严格对半),所以它达到下界 = 最优算法。

一般化:N 个数猜一个,最坏需要 ⌈log₂ N⌉ 次。

EN: Each answer carries at most 1 bit. Distinguishing 101 possibilities needs ⌈log₂101⌉ = 7 bits, so no strategy can beat 7 worst-case guesses — and binary search achieves it.

🧒 给小朋友的尺子演示 · Ruler Demo

拿一把 0~100 的尺子,看「最倒霉的情况」——假设对方想的是 100,机器会这样一刀一刀切:

下面 7 行 = 切了 7 刀之后的尺子。🎨 斜纹灰块 = 已经被排除的数;彩色条 = 还剩下的数;黑色气泡 = 分切点(这次猜的数,紧贴在彩条最前面)。注意:每一刀都从彩条最前面切下去,彩条被越推越短。

第 1 次
Guess 1
50
小了 ↑剩 50 个
第 2 次
Guess 2
75
小了 ↑剩 25 个
第 3 次
Guess 3
88
小了 ↑剩 12 个
第 4 次
Guess 4
94
小了 ↑剩 6 个
第 5 次
Guess 5
97
小了 ↑剩 3 个
第 6 次
Guess 6
99
小了 ↑剩 1 个
第 7 次
Guess 7
100
🎯 猜中了!就是 100
0255075100

👀 看懂了吗?每一个黑色气泡(50 → 75 → 88 → 94 → 97 → 99 → 100)都紧贴在彩条最前面——那里就是分切点:这一刀切下去,气泡左边全部变成斜纹灰块(不可能了),右边的彩条就是剩下的范围。彩条越来越短:101 → 50 → 25 → 12 → 6 → 3 → 1。第 7 刀切完,整把尺子只剩 100 一个格子——想不猜中都难!目标若不是 100,会更快;但任何数都逃不出 7 刀。

EN: Each black bubble marks the cutting point, always pressed against the FRONT of the colored strip — everything to its left turns grey (excluded), the colored part is what remains. The strip shrinks 101→50→25→12→6→3→1; after the 7th cut only the cell “100” is left.

4 · 每个数字,要猜几次?——一棵树的秘密

不是每个数字都刚好 7 次:如果你一次就猜中 50,只要 1 次。那每个数字到底要猜几次?把整个猜数过程画成一棵决策树(decision tree),答案就写在树上:

🎄 从根 50 出发,每个节点分出两条路:目标更小走左边,目标更大走右边

大了 小了 50 24 75 11 37 62 88 每一层都继续分叉 ×2,一直长到第 7 层…

树上每一个数字就是一个节点,数字在第几层,猜到它就要几次:根 50 在第 1 层 → 1 次就中;第 2 层的 24、75 → 2 次;第 3 层的 11、37、62、88 → 3 次。EN: A number on level k needs k guesses — the tree tells you instantly.

🧭 走法示例:心里想 88——猜 50(1)→「小了」走右 → 猜 75(2)→「小了」走右 → 猜 88(3)中!一路「小了」就是沿着树最右边往下走。

每一层有哪些数字、一共多少个?把它们从树上全部摘下来,做成一张表——注意:1、2、4、8、16、32、38 这个形状不是巧合,是「分叉法」本身造成的分布特点:每猜一次就分 2 叉,所以每层最多翻一倍,越往下层能猜中的数字越多。

第几次能猜中能猜中的数字(从小到大)一共多少个
第 1 次501
第 2 次24、752
第 3 次11、37、62、884
第 4 次5、17、30、43、56、68、81、948
第 5 次2、8、14、20、27、33、40、46、53、59、65、71、78、84、91、9716
第 6 次0、3、6、9、12、15、18、22、25、28、31、35、38、41、44、48、51、54、57、60、63、66、69、73、76、79、82、86、89、92、95、9932
第 7 次1、4、7、10、13、16、19、21、23、26、29、32、34、36、39、42、45、47、49、52、55、58、61、64、67、70、72、74、77、80、83、85、87、90、93、96、98、10038
🔍 看到两层奇怪的地方了吗?
① 第 7 层本该有 64 个节点(再 ×2),却只有 38 个——因为 101 个数放进前 6 层(1+2+4+8+16+32 = 63 个)后,只剩 101 − 63 = 38 个了,树装不满。
② 校验:1 + 2 + 4 + 8 + 16 + 32 + 38 = 101 ✔ 一个不多,一个不少。

EN: Every node has 2 children, so each level doubles: 1, 2, 4, 8, 16, 32 — and finally 38 at depth 7, because 101 − 63 = 38: the tree cannot be filled completely. Total: exactly 101.

⚠️ 重要:这张表有「前提条件」!这个 1、2、4、8、16、32、38 的形状,不是猜数游戏的普遍规律,而是两个条件同时成立时才出现:
① 特定游戏:0~100 共 101 个数,一次只猜一个,回答只有「大了 / 小了 / 猜中」;
② 特定算法:用二分查找(每次都猜正中间)。
只要换一样,分布就完全变样:换成顺序查找 → 1~100 次几乎均匀分布;换成随机乱猜 → 靠运气、还可能重复;范围换成 0~1000 → 还是翻倍形状,但最深到第 10 层(⌈log₂1001⌉ = 10)。
结论:分布的形状 = 游戏规则 × 算法,两者一起决定。 EN: This distribution is NOT universal — it holds only for THIS game (0–100, three answers) played with binary search. Change the game or the strategy and the shape changes completely.
🧪 想亲手验证这张表?从表里挑一个数——比如第 3 层的 88 或第 7 层的 100——回到第 1 节的小游戏,在数字条上点这个数,看机器是不是真的正好第 3 / 7 次猜中!
🎮 回到 1 · 先来玩一局,亲自试试

5 · 平均要猜几次?

如果对方心里的数是随机的(0~100 等概率),平均要猜几次?把上一节的表加权平均:

平均次数 = (1×1 + 2×2 + 3×4 + 4×8 + 5×16 + 6×32 + 7×38) ÷ 101 = 587 ÷ 101 ≈ 5.81 次

也就是说:随便想一个数来玩,平均不到 6 次机器就能找到你;最坏也不过 7 次。
对比一下顺序乱猜(从 1 试到 100):平均要 (1+100)/2 ≈ 50.5 次。二分查找把平均次数压缩了将近 9 倍。⚡

EN: Expected number of guesses = 587/101 ≈ 5.81 — under 6 on average, never more than 7. Linear guessing averages ~50.5.

6 · 亲眼看看分布——3000 局实测的直方图

下面这张直方图,是程序真实模拟过 3000 局之后画出来的(每局随机想一个 0~100 的数,用二分查找猜)。柱子越高,说明猜这么多次的局数越多——看,形状和上一节表格完全对上了:

34
67
115
243
478
955
1108
猜 1 次猜 2 次猜 3 次猜 4 次猜 5 次猜 6 次猜 7 次
⬆ 柱顶数字 = 实际局数(3000 局里猜这么多次的共有几局)
猜的次数 k1234567
实测局数(3000 局)34671152434789551108
理论期望(≈)≈30≈59≈119≈238≈475≈950≈1129
⚖️ 为什么「≈」?随机模拟有波动(random fluctuation):这次第 1 次猜中的是 34 局,再跑一次可能是 30,也可能是 38——每次都不会一模一样。但只要柱子大致是 1 : 2 : 4 : 8 : 16 : 32 : 38 的「翻倍阶梯」形状,就说明规律对了。细小的波动不重要,形状才重要。
📌 猜 1~5 次的柱子都很矮,6、7 次的柱子最高——分布的重心偏向右边。
为什么柱子参差不齐而不是一样高?因为二分查找树每一层能容纳的数字个数本来就不同(1、2、4、8、16、32、38),这一层节点多,随机目标落到这一层的概率就大。分布的形状,是树的结构决定的。

EN: This histogram shows one real run of 3000 random games: 34, 67, 115, 243, 478, 955, 1108 games needed 1, 2, …, 7 guesses. Expect ≈30, ≈59, …, ≈1129 — random runs wiggle a little, but the doubling shape 1:2:4:8:16:32:38 stays.

再看一眼:这个分布的长相,三个特征

第 4 节的表格、上面的直方图——它们指向同一个形状,这个形状有三个特征(下一篇还会用到):

特征含义直观理解
🎯 离散 Discrete次数只能是整数 1~7,中间没有「2.5 次」柱子之间有空隙,不是一条连续曲线
➡️ 右偏 Right-skewed矮的柱子(次数少)在左,高的在右「很快猜中」很难得,「多猜几次」是常态
✂️ 硬截断 Hard cut-off最多 7 次,不可能有 8、9 次右边没有尾巴——树只有 7 层,封顶了
它像一座往右堆高的阶梯:左边低、右边高、第 7 级戛然而止。它不是中间高两边低的钟形(正态分布),也不是每条一样高的均匀分布。

7 · 离散分布能解决什么?

猜数的「次数」是一个离散随机变量——它只能取 1~7 这些整数。别小看这种「结果只能数出整数」的变量:现实里有一大类问题都靠它来解决。先记住定义:

🎯 离散分布 Discrete distribution:随机变量只能取有限个 / 可数个孤立数值(整数居多),用来描述计数类、次数类、个数类的随机现象。
EN: A discrete distribution describes random variables that take finite or countable isolated values (mostly integers) — used for counting-type random phenomena.

核心能干什么(四件事)

1️⃣
算「事件发生恰好 k 次」的概率 P(exactly k)例:抛 10 次硬币刚好 3 次正面;抽检 20 个样品出现 5 个次品。
2️⃣
求期望、方差 expectation & variance例:平均会出现多少次故障?结果波动大概有多大?
3️⃣
预测与风险评估 prediction & risk例:服务器一小时收到多少请求?一台机器一周故障几次?
4️⃣
假设检验、统计建模 hypothesis testing & modeling例:判断缺陷数量是否符合预期;构建计数类机器学习模型。

常见的离散分布家族(认脸)

🪙 二项分布 Binomial
条件:n 次独立试验,每次只有「发生 / 不发生」,成功概率 p。
回答:n 次试验里恰好成功 k 次的概率。
EN: number of successes in n independent trials.
❓ 例:投 20 颗种子,发芽 12 颗的概率;200 人投票,多少人投赞成票。
☎️ 泊松分布 Poisson
条件:单位时间 / 空间内,独立稀有事件的发生次数。
回答:单位区间内事件发生多少次。
EN: how many rare events happen per unit time or space.
❓ 例:每分钟来电数量;一页书的错别字个数;路口一小时的事故数。
💡 记忆:二项分布 n 很大、p 很小时,可以用泊松近似。
🏀 几何分布 Geometric
条件:独立试验,一直试到第一次成功为止。
回答:要试验多少次才等到第一次成功。
EN: number of trials until the first success.
❓ 例:投篮,投到第几次才命中;抽检几次才抽到第一个次品。
📦 超几何分布 Hypergeometric
条件:有限总体、不放回抽样。
回答:抽出的样本里恰好有 k 个目标。
EN: drawing k target items without replacement from a finite population.
❓ 例:一箱 100 件有 10 件次品,抽 20 件恰好 4 件次品的概率。

离散 vs 连续:一分钟对比

离散 Discrete连续 Continuous
问什么恰好等于某个值:P(X = k)单点概率 = 0,只能问区间概率 P(a < X < b)
用什么描述概率质量函数 PMF概率密度函数 PDF
直觉「正好 3 次」有意义身高正好 170.0000…cm 概率为 0

现实里在哪用

🧪 质量检测:次品数量概率 ☎️ 排队论:请求 / 到达人数 🛡️ 风控:违约用户数 🧬 生物:子代个数、突变次数 📈 A/B 测试:转化用户数统计
🔙 回到猜数游戏:我们这篇的「猜几次」其实也是一种离散分布——只不过它不是上面四种经典模型,而是由「砍半的树」决定的。但它一样能算概率:第 k 次猜中的概率 = 第 k 层的数字个数 ÷ 101(比如 7 次才中的概率 = 38 ÷ 101 ≈ 37.6%)。

EN: Discrete distributions answer counting questions: probability of exactly k successes (Binomial), rare events per unit time (Poisson), trials until first success (Geometric), and draws without replacement (Hypergeometric). Our guessing-count distribution is discrete too — P(k-th guess hits) = level k size / 101.

8 · 小结 + 思考题

这一篇你带走了什么

  1. 猜 0~100 的任意整数,二分查找最坏 7 次,且任何策略都不可能更少——⌈log₂101⌉ = 7
  2. 101 个数在决策树上的分布是 1、2、4、8、16、32、38,平均猜 5.81 次
  3. 这个分布离散、右偏、在 7 截断——它的形状由「每次砍半」的树结构决定

🧒 想一想(小朋友版)

  1. 范围改成 0~1000(1001 个数),最坏要几次?(提示:2⁹=512 < 1001 ≤ 1024=2¹⁰)
  2. 如果对方可以撒谎一次,问题会变难多少?你还能保证找到吗?
  3. 顺序乱猜平均 ≈50.5 次,二分平均 ≈5.81 次——快了多少倍?这个倍数随范围变大还会增长吗?

🎓 想一想(进阶版)

  1. 如果范围恰好是 127 个数(2⁷−1)或 128 个数(2⁷),分布表会变成什么样?「树装不满」的现象会消失吗?
  2. 试着证明:二分查找的「每层节点数翻倍」意味着——随机目标下,猜 k 次的概率是 2ᵏ⁻¹/101(前六层),这解释了为什么柱高逐级翻倍。

🔮 下一篇预告:《钟形曲线从哪里来?》——猜数次数这种「树形分布」永远长不成钟形;而身高、考试分数却能长成完美的钟。为什么?钟形曲线其实是从加法里长出来的,到时候用骰子实验亲眼看它成形。敬请期待~

9 · 三门核心数学,极简对照

Concise comparison table of three core mathematics subjects

学完了「离散分布」,正好把三块最常打交道的数学摆在一起认个脸——它们的研究对象完全不同:

科目核心对象解决什么典型问题代表工具典型产出
🧮 离散数学
Discrete Math
分离、不连续的对象:集合、命题、点边、有限集合 逻辑推理、计数、结构、关系;不关心随机性 逻辑、集合、排列组合、图、树、群 证明、方案总数、路径、分类;给计算机打理论基础
🎲 概率论-离散分布
Discrete Dist.
离散型随机变量(整数、计数) 随机事件发生多大可能性;多少次、多少件的概率 PMF、二项 / 泊松 / 几何 / 超几何、期望方差 P(X = k)、发生 k 次的概率、风险预测
📈 微积分(连续数学)
Calculus
连续实数、连续变化的函数 连续量变化、面积、速度、累积变化 导数、积分、极限 瞬时变化率、总累积量、曲线下面积

EN: Discrete math — separated objects (logic, counting, graphs). Probability (discrete) — chance of each integer outcome. Calculus — smooth continuous change.

🔗 它们之间的关键联系

  1. 离散数学里的排列组合,是计算离散分布概率的计算工具。
    e.g. 二项分布的系数 Cnk 来自组合数学。
    EN: the binomial coefficient Cnk comes from combinatorics.
  2. 离散分布属于概率论,不属于离散数学——离散数学一般不研究「概率多大」。
  3. 微积分可以用来近似离散问题;离散数学用来建模计算机世界;概率论处理随机不确定性。

🗣️ 通俗大白话版本

🧮
离散数学:世界有哪些结构,总共有多少种可能,逻辑上对不对。——没有随机EN: what structures exist, how many possibilities, is it logically valid. (No randomness)
🎲
概率论(离散分布):在随机情况下,每种可能出现的机会是多少。——有随机EN: given randomness, what is the chance of each possibility. (With randomness)
📈
微积分:事物连续变化的时候,变化快慢、积累多少。——连续平滑变化EN: for continuously changing things — rate of change and total accumulation. (Smooth & continuous)

💻 在计算机里分别干什么

  1. 离散数学:最短路径算法、逻辑电路、数据库关系、密码学、统计一共有多少种密码组合。
    EN: shortest-path, logic circuits, database relations, cryptography, counting passwords.
  2. 离散概率分布:服务器每秒收到多少请求的概率、A/B 测试转化概率、故障发生次数预估。
    EN: request-rate probabilities, A/B-test conversion, estimating failure counts.
  3. 微积分:神经网络梯度下降优化。
    EN: gradient-descent optimization in neural networks.
🔗 一个串联小例子(把三门数学串起来):
① 离散数学先算:从 100 个产品里抽 5 个,总共有 C(100,5) 种抽法(数方案);
② 概率论接着算:随机抽取恰好抽到 2 个次品的概率(用上面那个组合数算可能性);
③ 微积分最后上:当样本极大时,用连续的正态分布去近似这个离散概率(连续近似离散)。 EN: ① Discrete math counts C(100,5) possible draws. ② Probability turns that count into the chance of exactly 2 defects. ③ Calculus approximates the discrete answer with a normal curve when samples are huge.
✍️ 作者:LEO爸爸 与 Phys 🐷Authors: Leo's Dad & Phys