问题

N 个乒乓球中有一个和其他的质量不同,用天平最少几次一定能称出来?

回答
这个问题是一个经典的称重问题,通常被称为“称球问题”或“分组称重问题”。目标是用最少的称重次数找到一个与其他乒乓球质量不同的球,并且知道它是偏轻还是偏重。

核心思想:分组与排除

天平的每一次称重有三种可能的结果:

1. 左边重: 说明所有在左边的球都不是标准球,或者某个在左边的球是偏重的,或者某个在右边的球是偏轻的。
2. 右边重: 说明所有在右边的球都不是标准球,或者某个在右边的球是偏重的,或者某个在左边的球是偏轻的。
3. 两边平衡: 说明称量在天平上的所有球都是标准质量的。那个不同的球一定在未称量的那一部分球中。

我们就是要通过巧妙的分组,最大化每一次称重能提供的信息,从而快速排除掉大量的正常球。

最少几次一定能称出来?

在称量 N 个乒乓球时,我们需要找到一个算法,使其在最坏情况下所需的称重次数最少。这个最少次数取决于 N。

我们通常将 N 个球分成三组(或者两组再加剩余的球)。

如果一个球和其他球质量不同,但我们不知道它是偏轻还是偏重(这是最经典也是最难的情况):
对于 N 个球,最少称重次数的公式是:$lceil log_3 N ceil$ (对数底为3,向上取整)。
然而,这个公式稍微简化了。更准确地说,对于 N 个球,我们可以通过称重来区分出不同的球和它的偏向。
更严谨地说,如果我们知道有一个球的质量不同,并且不知道它是偏轻还是偏重,那么最多可以处理的球数是 $3^k 1$ 个球,其中 $k$ 是称重次数。反过来,如果我们要称量 $N$ 个球,我们需要的次数 $k$ 满足 $3^k 1 ge N$。所以,$k ge log_3(N+1)$。因此,最少次数是 $lceil log_3(N+1) ceil$。

如果知道这个球是偏轻或者偏重(两种情况任选其一):
如果我们知道这个球一定是偏轻的(或者一定是偏重的),那么我们可以将球分成三组,每次称量两组。
在这种情况下,最少称重次数是 $lceil log_3 N ceil$。因为每次称重,我们知道哪一组包含了那个不同的球。

详细说明(以最常见且最困难的“不知道是偏轻还是偏重”的情况为例):

假设我们有 N 个乒乓球,其中一个质量不同,但不知道是偏轻还是偏重。

基本原则:三次称量最多可以确定 12 个球的异常球。

我们先从一个经典的例子开始,比如 12 个球。

目标:用最少次数称量 N 个球,找出那个不同的球,并判断它是偏轻还是偏重。

最少次数 $k$ 满足 $3^k ge N$ (这是粗略的说法)。更精确的说法是,三次称重能区分 $3^3 = 27$ 种状态。这 27 种状态是:球1偏轻,球1偏重,球2偏轻,球2偏重...球13偏轻,球13偏重...

第 1 次称重: 13 个球分成三组,每组 4 个球。
A组 (4个球) vs B组 (4个球)。 剩余 C组 (4个球)。
情况 1:天平平衡。
说明 A 组和 B 组的 8 个球都是标准球。
那么那个不同的球一定在 C 组的 4 个球中。
同时,我们也知道这 4 个球中,有一个是异常球,我们不知道它是偏轻还是偏重。
接下来怎么办? 我们需要用已知的标准球来称量这 4 个球。
第 2 次称重: 从 C 组取 3 个球 (C1, C2, C3),与 3 个已知标准球 (S1, S2, S3) 进行称量。
情况 1.1:天平平衡。
说明 C1, C2, C3 都是标准球。
那么剩下的那个 C4 球就是异常球。
第 3 次称重: 将 C4 与一个标准球进行称量。如果 C4 重,则 C4 是重球;如果 C4 轻,则 C4 是轻球。
情况 1.2:天平左边重 (C1, C2, C3 比 S1, S2, S3 重)。
说明异常球是 C1, C2, C3 中的一个,并且它是偏重的。
第 3 次称重: 将 C1 vs C2。
如果 C1 重,则 C1 是重球。
如果 C2 重,则 C2 是重球。
如果 C1 和 C2 平衡,则 C3 是重球。
情况 1.3:天平右边重 (S1, S2, S3 比 C1, C2, C3 重)。
说明异常球是 C1, C2, C3 中的一个,并且它是偏轻的。
第 3 次称重: 将 C1 vs C2。
如果 C1 轻,则 C1 是轻球。
如果 C2 轻,则 C2 是轻球。
如果 C1 和 C2 平衡,则 C3 是轻球。

