分治法:芯片测试

本文探讨了在未知状态的VLSI芯片中通过芯片互测确定良品的有效算法,包括暴力方法与分治法,后者时间复杂度为O(n),提供了一种高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

芯片测试

问题描述

Diogenes教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的

6a (1)_6

教授的测试装置一次可测二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总是能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结果如下:

A报告B报告结论
B是好的A是好的AB都好或者AB都坏
B是好的A是坏的至少一片是坏的
B是坏的A是好的至少一片是坏的
B是坏的A是坏的至少一片是坏的

暴力方法

取一块芯片,一一与其他所有芯片互相检测,假如至少有一半次数报告都是好的,则该芯片是好的。时间复杂度为 O ( n 2 ) O(n^2) O(n2)

分治法

伪代码
  1. k ← n
  2. while k > 3 do
  3. ​ 将芯片分为k/2(下取整)组
  4. ​ 对每一组
  5. ​ if 两片好,任取一片留下
  6. ​ else 两片同时丢掉
  7. ​ k ← 剩下的芯片数
  8. if k == 3
  9. then 任取2片测试
  10. ​ if 至少1坏,取没测的芯片
  11. ​ else 任取1片被测芯片
  12. if k = 2 or 1 then 任取1片
说明

上述算法只是一个概要说明,对于 n为奇数的情况需要进一步处理 , 处理时间为 O(n).(剩下的那片用挑出的芯片检测)

复杂度

T ( n ) = T ( n / 2 ) + O ( n ) , W ( 1 ) = 0 T(n) = T(n/2)+O(n),W(1)=0 T(n)=T(n/2)+O(n),W(1)=0

由主定理, W ( n ) = O ( n ) W(n) = O(n) W(n)=O(n)
GitHub主页上的原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值