CLRS 4-6 VLSI chip testing

From 水木社区 Programming版 (Dec 22 2006) By pingfan (繁华一梦)

用G表示好芯片,B表示坏芯片,x-y表示用x和y比较,0、1分别表示测试结果为好芯片和坏芯片。

则有以下几种情况:

G-G: 1-1

G-B: 0-0 or 1-0

B-B: 0-0 or 0-1 or 1-0 or 1-1

 

再做一下逆向分析:

1-1: G-G or B-B

0-1: B-G or B-B

0-0: B-G or G-B or B-B

 

可以看出,当x-y的比较结果a-b中出现0时,x和y中至少有一个芯片是坏的。

 

因为好芯片比坏芯片多,所以有如下算法:

 

1. 定义集合Chip, 包含所有的2k块芯片

2. 将Chip中的芯片等分为两组:x[1..m],y[1..m] 定义新集合newChip <— {}

3. for i <— 1 to m 比较x[i]和y[i],若结果为 "1-1",newChip.insert(x[i]);

4. if newChip.size() = 0

      返回temp

    else if newChip.size() = 1

       返回newChip中的芯片

    else if newChip.size() 是奇数

       删除newChip中的任意一块芯片,并将其保存到temp

5. Chip <— newChip,回到第2步。

 

Complexity:最糟糕情况下,比较次数为:k + k/2 + k/4 + ... + 1 < 2*k 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值