情况 2:天平左边重 (A 组比 B 组重)。
说明异常球在 A 组的 4 个球中,并且它是偏重的;或者在 B 组的 4 个球中,并且它是偏轻的。
我们把 A 组的球标记为 A1, A2, A3, A4 (潜在重球)。
我们把 B 组的球标记为 B1, B2, B3, B4 (潜在轻球)。
第 2 次称重: 进行如下分组称量:
称量 (A1, A2, B1) vs (A3, B2, S1)。 (S1 是一个已知标准球,从剩余未参与第一次称量的 4 个球中选取)。
情况 2.1:天平平衡。
说明 (A1, A2, B1) 和 (A3, B2, S1) 中的所有球都是标准球。
那么异常球必定是未参与此次称量的球:A4 (潜在重球) 或 B3, B4 (潜在轻球)。
第 3 次称重: 将 A4 vs S2 (另一个标准球)。
如果 A4 重,则 A4 是重球。
如果 A4 平衡,则异常球是 B3 或 B4,且是轻球。再称量 B3 vs S3。如果 B3 轻,则 B3 是轻球;如果 B3 平衡,则 B4 是轻球。
情况 2.2:天平左边重 (A1, A2, B1 比 A3, B2, S1 重)。
可能的情况:A1 是重球,或 A2 是重球,或 B2 是轻球。
第 3 次称重: 将 A1 vs A2。
如果 A1 重,则 A1 是重球。
如果 A2 重,则 A2 是重球。
如果 A1 和 A2 平衡,则 B2 是轻球。
情况 2.3:天平右边重 (A3, B2, S1 比 A1, A2, B1 重)。
可能的情况:A3 是重球,或 B1 是轻球。
第 3 次称重: 将 A3 vs S2。
如果 A3 重,则 A3 是重球。
如果 A3 平衡,则 B1 是轻球。

情况 3:天平右边重 (B 组比 A 组重)。
这与情况 2 对称。说明异常球在 B 组的 4 个球中,且是偏重的;或者在 A 组的 4 个球中,且是偏轻的。
重复情况 2 的逻辑,只是把“重”和“轻”的判断颠倒过来。

结论:12 个球最少需要 3 次称量。

对于任意 N 个球,最少需要几次?

正如前面提到的,对于“不知道是偏轻还是偏重”的情况,最少称重次数 $k$ 满足 $3^k ge N$。 更精确的来说,是 $3^k ge 2N+1$(因为每个球都可能偏轻或偏重,总共有 $2N$ 种可能异常)。但我们每次称量分三组,最大化了信息量。

对于 $N$ 个球,其中一个异于常态(但不知道是轻是重),最少称重次数 $k$ 是使得 $3^k ge 2N+1$ 成立的最小整数 $k$。

推导:

每一次称量有三种结果(左重、右重、平衡)。
$k$ 次称量,总共有 $3^k$ 种不同的结果。
我们需要区分以下状态:
球1是轻球
球1是重球
球2是轻球
球2是重球
...
球N是轻球
球N是重球
所有球都是标准球 (这种情况在我们知道有一个球异常时,不需要考虑,但分组时要考虑平衡的可能性)。

我们需要能够区分 $2N$ 种可能性(N个球中的一个,可能是轻,也可能是重)。

但是,如果考虑天平平衡的情况,它也提供了信息。每次称量将球分成三部分:左盘的球,右盘的球,未称量的球。
如果称量平衡,说明所有称量的球都是正常的,异常球在未称量的部分。
如果称量不平衡,异常球在称量的球中。

假设我们有 $N$ 个球,要用 $k$ 次称量。
每次称量的结果可以用来区分不同的可能性。我们可以将球分成三组:左边 $L$,右边 $R$,未称量 $U$。
称量 $L$ vs $R$。

