27个砝码中,只有一个与其他26个砝码重量不同且不知该砝码是轻还是重,问最少需要称多少次能找到该砝码
2016-07-06 16:58
405 查看
一. 首先,遇到这种题目,第一反应就是二分,对半称,再对半称,所以有方法一:
先取出一个,剩余26个对半称(第1次),此时最优情况可能就出现了,刚好取出的那个砝码就是重量不一样的砝码(下文直接用特殊砝码代替重量不一样的砝码),于是13对13就平衡了。
如果取出的砝码(记为 i )是普通砝码,就继续往下称。
假设刚才分的两堆分别为A(13)与B(13),则将A(13)中取出一个砝码,记为 j ,剩下的12个砝码,对半称(第2次),分别记为 Aa’(6) 与 Ab’(6),同时对B(13)做同样处理,取出的砝码记为 k ,对半称(第3次)的两堆分别为 Ba’(6) 和 Bb’(6),此时有个特殊情况,就是刚好从堆 A(13) 与 B(13) 中取出的两个砝码中有一个是特殊砝码。这样就直接在已经取出的 i,j,k 三个砝码中来找出特殊砝码,因为经过 1 中步骤,已经知道 i 是普通砝码,则只需将 i 与 j、k 中任意一个砝码称一次(第4次),假设 i 与 j 称,如果平衡,则 k 是特殊砝码,如果不平衡,则 j 是特殊砝码,这样就一共称了4次,这还是在第二次对半称时出现最优的情况,如果 j 与 k 都不是特殊砝码,则还需要称更多次。
二. 实际上在解决这种不知道砝码是轻还是重的问题时,三分更好。
将27个砝码分为3堆,每堆9个,分别记为A(9)、B(9)、C(9)。
最优情况
将A(9)与B(9)比较,此时平衡,则C(9)中包含特殊砝码。
将C(9)均分成3堆,每堆3个,分别记为Ca’(3)、Cb’(3)、Cc’(3),将Ca’(3)与Cb’(3)比较,此时平衡,则Cc’(3)中包含特殊砝码。
将Cc’(3)中的3个砝码分别记为 i、j、k ,将 i 与 j 比较,此时平衡,则 k 为特殊砝码。这就是三分解的最优情况,称了3次。
普通情况
A(9)与B(9)比较,此时不平衡(第1次),然后将A(9)与B(9)中任意一堆与C(9)比较(第2次),假设A(9)与C(9)比较,如果平衡,则B(9)中包含特殊砝码,如果不平衡,则A(9)中包含特殊砝码,并且此时我们知道特殊砝码到底是轻还是重了。
假设经过上一步,得到A(9)中包含特殊砝码,且特殊砝码比普通砝码重。
此时如果对A(9)采用方法一中的方法,取出一个砝码,然后4对4比较,且取出的砝码即为特殊砝码,这样也只称3次,但如果取出的砝码不是特殊砝码,则需要继续二分下去,共需要称5次。
如果继续三分,则将A(9)三分为 Aa’(3)、Ab’(3)、Ac’(3),将 Aa’(3) 与 Ab’(3) 比较(第3次),如果平衡,则 Ac’(3) 包含特殊砝码,如果不平衡,则重的一堆中包含特殊砝码(基于上面的假设)。
假设 Aa’(3) 中包含特殊砝码,其中的三个砝码分别为 i、j、k,任意比较两个砝码,即可得到特殊砝码(第4次)。总共称了4次。
这类型问题一般采用分治的思想解决,但知道轻重与不知道轻重的解决方法是有区别的,除去特殊情况,知道轻重,最少两个比较对象就可以解决问题,不知道轻重,则至少需要3个比较对象来解决。
先取出一个,剩余26个对半称(第1次),此时最优情况可能就出现了,刚好取出的那个砝码就是重量不一样的砝码(下文直接用特殊砝码代替重量不一样的砝码),于是13对13就平衡了。
如果取出的砝码(记为 i )是普通砝码,就继续往下称。
假设刚才分的两堆分别为A(13)与B(13),则将A(13)中取出一个砝码,记为 j ,剩下的12个砝码,对半称(第2次),分别记为 Aa’(6) 与 Ab’(6),同时对B(13)做同样处理,取出的砝码记为 k ,对半称(第3次)的两堆分别为 Ba’(6) 和 Bb’(6),此时有个特殊情况,就是刚好从堆 A(13) 与 B(13) 中取出的两个砝码中有一个是特殊砝码。这样就直接在已经取出的 i,j,k 三个砝码中来找出特殊砝码,因为经过 1 中步骤,已经知道 i 是普通砝码,则只需将 i 与 j、k 中任意一个砝码称一次(第4次),假设 i 与 j 称,如果平衡,则 k 是特殊砝码,如果不平衡,则 j 是特殊砝码,这样就一共称了4次,这还是在第二次对半称时出现最优的情况,如果 j 与 k 都不是特殊砝码,则还需要称更多次。
二. 实际上在解决这种不知道砝码是轻还是重的问题时,三分更好。
将27个砝码分为3堆,每堆9个,分别记为A(9)、B(9)、C(9)。
最优情况
将A(9)与B(9)比较,此时平衡,则C(9)中包含特殊砝码。
将C(9)均分成3堆,每堆3个,分别记为Ca’(3)、Cb’(3)、Cc’(3),将Ca’(3)与Cb’(3)比较,此时平衡,则Cc’(3)中包含特殊砝码。
将Cc’(3)中的3个砝码分别记为 i、j、k ,将 i 与 j 比较,此时平衡,则 k 为特殊砝码。这就是三分解的最优情况,称了3次。
普通情况
A(9)与B(9)比较,此时不平衡(第1次),然后将A(9)与B(9)中任意一堆与C(9)比较(第2次),假设A(9)与C(9)比较,如果平衡,则B(9)中包含特殊砝码,如果不平衡,则A(9)中包含特殊砝码,并且此时我们知道特殊砝码到底是轻还是重了。
假设经过上一步,得到A(9)中包含特殊砝码,且特殊砝码比普通砝码重。
此时如果对A(9)采用方法一中的方法,取出一个砝码,然后4对4比较,且取出的砝码即为特殊砝码,这样也只称3次,但如果取出的砝码不是特殊砝码,则需要继续二分下去,共需要称5次。
如果继续三分,则将A(9)三分为 Aa’(3)、Ab’(3)、Ac’(3),将 Aa’(3) 与 Ab’(3) 比较(第3次),如果平衡,则 Ac’(3) 包含特殊砝码,如果不平衡,则重的一堆中包含特殊砝码(基于上面的假设)。
假设 Aa’(3) 中包含特殊砝码,其中的三个砝码分别为 i、j、k,任意比较两个砝码,即可得到特殊砝码(第4次)。总共称了4次。
这类型问题一般采用分治的思想解决,但知道轻重与不知道轻重的解决方法是有区别的,除去特殊情况,知道轻重,最少两个比较对象就可以解决问题,不知道轻重,则至少需要3个比较对象来解决。
相关文章推荐
- CDN缓存那些事
- 享元模式与单例模式区别
- tableau SSO--Trusted Authentication实操
- MAC OpenSSL: OpenSSL CA Signing Error field needed to be the same in the CA certificate
- 设置Tag防止ListView图片错位
- MyBatis入门学习(三)
- PackageInfo、ResolveInfo
- ios 设置表格tableview每行分割线从屏幕边缘开始
- c语言库函数总结(网上摘要)
- 【解决】fatal error: X11/XXXX.h: No such file or directory
- 红黑树
- 决策树--ID3
- code1167 树网的核
- 5.6 太多分区引起OOM
- springmvc对象映射个数超过256个
- 总结了一些指针易出错的常见问题(七)
- 【阅读笔记】《轻量级JavaEE企业应用实战》(第八章)
- mysql如何查看建表时的注释
- 理解矩阵(三)
- android_控件属性