再说一下我自己的方法。
1234 vs 5678
1259 vs 34AB
379A vs 146C
这样称量过后,无论哪个球是好事坏,都会有唯一的称量结果。例如,假设9是坏重球,那么称量结果就是平衡、左重、左重,坏球改成任何其他球,都不会出现这个称量结果。那么,上面这个是怎么推导出来的呢?
注意到,如果一个球不参加称量,那么是无法知道轻重的,所以想确切找出哪个球是坏球并知道轻重,每个球都要至少称量一次。
假设我们称量顺序与每次称量的球都是固定好的(就是没有逻辑剪枝),那么假如一个球是坏球,它偏轻和偏重,会形成“对称”的结果。例如假设上面的三次称量中1号球是坏重球,那么称量结果就是(左重,左重,右重),如果1号是坏轻球,那么称量结果就是(右重,右重,左重)。
所以我们先将3次称量所可能形成的结果排列出来,并将“对称”结果拼成一对,赋给某一号球。另外还有一个约束条件,就是出现的总球数必然是偶数,因为每次称量的球数都是偶数。
为简便起见:z左重、p平衡、y右重,当称量平衡时,说明这个球没有参加这次称量。
球编号 |
球轻或重,天平的对称结果 |
球出现次数 |
|
zzz or yyy |
3(没用到) |
1 |
zzy or yyz |
3 |
2 |
zzp or yyp |
2 |
3 |
zyz or yzy |
3 |
4 |
zyy or yzz |
3 |
5 |
zyp or yzp |
2 |
6 |
zpz or ypy |
2 |
7 |
zpy or ypz |
2 |
8 |
zpp or ypp |
1 |
9 |
pzz or pyy |
2 |
A |
pzy or pyz |
2 |
B |
pzp or pyp |
1 |
C |
ppz or ppy |
1 |
|
ppp |
对称状态也是ppp,球没有出现,所以这个时候 无法判断球的轻重,这个状态无用。 |
上表就是一个例子,其中ppp需要舍弃,因为它表示球根本没参加称量,也就无法知道球的轻重。另外球出现次数的总和是24,是一个偶数。
每个球往天平上放的时候,会发现并不是随便摆放就行的。可能会因为摆放不好造成天平两端不均。这里就需要仔细讨论一下。因为我们已经知道,天平称量n次共有3^n种结果,而可以分辨f(n) = (3^n- 3) / 2个球,每个球我们要赋予它2个“对称”结果,那么刨除全部平衡的那个结果(例如上表的ppp),还需要刨除一对。
刨除哪对呢?我们发现,如果一个球对应的结果确定了,那么无论选择“对称”哪一种,某一次称量(例如第一次)这个球出现的次数都不变。例如,1号球对应了(zzy or yyz),那么第一次称量,无论将1号球放在左边或者右边,第一次称量都包含1号球。
所以除去ppp那个状态,对剩下的统计第一次称量,出现多少个球;第二次称量出现多少个球;第三次……会发现每次称量都是9个球,那么为了每次称量都是偶数,必须剔除一行不包含p的结果(球出现次数为3的行),例如剔除(zzy or yyz),将1号球对应的结果改为(zzz or yyy)也能推导出一个放法:
1456 vs 2378
13AB vs 2459
167C vs 349A
对于更多球的情况也类似,都要剔除某一个球出现次数等于n的行。
这个方法有个缺陷,就是计算量很大,将3^n的排列列出来,在n很大时是一个指数级的数。另外排布的时候需要注意,天平两端的球的个数都是( 3^(n-1) - 1 ) / 2 个。但这也算是一种研究,因为它能更清楚地看到天平称量n次的信息容量,以及这些信息都去了哪里。