分球问题2则

来源:互联网 发布:win32编程 u盘 编辑:程序博客网 时间:2024/05/01 02:20

很经典的俩个问题了

分球问题1:

 给定27个小球,已知其中只有一个小球与其他球的重量不同而且比其他的球重,现在给你一个天平(没有砝码,只能把2堆物体放到俩边,比较那一堆重,或相同),问最坏情况下最少称几次可以找到该球?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

答案是3次, 用三分法,每次把问题的规模缩减为原来的1/3,所以对于n个小球来说最多只需要  log3(n)取上整 次比较

 

分球问题2:

12个小球,已知其中一个球与其他的重量不同(但不知道比其他的球轻还是重),问如何用天平秤3次把该小球找出来


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这次问题不能只用3分来解决了,以为无法通过一次秤量确定异常小球在三堆球中哪一堆,解决该问题的关键是对球进行编号和充分利用秤量一次后所获得的信息。

首先考虑四个球的情况, 不难想到,我们可以通过至多俩次秤量找出四个球中不同的那个球,小于四个球的情况同理

 符号解释:设F(A, B)表示对A组B组进行称量,异常球为A, 正常小球为N

第一步: 我们把12个球平均分成三组,并对每组球编号为x, y, z,然后F(x, y),如果相等的话,则A一定在z中,z中有四个球,可以用至多俩次称量找出

第二步: 如果x > y(x < y 同理),  则可知3中的球都为N, 再次对x,y中的球作如下分组 p = {x[1], x[2], y[1],} q = {x[3], y[2], y[3]}, z = {x[4], y[4], N}, 并F(p,z), 如果相等,A一定在q中,此时可以F(y[2], y[4]), 相等则x[3]为A,如果不相等,则可以断定A在y中,而根据第一次的称量可推断,A必定较轻,所以轻的球即为A

第三步: 如果p > z(p < z同理),根据第一次的称量  则可以推断出  x[1], x[2]其中一个球比较重,或着y[4]比较轻,然后F(x[1], x[2]),如果相等,y[4]为A,如果不相等则较重的那个为A