芯片测试—分治

Diogenes教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的。教授的测试装置一次可测二片,当该装置中放有两片芯片 时,每一片就对另一片作测试并报告其好坏。一个好的芯片总是能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结果如下:

芯片A的结果 芯片B的结果 结论
B是好的 A是好的 两片都是好的,或都是坏的
B是好的 A是坏的 至少一块是坏的
B是坏的 A是好的 至少一块是坏的
B是坏的 A是坏的 至少一块是坏的
  1. 证明:如果超过n/2块芯片是坏的,使用任何基于这种逐队检测操作的策略,教授都不能确定哪些芯片是好的。假定芯片可以合谋欺骗教授。
  2. 考虑从n块芯片中寻找一块好芯片的问题,假定超过n/2块芯片是好的。证明:进行 \left \lfloor n/2 \right \rfloor 次逐队检测足以将问题规模减半。
  3. 假定超过 n/2 块芯片是好的,证明:可以用 \theta (n) 次逐队检测找出好的芯片。给出描述检测次数的递归式,并求解他。

(1)将任何一片芯片与其它所有芯片进行比较,因为有多于n/2的芯片是坏的,且坏的芯片可以联合起来欺骗教授,则测试结果是不可靠的,无法判断出该芯片是好是坏。

(2)

1.随机的两两配对,则共有⌊n/2⌋对,分别测试。

2.如果测试结果为一好一坏,或者两坏,那么把这对丢弃;如果测试结果为两好,那么随意丢弃其中一个,留下一个。

3.重复以上操作,直至n<=2.

当n是偶数时:测试结果为一好一坏,或者两坏,丢弃后好芯片数都比坏芯片数多。如果测试结果为两好,那么好芯片的数量至少比坏芯片的数量多一对,随意丢弃一个时,好芯片的数量仍然多于坏芯片的数量。

当n是奇数时:单独操作,用剩下的芯片对其测试,判断其好坏。

(3)复杂度: T(n)=2T(n/2)+n 。根据主定理 T(n)=O(n) 。

你可能感兴趣的:(分析)