三、每个球都已知可能为轻或可能为重的情况
先引入一个记号:对于任意实数a,我们用{a}表示大于等于a的最小整数,比如说{2.5}=3,{4}=4;我们用[a]表示小于等于a的最大整数,比如说[2.5]=2,[4]=4。
我们首先考虑这样一种布局的集合。假设m,n为两个非负实数,不同时为0。在编号从1到m+n的m+n个球中,我们知道1到m号球要么是标准球,要么比标准球重,而m+1到m+n号球要么是标准球,要么比标准球轻;我们还知道其中有一个是坏球(但不知轻重)。换句话说,我们知道真实的情况是以下m+n种布局之一:
1. 1号是坏球,且较重;
2. 2号是坏球,且较重;
……
m. m号是坏球,且较重;
m+1. m+1号是坏球,且较轻;
m+2. m+2号是坏球,且较轻;
……
m+n. m+n号是坏球,且较轻。
有一种特殊的情况是m=0或n=0,也就是说坏球的是轻还是重已经知,常常被用来单独作为智力题。
结论1:
1)在以上条件成立的情况下,要保证在m+n个球中找出坏球并知道
其轻重,至少需要称{log3(m+n)}次。
2)如果m和n不同时为1,那么称{log3(m+n)}次就足够了。如果
m=n=1,并且另有一标准球,那么称{log3(m+n)}={log3(1+1)}=1
次也足够了。
这里log3表示以3为底的对数。
需要对2)作点说明。如果m=n=1而没有标准球的话,那么是永远也称不出坏球来的。把两个球一边一个放在天平上,必然是1号重2号轻。但是由于没有标准球,我们无法知道是坏球比较重所以1号是坏的,还是坏球比较轻所以2号是坏的。如果有标准球,只要把1号球和标准球比较一下。如果天平不平衡,那么1号球是坏球,且比较重;如果天平平衡,那么2号球是坏球,且比较轻。策略树如下:(用s表示标准球)
|--右--( )
|
|
(1; s)|--平--(2轻)
|
|
|--左--(1重)
现在来证明1)。在上面我们看到,可能的布局是m+n种(1重,2重,……,m重,m+1轻,m+2轻,……,m+n轻)。假设我们已经有一个策略能保证在这m+n个球中找出坏球并知道其轻重,那么每一个布局都要通向策略树上的不同叶子,这棵策略树至少需要有m+n片叶子。但是一棵高度为H的三分树最多只能有3H片叶子。于是这棵策略树必须满足条件
3H ≥ m+n
也就是
H ≥ log3(m+n)
考虑到H是整数,我们就证明了
H ≥ {log3(m+n)}
现在我们要具体找到一棵高度为{log3(m+n)}的策略树,使得m+n种布局通向它的不同叶子。我们对k=m+n使用数学归纳法。
首先k=1。那么称都不要称,因为必有一坏球,那么坏球就是唯一的1号球。如果是m=1,n=0,那么1号球比较重;如果是m=0,n=1,那么1号球比较轻。需要的称量次数为{log3(1)}=0。
对于k=2。m=1,n=1的情况已经讨论过了。考虑m=2,n=0。这时我们知道坏球比较重。只要把1号球和2号球放在天平两边一称,哪个比较重哪个就是坏球。策略树如下:
|--右--(2重)
|
|
(1; 2)|--平--( )
|
|
|--左--(1重)
m=0,n=2的情况完全类似。
假设对于m+n<k的情况我们都可以用{log3(k)}次称出坏球。考虑m+n=k的情况。我们把1到m号球称为第一组球,m+1到n号球称为第二组球。
设H={log3(m+n)}={log3(k)}。那么我们有
3H-1 < k ≤ 3H
3H-2 < k/3 ≤ 3H-1
3H-2 < {k/3} ≤ 3H-1
于是
{log3{k/3}}=H-1。
现在我们把这k个球分为三堆,第一堆和第二堆分别有{k/3}个球,并且这两堆中属于第一组的球的数目一样(于是属于第二组的球的数目也一样),第三堆中有k-2{k/3}个球(也就是其余的球)。举一个例子,如果m=7,n=3,那么这三堆可以分成这样:(当然不是唯一的分法)
第一堆:1,2,3,7 (属于第一组的3个,第二组的1个)
第二堆:4,5,6,8 (属于第一组的3个,第二组的1个)
第三堆:9,10
这样的分堆总是可能的吗?如果m或n是偶数,那就很简单。比如说假设m是偶数,有两种可能性。如果m/2≥{k/3},那么就从第一组球中各取{k/3}个球作为第一和第二堆(这时在第一第二堆中只有第一组的球);如果m/2<{k/3},那么就把第一组球分为相同的m/2个球的两堆,再分别用{k/3}-m/2个第二组球去把它们补充成{k/3}个球的两堆(这时在第三堆中就只有第二组的球了)。很显然这样的分堆符合上面的要求。
如果m和n都是奇数,事情就有点复杂。首先如果(m-1)/2≥{k/3}的话,那么按上面的方法也很容易把球按要求分为三堆。但是如果(m-1)/2<{k/3},我们就必须先从第一组中各拿出(m-1)/2个球放入第一和第二堆,再从第二组中各拿出{k/3}-(m-1)/2个球将它们补充到各有{k/3}个球为止。这就需要从第二组中总共拿得出2({k/3}-(m-1)/2)个球来。所以必须有
2({k/3}-(m-1)/2) ≤ n
即
2{k/3} ≤ (m-1)+n
2{k/3} ≤ k-1
这个不等式在k=3或k>4时总是成立的,但是对k=4就不成立。所以我们要对k=4且m,n都是奇数的情况作特殊处理。我们只需考虑m=3,n=1这种情况。把1号球和2号球放在天平两端,如果不平衡,那么较重的那个是坏球;如果平衡,那么把1号球和3号球放在天平两端,平衡则4号球为坏球且较轻,不平衡则3号球为坏球且较重。策略树如下:
|--右--(2重)
|
| |--右--(3重)
(1; 2)|--平--(1; 3)|--平--(4轻)
| |--左--( )
|
|--左--(1重)
m=1,n=3的情况完全类似。
于是现在我们就可以毫无障碍地假设,我们已经将m+n=k个球分为这样的三堆:第一堆和第二堆分别有{k/3}个球,并且这两堆中属于第一组的球的数目一样(于是属于第二组的球的数目也一样),第三堆中有k-2{k/3}个球(也就是其余的球)。
我们把第一堆球和第二堆球分别放在天平的左右两端。如果平衡,那就说明坏球在第三堆里,这样我们就把问题归结为一个k-2{k/3}个球的问题;如果右边比较重,那么我们得到结论:要么是坏球比较轻,并且它在第一堆中的第二组球,也就是可能较轻的那些球中,要么是坏球比较重,并且它在第二堆中的第一组球,也就是可能较重的那些球中,下面它就归结为一个{k/3}个球的问题了;如果是左边比较重,那么我们也完全类似地将问题归结为一个{k/3}个球的问题。开始的策略树如下:(小球的编号作了适当变化:假设1,2,……,s为第一堆中的第一组球,1',2'……,s'为第二堆中的第一组球,(s+1),……为第一堆中的第二组球,(s+1)'为为第二堆中的第二组球)
归结为坏球在
|--右--(1',2',……,s',s+1,……)中
| 的问题({k/3}个球)
|
|
(1,2,……,s,s+1,……; |
1',2',……,s',(s+1)',……)|--平--归结为坏球在第三堆中的问题
| (k-2{k/3}个球)
|
| 归结为坏球在
|--左--(1,2,……,s,(s+1)',……)中
的问题({k/3}个球)
考虑到k-2{k/3}≤{k/3},另外此次称量后我们至少可以得到一个标准球(如果不平衡,第三堆里的球均为标准球,否则第一第二堆里的球均为标准球)。根据归纳假设,上面得到“左”、“平”、“右”三种情况归结后的问题都可以用{log3{k/3}}=H-1次的称法来解决。所以加上这第一次称量,k个球只需{log3(k)}次称量就可以找出坏球。
在这节的最后我们给出一个具体的例子:如果有27个球,其中有一个坏球,而且已知第一堆1-14号球如果其中一个是坏球,那么它比标准球重,第二堆15-27号球如果其中一个是坏球,那么它比标准球轻。根据结果1,我们知道只要[log3(27)]=3次就可以找出坏球。
按照上面的称法,首先将27个球分为三堆,第一第二堆的个数为{27/3}=9个球,而且其中分别属于第一和第二组的球的个数相同。于是我们可以取:
第一堆: 1-7,15-16
第二堆:8-14,17-18
第三堆:19-27
现在把第一和第二堆放在天平左右两端,如果平衡,我们就归结为在19-27号9个球中其中有个较轻坏球的问题;如果右边重,我们就归结为坏球在8-14,15-16中的问题;如果左边重,我们就归结为坏球在1-7,17-18中的问题。这三种情况都是9个球的问题。
|--右--归结为坏球在8-14,15-16中的问题
|
|
(1-7,15-16; |
8-14,17-18|--平--归结为坏球在19-27中的问题
|
|
|
|--左--归结为坏球在1-7,17-18中的问题
三种情况中我们只具体做一种:坏球在1-7,17-18中的问题。同样地我们将其分为三堆
第一堆:1-3
第二堆:4-6
第三堆:7,17-18
照上面类似地我们有策略树
|--右--归结为坏球在4-6中的问题
|
|
(1-3; 4-6)|--平--归结为坏球在7,17-18中的问题
|
|
|--左--归结为坏球在1-3中的问题
于是变成了3个球的问题,解决方法就很显然了,我们把上面的策略树写完整:
|--右--( 5重)
|--右--(4 ; 5)|--平--( 6重)
| |--左--( 4重)
|
| |--右--(17轻)
(1-3; 4-6)|--平--(17;18)|--平--( 7重)
| |--左--(18轻)
|
| |--右--( 2重)
|--左--(1 ; 2)|--平--( 3重)
|--左--( 1重)
类似地我们写出坏球在8-14,15-16中的问题的策略树:
|--右--(12重)
|--右--(11;12)|--平--(13重)
| |--左--(11重)
|
| |--右--(15轻)
(8-10;11-13)|--平--(15;16)|--平--(14重)
| |--左--(16轻)
|
| |--右--( 9重)
|--左--(8 ; 9)|--平--(10重)
|--左--( 8重)
和坏球在19-27中的问题的策略树:
|--右--(19轻)
|--右--(19;20)|--平--(21轻)
| |--左--(20轻)
|
| |--右--(25轻)
(19-21;22-24)|--平--(25;26)|--平--(27轻)
| |--左--(26轻)
|
| |--右--(22轻)
|--左--(22;23)|--平--(24轻)
|--左--(23轻)
于是最终将此三棵策略树拼起来的到最终解法:
|--右--(12重)
|--右--(11;12)|--平--(13重)
| |--左--(11重)
|
| |--右--(15轻)
|--右--(8-10; |--平--(15;16)|--平--(14重)
| 11-13)| |--左--(16轻)
| |
| | |--右--( 9重)
| |--左--(8 ; 9)|--平--(10重)
| |--左--( 8重)
|
| |--右--(19轻)
| |--右--(19;20)|--平--(21轻)
| | |--左--(20轻)
| |
| | |--右--(25轻)
(1-7,15-16; |--平--(19-21;|--平--(25;26)|--平--(27轻)
8-14,17-18)| 22-24)| |--左--(26轻)
| |
| | |--右--(22轻)
| |--左--(22;23)|--平--(24轻)
| |--左--(23轻)
|
| |--右--( 5重)
| |--右--(4 ; 5)|--平--( 6重)
| | |--左--( 4重)
| |
| | |--右--(17轻)
|--左--(1-3; |--平--(17;18)|--平--( 7重)
4-6)| |--左--(18轻)
|
| |--右--( 2重)
|--左--(1 ; 2)|--平--( 3重)
|--左--( 1重)
对一棵策略树正确性的验证比较容易(虽然比较烦)。首先检查是否所有的布局都在某片叶子上了;其次就是检验每个布局经过树中的每个节点的流向是否正确,就是说用此节点上的称量方法,它所属的左中右分支符合实际。
先引入一个记号:对于任意实数a,我们用{a}表示大于等于a的最小整数,比如说{2.5}=3,{4}=4;我们用[a]表示小于等于a的最大整数,比如说[2.5]=2,[4]=4。
我们首先考虑这样一种布局的集合。假设m,n为两个非负实数,不同时为0。在编号从1到m+n的m+n个球中,我们知道1到m号球要么是标准球,要么比标准球重,而m+1到m+n号球要么是标准球,要么比标准球轻;我们还知道其中有一个是坏球(但不知轻重)。换句话说,我们知道真实的情况是以下m+n种布局之一:
1. 1号是坏球,且较重;
2. 2号是坏球,且较重;
……
m. m号是坏球,且较重;
m+1. m+1号是坏球,且较轻;
m+2. m+2号是坏球,且较轻;
……
m+n. m+n号是坏球,且较轻。
有一种特殊的情况是m=0或n=0,也就是说坏球的是轻还是重已经知,常常被用来单独作为智力题。
结论1:
1)在以上条件成立的情况下,要保证在m+n个球中找出坏球并知道
其轻重,至少需要称{log3(m+n)}次。
2)如果m和n不同时为1,那么称{log3(m+n)}次就足够了。如果
m=n=1,并且另有一标准球,那么称{log3(m+n)}={log3(1+1)}=1
次也足够了。
这里log3表示以3为底的对数。
需要对2)作点说明。如果m=n=1而没有标准球的话,那么是永远也称不出坏球来的。把两个球一边一个放在天平上,必然是1号重2号轻。但是由于没有标准球,我们无法知道是坏球比较重所以1号是坏的,还是坏球比较轻所以2号是坏的。如果有标准球,只要把1号球和标准球比较一下。如果天平不平衡,那么1号球是坏球,且比较重;如果天平平衡,那么2号球是坏球,且比较轻。策略树如下:(用s表示标准球)
|--右--( )
|
|
(1; s)|--平--(2轻)
|
|
|--左--(1重)
现在来证明1)。在上面我们看到,可能的布局是m+n种(1重,2重,……,m重,m+1轻,m+2轻,……,m+n轻)。假设我们已经有一个策略能保证在这m+n个球中找出坏球并知道其轻重,那么每一个布局都要通向策略树上的不同叶子,这棵策略树至少需要有m+n片叶子。但是一棵高度为H的三分树最多只能有3H片叶子。于是这棵策略树必须满足条件
3H ≥ m+n
也就是
H ≥ log3(m+n)
考虑到H是整数,我们就证明了
H ≥ {log3(m+n)}
现在我们要具体找到一棵高度为{log3(m+n)}的策略树,使得m+n种布局通向它的不同叶子。我们对k=m+n使用数学归纳法。
首先k=1。那么称都不要称,因为必有一坏球,那么坏球就是唯一的1号球。如果是m=1,n=0,那么1号球比较重;如果是m=0,n=1,那么1号球比较轻。需要的称量次数为{log3(1)}=0。
对于k=2。m=1,n=1的情况已经讨论过了。考虑m=2,n=0。这时我们知道坏球比较重。只要把1号球和2号球放在天平两边一称,哪个比较重哪个就是坏球。策略树如下:
|--右--(2重)
|
|
(1; 2)|--平--( )
|
|
|--左--(1重)
m=0,n=2的情况完全类似。
假设对于m+n<k的情况我们都可以用{log3(k)}次称出坏球。考虑m+n=k的情况。我们把1到m号球称为第一组球,m+1到n号球称为第二组球。
设H={log3(m+n)}={log3(k)}。那么我们有
3H-1 < k ≤ 3H
3H-2 < k/3 ≤ 3H-1
3H-2 < {k/3} ≤ 3H-1
于是
{log3{k/3}}=H-1。
现在我们把这k个球分为三堆,第一堆和第二堆分别有{k/3}个球,并且这两堆中属于第一组的球的数目一样(于是属于第二组的球的数目也一样),第三堆中有k-2{k/3}个球(也就是其余的球)。举一个例子,如果m=7,n=3,那么这三堆可以分成这样:(当然不是唯一的分法)
第一堆:1,2,3,7 (属于第一组的3个,第二组的1个)
第二堆:4,5,6,8 (属于第一组的3个,第二组的1个)
第三堆:9,10
这样的分堆总是可能的吗?如果m或n是偶数,那就很简单。比如说假设m是偶数,有两种可能性。如果m/2≥{k/3},那么就从第一组球中各取{k/3}个球作为第一和第二堆(这时在第一第二堆中只有第一组的球);如果m/2<{k/3},那么就把第一组球分为相同的m/2个球的两堆,再分别用{k/3}-m/2个第二组球去把它们补充成{k/3}个球的两堆(这时在第三堆中就只有第二组的球了)。很显然这样的分堆符合上面的要求。
如果m和n都是奇数,事情就有点复杂。首先如果(m-1)/2≥{k/3}的话,那么按上面的方法也很容易把球按要求分为三堆。但是如果(m-1)/2<{k/3},我们就必须先从第一组中各拿出(m-1)/2个球放入第一和第二堆,再从第二组中各拿出{k/3}-(m-1)/2个球将它们补充到各有{k/3}个球为止。这就需要从第二组中总共拿得出2({k/3}-(m-1)/2)个球来。所以必须有
2({k/3}-(m-1)/2) ≤ n
即
2{k/3} ≤ (m-1)+n
2{k/3} ≤ k-1
这个不等式在k=3或k>4时总是成立的,但是对k=4就不成立。所以我们要对k=4且m,n都是奇数的情况作特殊处理。我们只需考虑m=3,n=1这种情况。把1号球和2号球放在天平两端,如果不平衡,那么较重的那个是坏球;如果平衡,那么把1号球和3号球放在天平两端,平衡则4号球为坏球且较轻,不平衡则3号球为坏球且较重。策略树如下:
|--右--(2重)
|
| |--右--(3重)
(1; 2)|--平--(1; 3)|--平--(4轻)
| |--左--( )
|
|--左--(1重)
m=1,n=3的情况完全类似。
于是现在我们就可以毫无障碍地假设,我们已经将m+n=k个球分为这样的三堆:第一堆和第二堆分别有{k/3}个球,并且这两堆中属于第一组的球的数目一样(于是属于第二组的球的数目也一样),第三堆中有k-2{k/3}个球(也就是其余的球)。
我们把第一堆球和第二堆球分别放在天平的左右两端。如果平衡,那就说明坏球在第三堆里,这样我们就把问题归结为一个k-2{k/3}个球的问题;如果右边比较重,那么我们得到结论:要么是坏球比较轻,并且它在第一堆中的第二组球,也就是可能较轻的那些球中,要么是坏球比较重,并且它在第二堆中的第一组球,也就是可能较重的那些球中,下面它就归结为一个{k/3}个球的问题了;如果是左边比较重,那么我们也完全类似地将问题归结为一个{k/3}个球的问题。开始的策略树如下:(小球的编号作了适当变化:假设1,2,……,s为第一堆中的第一组球,1',2'……,s'为第二堆中的第一组球,(s+1),……为第一堆中的第二组球,(s+1)'为为第二堆中的第二组球)
归结为坏球在
|--右--(1',2',……,s',s+1,……)中
| 的问题({k/3}个球)
|
|
(1,2,……,s,s+1,……; |
1',2',……,s',(s+1)',……)|--平--归结为坏球在第三堆中的问题
| (k-2{k/3}个球)
|
| 归结为坏球在
|--左--(1,2,……,s,(s+1)',……)中
的问题({k/3}个球)
考虑到k-2{k/3}≤{k/3},另外此次称量后我们至少可以得到一个标准球(如果不平衡,第三堆里的球均为标准球,否则第一第二堆里的球均为标准球)。根据归纳假设,上面得到“左”、“平”、“右”三种情况归结后的问题都可以用{log3{k/3}}=H-1次的称法来解决。所以加上这第一次称量,k个球只需{log3(k)}次称量就可以找出坏球。
在这节的最后我们给出一个具体的例子:如果有27个球,其中有一个坏球,而且已知第一堆1-14号球如果其中一个是坏球,那么它比标准球重,第二堆15-27号球如果其中一个是坏球,那么它比标准球轻。根据结果1,我们知道只要[log3(27)]=3次就可以找出坏球。
按照上面的称法,首先将27个球分为三堆,第一第二堆的个数为{27/3}=9个球,而且其中分别属于第一和第二组的球的个数相同。于是我们可以取:
第一堆: 1-7,15-16
第二堆:8-14,17-18
第三堆:19-27
现在把第一和第二堆放在天平左右两端,如果平衡,我们就归结为在19-27号9个球中其中有个较轻坏球的问题;如果右边重,我们就归结为坏球在8-14,15-16中的问题;如果左边重,我们就归结为坏球在1-7,17-18中的问题。这三种情况都是9个球的问题。
|--右--归结为坏球在8-14,15-16中的问题
|
|
(1-7,15-16; |
8-14,17-18|--平--归结为坏球在19-27中的问题
|
|
|
|--左--归结为坏球在1-7,17-18中的问题
三种情况中我们只具体做一种:坏球在1-7,17-18中的问题。同样地我们将其分为三堆
第一堆:1-3
第二堆:4-6
第三堆:7,17-18
照上面类似地我们有策略树
|--右--归结为坏球在4-6中的问题
|
|
(1-3; 4-6)|--平--归结为坏球在7,17-18中的问题
|
|
|--左--归结为坏球在1-3中的问题
于是变成了3个球的问题,解决方法就很显然了,我们把上面的策略树写完整:
|--右--( 5重)
|--右--(4 ; 5)|--平--( 6重)
| |--左--( 4重)
|
| |--右--(17轻)
(1-3; 4-6)|--平--(17;18)|--平--( 7重)
| |--左--(18轻)
|
| |--右--( 2重)
|--左--(1 ; 2)|--平--( 3重)
|--左--( 1重)
类似地我们写出坏球在8-14,15-16中的问题的策略树:
|--右--(12重)
|--右--(11;12)|--平--(13重)
| |--左--(11重)
|
| |--右--(15轻)
(8-10;11-13)|--平--(15;16)|--平--(14重)
| |--左--(16轻)
|
| |--右--( 9重)
|--左--(8 ; 9)|--平--(10重)
|--左--( 8重)
和坏球在19-27中的问题的策略树:
|--右--(19轻)
|--右--(19;20)|--平--(21轻)
| |--左--(20轻)
|
| |--右--(25轻)
(19-21;22-24)|--平--(25;26)|--平--(27轻)
| |--左--(26轻)
|
| |--右--(22轻)
|--左--(22;23)|--平--(24轻)
|--左--(23轻)
于是最终将此三棵策略树拼起来的到最终解法:
|--右--(12重)
|--右--(11;12)|--平--(13重)
| |--左--(11重)
|
| |--右--(15轻)
|--右--(8-10; |--平--(15;16)|--平--(14重)
| 11-13)| |--左--(16轻)
| |
| | |--右--( 9重)
| |--左--(8 ; 9)|--平--(10重)
| |--左--( 8重)
|
| |--右--(19轻)
| |--右--(19;20)|--平--(21轻)
| | |--左--(20轻)
| |
| | |--右--(25轻)
(1-7,15-16; |--平--(19-21;|--平--(25;26)|--平--(27轻)
8-14,17-18)| 22-24)| |--左--(26轻)
| |
| | |--右--(22轻)
| |--左--(22;23)|--平--(24轻)
| |--左--(23轻)
|
| |--右--( 5重)
| |--右--(4 ; 5)|--平--( 6重)
| | |--左--( 4重)
| |
| | |--右--(17轻)
|--左--(1-3; |--平--(17;18)|--平--( 7重)
4-6)| |--左--(18轻)
|
| |--右--( 2重)
|--左--(1 ; 2)|--平--( 3重)
|--左--( 1重)
对一棵策略树正确性的验证比较容易(虽然比较烦)。首先检查是否所有的布局都在某片叶子上了;其次就是检验每个布局经过树中的每个节点的流向是否正确,就是说用此节点上的称量方法,它所属的左中右分支符合实际。