数学分析: http://blog.tianya.cn/blogger/post_show.asp?BlogID=2499219&PostID=20677715
代码实现: http://blog.csdn.net/cifry/article/details/1912384
第一:有12个外观完全一样的球;
第二:11个是好球,重量相同;
第三:有一个球是“坏球”,重量与其他11个球异常,但不知偏轻偏重!
第四:有一架天平,无砝码;
问:怎样用该天平称量3次,找出重量异常的球!
============================================================================
先论证可行性:
再来看看牛人的解答吧,从另一个角度看东东,特别牛!!!
从信息论来看,12个球一个重量异常,出现概率1/12;该球质量可能轻也可能重,那么出现概率为1/2。
那么要得到结果所需信息量为log2+log12。
称一次可能有轻、重、相等三种结果,信息量为log3。log24/log3<3,三次应该能称出来。
信息论运用到这种地步,实在是精辟啊。
(说实话,本人只看得懂一部分,信息论好强。)
(参见 David J.C. MacKay 的“Information Theory, Inference, and Learning Algorithms”)
首先考察一个这个题目的性质。
要求从12个球中找出一个次品球来可以归结为一种态空间的搜索。
12个球可以具有很多状态,
例如第一个球是重球,而其它球是正常球,
或者第三球是轻球,而其它球是正常球。
12个球,每个球都可能是重球或者轻球,所以共有24个可能的状态。
标记为1+, 1-, 2+, ..., 12+, 12-。
注意这里我们已经省略了对正常球的描述,而认为它们是一种背景情况。
我们的任务是确定12个球到底处在这24种状态的哪一个。
再来看看我们所具有的搜索手段。
我们只有一架天平,可以将其看作一种指标函数,
其输出有三种:左重右轻,左轻右重,平衡。
所以一次称量我们可以在态空间中进行一次三分操作,
而将搜索空间缩小到态空间中的某一部分。
考虑到最坏的情况,每次我们都可能落入较大的搜索空间,
所以应该尽量进行三等分。
举个例子,
□□□□□□X□□□□□□□□□□Y□□□□□□□□□□Z
□□□□1+ 2+ 3+ 4+□□□□5+ 6+ 7+ 8+ □□□□9+ 10+ 11+ 12+
□□□□1- 2- 3- 4-□□□□5- 6- 7- 8- □□□□9- 10- 11- 12-
如果我们称量X和Y, 如果平衡,则次品球必在Z中。
如果 X > Y,则我们可以排除X中的1-,2-,3-,4-以及Y中的5+,6+,7+,8+等状态。
无论如何,最终只会剩下8个待选状态。
最后明确一下我们在继续称量的过程中需要注意的问题:如何才能最大限度的获取信息。
假设 X > Y, 则剩下1+ 2+ 3+ 4+ 5- 6- 7- 8-这8个状态。
继续称量必须将这8个状态打乱放置到天平两侧,而且要注意到尽量均衡。
比如说我们现在选择称量1+和5-。
显然,现在的结果只能是左重右轻或者平衡,因为根据我们的知识可以排除左轻右重的情况。
而如果比较1+和2+,我们仍然可以得到三种情况。
只有在先验上我们认为两者绝对无法区分的情况下,比较才具有最大的意义。
具体如何称量下去,这里不讲了。只是强调一点,信息是我们意料之外的事情,这是信息论的要点。
最后,说一下如何称13个球吧。不过,只能找出来,不能保证知道坏球是轻是重。
还是分三组,A、B、C,C组5个球(C1,C2,C3,C4,C5)
第一次,还是称量 A :::: B;如果不相等,嘿嘿,和称12个球完全一样了!
如果 A == B,都是好球,C中有“坏球”;
很简单,
第二次,(A1,A2,A3)::::(C1,C2,C3)称量;
如果,==,(C4,C5)有“坏球”,随便哪一个与A1称即可;
如果,>,(C1,C2,C3)中有“坏球”,且坏球轻,再C1和C2称,即可;
如果,<,(C1,C2,C3)中有“坏球”,且坏球重,再C1和C2称,即可;
最后,对信息论的一点儿补充,权当给各位参考:
1)13球问题, 一共有26种可能的情况;
2)天平一次称量结果有3种情况(左偏,平衡,右偏), 3次称量最多有3^3=27种情况。
这说明3次确定出这26种情况是“有可能”的!
=============================================================================
答案很多种,也都很精彩!
正确的都是分成三组:A(A1,A2,A3,A4)、B(B1,B2,B3,B4)、C(C1,C2,C3,C4)
如果不分三组,嘿嘿,那肯定不对!
第一种方法:(分三组,A、B、C,各四个球)
(1)第一次:A :::: B,两组称量;
如果,A == B,A、B 组是好球,C 组(C1,C2,C3,C4)中有“坏球”;
(2)----第二次:(A1,A2)::::(C1,C2),称量; (这里只用了两个球称量!!!! )
----如果,(A1,A2)==(C1,C2),说明(C3,C4)中有“坏球”;
--------第三次:A1 :::: C3,称量;
--------如果,A1 == C3,说明 C3 是好球,结论是:C4 是“坏球”;
--------如果,A1 != C3,说明 C4 是好球,结论是:C3 是“坏球”;
----如果,(A1,A2)!=(C1,C2),说明(C1,C2)中有“坏球”;
--------第三次:A1 :::: C1,称量;
--------如果,A1 == C1,说明 C1 是好球,结论是:C2 是“坏球”;
--------如果,A1 != C1,说明 C2 是好球,结论是:C1 是“坏球”;
(3)如果,A != B,肯定 C 组是好球,
----有两种情况:(左)A > B(右)(A重),或 A < B(A轻);
----以“A > B(A重,左 > 右)”为例,进行操作;
----第二次:天平左侧,A 组留1个球,与 B 组3个球配成一组;
---- 天平右侧,B 组还剩1个球,与 C 组3个球配成一组;
---- 即:(A1,B1,B2,B3)::::(B4,C1,C2,C3),称量;
----此时,将出现三种情况,左 == 右,左 > 右,左 < 右;
----如果,左 == 右,那么,问题球肯定在(A2,A3,A4)中,
---------------- 且因为(A重)为例,说明“坏球”是重的;
--------第三次:A2 :::: A3,称量;
--------如果,A2 = A3,都是好球,结论是:A4 是“坏球”;
--------如果,A2 > A3,结论是:A2 是“坏球”,且重;
--------如果,A2 < A3,结论是:A3 是“坏球”,且重;
----如果,左 > 右,(B1,B2,B3)移动后,未引起变化,是好球,
---------------- 问题球就是(A1,B4),要么A1重,要么B4轻;
--------第三次:C1 :::: A1,称量;
--------如果,C1 = A1,都是好球,结论是:B4 是“坏球”,且轻;
--------如果,C1 < A1,结论是:A1 是“坏球”,且重;
----如果,左 < 右,说明(B1,B2,B3)移位后,引起变化,有坏球,
---------------- 问题球在(B1,B2,B3)中,且“坏球”较轻;
--------第三次:B1 :::: B2,称量;
--------如果,B1 = B2,都是好球,结论是:B3 是“坏球”,且轻;
--------如果,C1 < A1,结论是:A1 是“坏球”,且重;
==========================================================================
其实,这道题的解法还有多种,
分别是对“第一种方法”中的(2)、(3)进行变化。
先说简单的:(2)的变化
前提是:第一次称量,A == B;
变化一
第二次称量:(A1,A2,A3)::::(C1,C2,C3);
如果,==,那么,C4是“坏球”,想知轻重,与 A1 称一下即可;
如果,>,那么,(C1,C2,C3)中有坏球,坏球为轻;
--------第三次称量,C1 :::: C2,
--------如平衡,C3是“坏球”,不平衡,轻的是“坏球”;
如果,<,那么,(C1,C2,C3)中有坏球,坏球为重;
--------第三次称量,C1 :::: C2,
--------如平衡,C3是“坏球”,不平衡,重的是“坏球”;
变化二
第二次称量:(A1,C1)::::(C2,C3);
如果,==,那么,C4是“坏球”,想知轻重,与 A1 称一下即可;
如果,>,那么,(C1,C2,C3)中有坏球,要么C1重,要么C2或C3轻;
--------第三次称量,C2 :::: C3,
--------如平衡,C1是“坏球”,且重;不平衡,轻的是“坏球”;
如果,<,那么,(C1,C2,C3)中有坏球,要么C1轻,要么C2或C3重;
--------第三次称量,C2 :::: C3,
--------如平衡,C1是“坏球”,不平衡,重的是“坏球”;
补充说明:这两种变化,比之前的要好,可以知道“坏球”的轻重!
第一种方法中的(2),
有可能三次称量后,只能判断哪个是“坏球”,却不知是轻是重!