芯片测试——分治法体现

前言

感觉听得有点迷糊,为什么芯片要互相测试来判断谁好谁坏呢?车间生产不是有一个统一的标准值吗,再不济找个蓝本来对照检验就好了,非要芯片两两相互测试( ̄▽ ̄)"


一次测试过程

测试方法: 将2片芯片(A和B)置于测试台上,互相进行测试,测试报告是“好”或“坏”,只取其一。
在这里插入图片描述

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

个人理解:好人一定说真话,坏人可能说真话,可能说假话。好人说你是坏人,你就一定是坏人,坏人说你是好人,你还得思考这人坏不坏。

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

个人理解:结论相同,那么两方都说了真话或者假话;结论相悖,肯定有人撒谎了。

实际应用

输入: n片芯片,其中好芯片至少比坏芯片多1片。
问题: 设计一种测试方法,通过测试从n片芯片中挑出1片好芯片。
要求: 使用最少的测试次数

算法分析

当芯片总数为奇数时

在这里插入图片描述

当芯片总数为偶数时

在这里插入图片描述
结论: 只要n/2个芯片报好,那么该芯片就是好的,

蛮力算法

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

时间估计:
第1片坏芯片,最多测试 n-2次,
第2片坏芯片,最多测试 n-3次,

总计 O(n^2)

分析:因为好芯片永远比坏芯片多一片,所以如果判断该芯片是坏芯片的话,只要保证测试结果里好芯片没有坏芯片多即可。
例如:
设好芯片为G(good),坏芯片为B(bad),总共有n片芯片。
当n=7时,(最多)第一次测试为坏的结果是GBGBB-(“-”为最后一次测试,无论-为G还是B,G都无法大于B,所以该此测试可以不用测),测试次数为5次。
当n=8时,(最多)第一次测试为坏的结果是GBGBBB-(“-”为最后一次测试,无论-为G还是B,G都无法大于B,所以该此测试可以不用测),测试次数为6次。
因此测试第一次为坏芯片的情况,最多需要测试n-2次。

编程实现思路:
1、输入总芯片数n,好芯片数为n/2+1,坏芯片数为n-n/2-1。
2、用随机数来表示n个芯片,奇数为好芯片,偶数为坏芯片,确保奇数要比偶数多。3、定义一个数组来存放这组随机数。
4、从n中取出一个芯片X,用剩下n-1个芯片进行加法运算。
奇数+x=为奇数——为0
奇数+x=为偶数——为1
偶数+x=为偶数——为0
偶数+x=为奇数——为1
5、用for(int 1 ; i <= n-1; i++)来实现对x的测试,输出结果为
我敲不出来,思路到这里戛然而止。

分治算法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


头痛,不想写了,有问题直接问我吧

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北山雪初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值