首页 > 代码库 > 算法导论习题4-5:芯片检测
算法导论习题4-5:芯片检测
习题4-5 3rd edition (4-6 2nd edition)
解法1:
将芯片两两配对,对于后三种情况(至少其中一个是坏的),可以直接将该对芯片丢弃,这样丢弃的好的一定不会超过坏的。
剩下的都是第一种情况,以及可能剩下的单个未配对的。
如果数量为偶数,即没有未配对的,那么“好好”对数一定超过“坏坏”对数,所以每对里面丢弃一个即可。
如果数量为奇数,则保留那个未配对的,并且每对丢掉一个。
解法2:
优点是只需单向检测即可。其实解法1稍作修改也可只用到单向检测。
本方法是基于如下事实:用所有芯片去检测某一个固定芯片,如果报告好的次数 >= 坏的次数,则被测芯片是好的。
方法如下:分别用第2,3,4...个芯片去检测第一个,一旦坏的次数 > 好的次数,则将所有用过的芯片丢弃。
分两种情况讨论:(1)被测芯片是好的 (2)被测芯片是坏的。这两种情况都可以保证丢弃的好芯片一定不多于坏芯片。
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]
另外对于第一问的回答参考这里:
http://www.cnblogs.com/longdouhzt/archive/2011/07/15/2107751.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。