芯片测试问题 zz

题目:

(30分)
芯片测试:有2k块芯片,已知好芯片比坏芯片多.请设计算法从其中找出一片
好芯片,说明你所用的比较次数上限.
其中:好芯片和其它芯片比较时,能正确给出另一块芯片是好还是坏.
坏芯片和其它芯片比较时,会随机的给出好或是坏。

题目分析:

不妨设用芯片比较时,0表示好的判断,1表示坏的判断,X表示不确定的判断。
两个芯片进行比较时,可能出现三种情况:
   a) 两个都好 ==> (0,0)
   b) 一好一坏 ==> (1,X)
   c) 两个都坏 ==> (X,X)
情况a为真,则其逆否命题也为真。知:
   如果两个芯片比较结果中出现1,则这两个芯片中至少有一个是坏的。 ……(一)
好芯片比坏芯片多。知:
  
将2k块芯片平分为两堆芯片,则这两堆芯片中都至少含有一个好的芯片。 ……(二)

根据(一)(二),可以设计如下算法:
   算法输入:2k块芯片,其中好芯片比坏芯片多
   算法输出:一片好芯片
   算法过程:
     1) 将所有芯片平分为两堆,记为A和B。
     2) 如果A中只包含一个芯片,则返回该芯片;否则从A中任取一个芯片,记为t。
     3) 将t与A中其他芯片依次进行比较,有两种可能:
         3.1) 一旦比较时结果中出现1,则将进行比较的两片芯片排除出A,同时从B中任取一个芯片加入A,转至第2步;
         3.2) 所有比较都得到结果(0,0),则返回芯片t。

   算法说明:
       步骤2中,如果A中只包含一个芯片,则B中也只包含一个芯片,由于好芯片比坏芯片多,所以只可能这两个芯片都是好芯片。
       步骤3.1中,如果比较时结果中出现1,根据(一),这两片芯片中至少有一个是坏的,那么将这两片芯片排除出A后,A和B合起来依然满足好芯片比坏芯片多的条件,对原问题的求解转为对同结构子问题的求解。从B中任取一个芯片加入A,可以实现再次平分。
       步骤3.2中,比较都得到结果(0,0),则芯片t一定是好芯片。否则假设t是坏芯片,而根据(二),A中至少含有一个好芯片,用该芯片与t比较时,得到的结果应为(1,X),与所有结果都为(0,0)矛盾。其实可以进一步证明,此时A中所有芯片都是好芯片。
   算法复杂度分析:
       最坏的情况下,总是不进入步骤3.2,且每次步骤3.1中都是比较到最后一块芯片才出现结果1,则此时需要比较的总次数为(k-1)+(k-2)+...+1 = k*(k-1)/2;因此该算法时间复杂度为O(n^2),其中n为总的芯片个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值