芯片测试问题的一些理解

一、一次测试过程:

测试方法:将2片芯片(A和B)置于测试台上,互相进行测试,测试报告是“好”或“坏”,只取其一。
chip-test
就是这份报告是针对对方而言的,也就是说A芯片说B芯片是好的,B芯片说A是坏的

假设:好芯片的报告一定是正确的,坏芯片的报告是不确定的(可能会出错)

如果A芯片本来就是好的,那么它说的话就是可靠可信的,而且它一定说真话,如果它说B芯片是好的,那B芯片就一定是好的,因为A不会说假话的;如果B芯片说A是坏的,那么它的话是不可靠的

二、测试结果分析

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

三、芯片测试问题

1、输入:

n片芯片,其中好芯片至少比坏芯片多1片

2、问题:

设计一种测试方法,通过测试从n片芯片中挑出1片好芯片

3、要求:

使用最少的测试次数

判定芯片A的好坏
问题:给定芯片A,判定A的好坏
方法:用其他n-1片芯片对A测试

1、n是奇数:好芯片数≥(n+1)/2
A好,至少有(n-1)/2个报“好”
A坏,至少有(n+1)/2个报“坏”

结论:
至少一半报“好”,A是好芯片
超过一半报“坏”,A是坏芯片

n=7:好芯片≥4
A好,6个报告中至少3个报“好”
A坏,6个报告中至少4个报“坏”

2、n是偶数:好芯片数≥n/2+1
A好,至少有n-/2个报“好”
A坏,至少有n/2个报“坏”
结论:
至少一半报“好”,A是好芯片
超过一半报“坏”,A是坏芯片

n=8:好芯片数≥5
A好,7个报告中至少4个报“好”
A坏,7个报告中至少5个报“坏”

四、蛮力算法

测试方法:任取1片测试,如果是好芯片,测试结束;如果是坏芯片,抛弃,再从剩下芯片中任取1片测试,直到得到1片好芯片

时间估计:
第1片坏芯片,最多测试n-2次
第2片坏芯片,最多测试n-3次
……
总计O(n²)

五、分治算法

1、分治算法设计思想

(1)、假设n为偶数,将n片芯片两两一组做测试淘汰,剩下芯片构成子问题,进入下一轮分组淘汰

(2)、淘汰规则:

“好,好”→任留1片,进入下轮
其他情况→全部抛弃

(3)、递归截止条件:n≤3

3片芯片,1次测试可得到好芯片
1或2片芯片,不在需要测试

2、分支算法的正确性

命题1 当n时偶数时,在上述淘汰规则下,经过一轮淘汰,剩下的好芯片比坏芯片至少多1片

设A,B都好的芯片i组,A与B一好一坏j组,A与B都坏的k组。淘汰后好芯片至少i片,坏芯片至多k片。

2i+2j+2k=n 初始芯片总数
2i+j>2k+j 初始 好芯片多于坏芯片
→i >k

代码描述:

k<-n
while k>3 do
	将芯片分成└k/2┘组 //轮空处理
	for i=1 to └k/2do
		if 2片好 then 则任取1片留下
		else 2片同时丢掉
	k←剩下的芯片数
if k=3 then
	任取2片芯片测试
	if 11坏 then 取没测的芯片
	else 任取1片被测芯片
if k=2 or 1 then 任取1

猜你喜欢

转载自blog.csdn.net/Prototype___/article/details/123764271