算法导论-VLSI芯片测试问题

来源:互联网 发布:华为媒体算法工程师 编辑:程序博客网 时间:2024/04/29 23:24

问题叙述:

4-6  VLSI芯片测试

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

 

    A芯片报告         B芯片报告     结论


    B是好的          A是好的      都是好的,或都是坏的

    B是好的          A是坏的      至少一片是坏的

    B是坏的          A是好的      至少一片是坏的

    B是坏的          A是坏的      至少一片是坏的

 

a)证明若多于n/2的芯片是坏的,在这种成对测试方法下,使用任何策略都不能确定哪个芯片是好的。假设坏的芯片可以联合起来欺骗教授。

b)假设有多于n/2的芯片是好的,考虑从n片中找出一片好芯片的问题。证明n/2对测试就足以使问题的规模降至近原来的一半。

c)假设多于n/2片芯片是好的,证明好的芯片可用Θ(n)对测试找出。给出并解答表达式测试次数的递归式。

注:VLSI——Very Large Scale Integrated.

算法分析:

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

b)假设:设有a个好的芯片数,b个坏的芯片数,z对测试结果为全好的测试对,其中芯片全为好的测试对为x,芯片全为坏的测试对为y,x+y=z。

二分测试思想:

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

2.根据问题描述:如果测试结果为一好一坏,或者两坏,那么把这对丢弃;如果测试结果为两好,那么随意丢弃其中一个,留下一个(若n为奇数,则剩余一个芯片没有配对。若z为奇数,丢弃这个芯片;若z为偶数(0也看做偶数),留下这个芯片)。这样操作后,留下的好芯片数一定还是大于坏的芯片数的,且经过n/2⌋对测试后,原问题的规模降低了近一半。

3.重复第2步,当n<=2时,就只剩下了好的芯片。

证明:

测试结果为一好一坏或者两坏的芯片对中至少一片是坏的,把这对丢弃能保证剩下的芯片中好芯片的数量仍大于坏芯片的数量。

测试结果为全好的,这对芯片有可能全为好,有可能全为坏,随意丢弃其中一个,留下 一个。设好芯片的对数为x,坏芯片的对数为y。考虑n的情况:

      若n为偶数,则x>y,所以留下的好芯片数还是大于坏的芯片数;

      若n为奇数,则剩余一个没有配对的芯片。考虑z的情况:

           若z是奇数,则x>y,丢弃这个芯片,这样留下的好芯片数还是大于坏的芯片数;

           若z是偶数,考虑这个芯片的情况:

                若芯片是好的,则x>=y,留下这个好的芯片,这样留下的好芯片数还是大于坏的芯片数;            

                若芯片是坏的,则x-y>=2,留下这个坏的芯片,这样留下的好芯片数还是大于坏的芯片数。

综上所述,留下的好芯片数一定还是大于坏的芯片数的。

c)采用b中的操作方法,递归式为:f(n) = f(n/2) + n/2。这个递归式符合主定理中的第三种情况,所以好的芯片可用Θ(n)对测试找出。