问题描述:Diogenes教授有n个被认为是完全相同的VLSI
芯片,原则上他们是可以互相测试的。教授的测试装置一次可测二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结果如下:
- 证明若多于n/2的芯片是坏的,在这种成对测试方式下,使用任何策略都不能确定哪个芯 片是好的。假设坏的芯片可以联合起来欺骗教授。
- 假设有多于n/2的芯片是好的,可虑从n片中找出一片好芯片的问题。证明? n/2 ?对测试就足以使问题的规模降至近原来的一半。
- 假设多于n/2的芯片是好的,证明好的芯片可用Θ(n)对测试找出。给出并解答表达 测试次数的递归式。
分析:
1. 关键是论证检测对任何检测,都没有任何的信息量。也就是如果你能找到一种方法使得好坏芯片的分布情况不会影响检测结果(这个方法就是芯片联合起来欺骗教授的方法),那么就论证了任何策略不能确定芯片的好坏。
那么基于这种理解的话,我们依然假设好的芯片有i个(i
2. 这个问题我觉得可以这样理解:除了第一种情况:两个芯片检测结果显示为好的情况外,其他的检测结果都是至少有一个为坏。那么如果抛出至少有一个为坏的情况,最不济是抛出一个为好一个为坏。如果一开始好的个数大于坏的个数,这种抛出并不会影响,留下部分好的芯片个数依然大于坏的个数,再要论证的就是问题的规模足以降低n/2。
其实这个问题的论证我觉得并没有网上说的那么容易,如果从数量来说,第一次检测剩下的是有可能大于n/2的,比如好的芯片两两正好配对。如若说坏的芯片是智能的在这种情况下全部伪装成好的芯片对,那规模并没有减小。当然从概率上来说,这种情况出现的情况很小。一般来说,我们都能抛出一些芯片。但是实际上并不能保证抛出后的规模小于n/2。所以我对这个问题还是存在疑问的。虽然抛出至少存在一个坏芯片的情况后,好芯片的数目依然大于坏芯片的数目,但是因为检测配对是随机的,我们并不能保证抛出芯片的数目会比n/2大,我认为一次n/2对检测不一定能将规模降至n/2。
3.如果是基于第二题的理解,严格意义上是不存在递归的确定关系的,但是如果说按照题目本身的意思来说,很简单。我们可以很容易得到递归关系T(n)=T(n/2)+n/2,根据主定理可以知道T(n)=Θ(n)。