1. 平衡: 异常球在 $U$ 中,且不知道是轻是重。我们还需要知道 $U$ 中球的正常情况,以便进行后续判断。
2. 左重: 异常球在 $L$ 中且是重球,或者在 $R$ 中且是轻球。
3. 右重: 异常球在 $R$ 中且是重球,或者在 $L$ 中且是轻球。

每一次称量,我们都可以极大地缩小异常球的范围。
实际上,每次称重,我们可以将 $3^k$ 种可能结果映射到 $2N+1$(N个球的轻或重,加上一个“所有球都正常”的虚构情况,以便处理平衡结果)。

所以,我们需要 $3^k ge 2N+1$。
因此,最少次数是 $k = lceil log_3(2N+1) ceil$。

我们再回头看看那个经典的 12 球问题。
如果 N=12, $2N+1 = 25$。
$log_3(25)$ 介于 2 和 3 之间 ($log_3 9 = 2$, $log_3 27 = 3$)。
所以 $lceil log_3(25) ceil = 3$ 次。

如果 N=13 个球呢?
$2N+1 = 27$。
$log_3(27) = 3$。
所以,13 个球也只需要 3 次。

那么,用 3 次称量最多能称多少个球?
$3^3 = 27$。我们需要 $2N+1 le 27$。
$2N le 26$
$N le 13$。
所以,最多可以处理 13 个球。

例子:13 个球

假设我们有 13 个球,其中一个质量不同。
我们将球编号为 1 到 13。
1. 第一次称量: (1, 2, 3, 4) vs (5, 6, 7, 8)。 剩下 (9, 10, 11, 12, 13)。
平衡: 异常球在 (9, 10, 11, 12, 13) 中。我们知道 (18) 是标准球。
第二次称量: (9, 10, 11) vs (1, 2, 3) (标准球)。
平衡: 异常球是 12 或 13。
第三次称量: (12) vs (1)。 如果 12 重,则 12 重球。如果平衡,则 13 是异球。再称 13 vs 1,判断轻重。
左重 (9,10,11 比 1,2,3 重): 异常球是 9, 10, 11 中的一个,且是重球。
第三次称量: (9) vs (10)。 如果 9 重,9 重球;如果 10 重,10 重球;如果平衡,11 重球。
右重 (1,2,3 比 9,10,11 重): 异常球是 9, 10, 11 中的一个,且是轻球。
第三次称量: (9) vs (10)。 如果 9 轻,9 轻球;如果 10 轻,10 轻球;如果平衡,11 轻球。
左重 (1,2,3,4 比 5,6,7,8 重): 异常球在 (1,2,3,4) 中且是重球,或者在 (5,6,7,8) 中且是轻球。剩下的球 (913) 都是标准球。
第二次称量: (1, 2, 5) vs (3, 6, 9)。 (9 是标准球)
平衡: 异常球是 4 (潜在重) 或 7 或 8 (潜在轻)。
第三次称量: (7) vs (8)。 如果 7 轻,7 轻球;如果 8 轻,8 轻球;如果平衡,4 重球。
左重 (1,2,5 比 3,6,9 重): 可能 1 是重球,或 2 是重球,或 6 是轻球。
第三次称量: (1) vs (2)。 如果 1 重,1 重球;如果 2 重,2 重球;如果平衡,6 轻球。
右重 (3,6,9 比 1,2,5 重): 可能 3 是重球,或 5 是轻球。
第三次称量: (3) vs (9)。 如果 3 重,3 重球;如果平衡,5 轻球。
右重 (5,6,7,8 比 1,2,3,4 重): 对称于左重。异常球在 (5,6,7,8) 中且是重球,或者在 (1,2,3,4) 中且是轻球。
第二次称量: (5, 6, 1) vs (7, 2, 9)。 (9 是标准球)
平衡: 异常球是 8 (潜在重) 或 3 或 4 (潜在轻)。
第三次称量: (3) vs (4)。 如果 3 轻,3 轻球;如果 4 轻,4 轻球;如果平衡,8 重球。
左重 (5,6,1 比 7,2,9 重): 可能 5 是重球,或 6 是重球,或 2 是轻球。
第三次称量: (5) vs (6)。 如果 5 重,5 重球;如果 6 重,6 重球;如果平衡,2 轻球。
右重 (7,2,9 比 5,6,1 重): 可能 7 是重球,或 1 是轻球。
第三次称量: (7) vs (9)。 如果 7 重,7 重球;如果平衡,1 轻球。

