日志文章

2007年01月24日 20:00:57

浅谈算法的分析

有这样一个问题:一共有12个从外观看来是一样的乒乓球,其中只有一个乒乓球与其他的乒乓球在质量上有差别,现在有一个没有砝码的天平,只能使用这个天平称3次,问如何才能找那个质量有异常的球。
开始接触这个问题的时候,先是想到怎么快速收敛乒乓球的个数,所以第一次将天平两边各放3个乒乓球,如果天平平衡,说明质量有异常的在没称的6个乒乓球中;如果天平不平衡,则说明在已称的6个乒乓球中。这样在未称的6个中想寻找那个质量有异常的乒乓球将是很困难的事,因为至少这6个乒乓球要比那6个已称的乒乓球要少称一次。
这时我们考虑将12个球分成8个与4个,这样我们称量这8个球时的结果至少可以缩小到4个球,这样就分成了3组4个球,问题就简化到了同样的高度,即每4个球都还有两次称量的机会。
开始只是在考虑异常的情况下,并没有将这重量(即“轻”与“重”)考虑进去,这样在解出6个球是3次可分的情况下,我们尝试将重量加入算法的属性,因为在理论上应该有12种可能的情况才可以满足已知条件,题的本意是每个球都可能是异常的,天平只有3中可能(即“平衡”、“左轻”和“右轻”)。所以我们不考虑轻重,只将其定义为异常时,只能测量2*2*2中可能,即判断8个球。
在分析问题时我们应该考虑这些问题
1.那些已经判断了其中没有异常的球的集合中,也能帮助我们解决问题,因为他们是确定下来的正常的球。
2.应该在每一步后尽量将问题缩小到同一个高度。这样问题将细化,解决一部分也就解决了全部。
3.在已经称量过的乒乓球中,应该记录它们的轻重。以便将问题的属性增加,减少二异性的处理。
4.在进行了一次称量后,应该尝试天平左右两盘同时加球,减球,互换的情况。也就是把问题变化着看的思想。
经过这样的思想过程,得出了以下的结论。
将12个球分别编号(1,2,3,……,12号球)。
第一次称量:将1,2,3,4放入天平左盘,将5,6,7,8放入天平右盘。
一、如果平衡,则异常的球在9,10,11,12中。
二、如果不平衡,假设左侧较轻(右侧轻是算法相同)。则有异常的球在1,2,3,4,5,6,7,8中。
第二次称量:
一、异常在9,10,11,12中时,将1(正常),2(正常),3(正常)放入左盘,将10,11,12放入右盘。
如果平衡,则9异常
如果不平衡,假设左侧轻(右侧轻)时,异常的球在10,11,12中,且其中较重的为异常(其中较轻的为异常)。
二、异常在1,2,……,8中时,将4,6,7,8放入左盘,将5,9(正常),10(正常),11(正常)放入右盘。
如果平衡,则1,2,3有异常,且较轻的为异常。
如果仍然左侧为轻,则说明4,5有异常。
如果右侧为轻,则说明6,7,8有异常,且重的有异常。
第三次称量:
一、异常在10,11,12时(较重的为异常),将10放入左盘,将11放入右盘。
如果平衡,则异常的球为12。
如果左轻,则异常的球为11。
如果右轻,则异常的球为10。
二、异常在1,2,3时(较轻的为异常),将1放入左盘,将2放入右盘。
如果平衡,则异常的球为3。
如果左轻,则异常的球为1。
如果右轻,则异常的球为2。
三、异常在4,5时,将4放入左盘,将12(正常)放入右盘。
如果平衡,则异常的球为5。
如果不平衡,则异常的球为4。
四、异常在6,7,8时(较重的为异常),将6放入左盘,将7放入右盘。
如果平衡,则异常的球为8。
如果左轻,则异常的球为7。
如果右轻,则异常的球为6。
综上可得到12个球的每个球有错误的情况。
    算法的发现和完善是一个比较漫长的过程,重要的是不要拘泥大脑已有的算法和思想,应该开阔自己的思路,发散思维。


文字

Tags: 思想  

类别: 无分类 |  评论(3) |  浏览(2336) |  收藏
一共有 3 条评论
3楼 感悟瞬间 2007年01月29日 16:29:33 Says:
这个应该是用了程序里面的折半排序吧(我记得应该是叫这个)
2楼 仰望天空 2007年01月29日 13:34:57 Says:
太长了 ,没看完 ,下回短一点吧~!
1楼 四海兴唐 2007年01月27日 12:57:48 Says:
如果是原创,说明你是个技术专家的料
发表评论
看不清楚,换一张