习题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
时间: 2024-10-06 07:44:06