总结一下,关键在于将可能的异常球和它们的性质(轻或重)映射到每次称量的结果上。
每次称量,我们希望将当前待定球的集合尽可能地缩小到当前结果对应的可能性集合中。最理想的情况是每一次都将待定球的数量缩小到原来的 $1/3$。

公式的理解:

为何是 $log_3$? 因为天平有三种结果。
为何是 $lceil dots ceil$ (向上取整)? 因为你不能进行部分称量。即使只剩下一个球,你也需要进行一次称量来确定它的轻重。
为何是 $2N+1$? 假设有 $N$ 个球。
有 $N$ 种可能性是球 $i$ 是轻的。
有 $N$ 种可能性是球 $i$ 是重的。
再加上一种“所有球都是标准球”的可能性(虽然我们知道有一个异常,但分组时需要考虑平衡的可能性,这个“所有球正常”的假设是排除法的一部分)。
总共 $2N+1$ 种状态需要区分。
$k$ 次称量,可以区分 $3^k$ 种状态。
所以需要 $3^k ge 2N+1$。

特殊情况的次数:

知道球是偏轻(或偏重):
这种情况下,每组球只有一种异常的可能性(要么就是它,要么不是)。
N 个球,每组分 $N/3$ 个。称量 $N/3$ vs $N/3$。
如果平衡,异常球在未称量的 $N/3$ 中。
如果左重,异常球在左盘,是重球。
如果右重,异常球在右盘,是重球。
每次称量,可以将可能的球数缩减到原来的 $1/3$。
所以需要 $3^k ge N$。
最少次数 $k = lceil log_3 N ceil$。
例如:9个球,已知偏轻,只需要 $lceil log_3 9 ceil = 2$ 次。
第一次:3个 vs 3个。
如果平衡,异常球在剩下的 3个中。
第二次:1个 vs 1个 (从剩下的3个中)。
如果平衡,最后一个是轻球。
如果左重,左边的轻球。
如果右重,右边的轻球。

总结:

1. 如果不知道异球是偏轻还是偏重: 最少次数是 $lceil log_3(2N+1) ceil$。
2. 如果知道异球是偏轻(或偏重): 最少次数是 $lceil log_3 N ceil$。

在实际的题目中,如果没有特别说明,通常是指第一种情况(不知道轻重),所以答案是 $lceil log_3(2N+1) ceil$。

例如:
3 个球:$lceil log_3(23+1) ceil = lceil log_3 7 ceil = 2$ 次。
9 个球:$lceil log_3(29+1) ceil = lceil log_3 19 ceil = 3$ 次。
12 个球:$lceil log_3(212+1) ceil = lceil log_3 25 ceil = 3$ 次。
13 个球:$lceil log_3(213+1) ceil = lceil log_3 27 ceil = 3$ 次。
14 个球:$lceil log_3(214+1) ceil = lceil log_3 29 ceil = 4$ 次。

所以,“N 个乒乓球中有一个和其他的质量不同,用天平最少几次一定能称出来?”——这里的“一定能称出来”通常意味着包含了找到它并且判断出轻重。如果没有特别说明“已知偏轻/偏重”,则默认是不知道的。

因此,最少次数是 $lceil log_3(2N+1) ceil$ 次。

网友意见

user avatar

@洪涛 的文献和@陳浩 的解析太赞了,集精巧和严谨于一身,可以说小球称重问题已经得到了圆满的解决。
为了更直观、更易懂、让PDF恐惧症患者都能弄明白,我做了个小程序来演示,点击进入:

  • 支持3~999个球;
  • 用户自行选择哪个球是特殊球,是轻还是重,然后由电脑自动分组称量;
  • 用绿色代表轻,红色代表重;
  • 演示界面大致是这么个效果:



希望能帮助大家更好地理解。

PS:知乎要是能嵌入代码我就不至于把它放到单独的网站上了,不过这大概不太可能……


2020.8.14 更新:

解决bug:12个球本应3次就称出结果,但代码里是4次。其实代码没错,是chromium内核执行js的bug,过滤一遍数值就行了。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有