码迷,mamicode.com
首页 > 其他好文 > 详细

算法导论习题4-5:芯片检测

时间:2014-05-16 09:38:50      阅读:453      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   java   

习题4-5 3rd edition (4-6 2nd edition)

 

解法1:

将芯片两两配对,对于后三种情况(至少其中一个是坏的),可以直接将该对芯片丢弃,这样丢弃的好的一定不会超过坏的。

剩下的都是第一种情况,以及可能剩下的单个未配对的。

如果数量为偶数,即没有未配对的,那么“好好”对数一定超过“坏坏”对数,所以每对里面丢弃一个即可。

如果数量为奇数,则保留那个未配对的,并且每对丢掉一个。

 

解法2:

优点是只需单向检测即可。其实解法1稍作修改也可只用到单向检测。

本方法是基于如下事实:用所有芯片去检测某一个固定芯片,如果报告好的次数 >= 坏的次数,则被测芯片是好的。

方法如下:分别用第2,3,4...个芯片去检测第一个,一旦坏的次数 > 好的次数,则将所有用过的芯片丢弃。

分两种情况讨论:(1)被测芯片是好的 (2)被测芯片是坏的。这两种情况都可以保证丢弃的好芯片一定不多于坏芯片。

bubuko.com,布布扣
def findGood(a):
    good, bad = 0, 0
    for i in range(1,len(a)):
        if a[i].test(a[0]) = "good":
            good += 1
        else:
            bad += 1
        if bad == good + 1:
            return find(a[i+1:])
    return a[0]
bubuko.com,布布扣

 

另外对于第一问的回答参考这里:

http://www.cnblogs.com/longdouhzt/archive/2011/07/15/2107751.html

算法导论习题4-5:芯片检测,布布扣,bubuko.com

算法导论习题4-5:芯片检测

标签:style   blog   class   code   c   java   

原文地址:http://www.cnblogs.com/groovy2013/p/3725815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!