1.1. 分治法实例—芯片测试

1. 问题描述
  • 输入:n片芯片,其中好芯片至少比坏芯片多1片
  • 问题:设计一种测试方法,通过测试从n片芯片中挑出1片好芯片
  • 要求:使用最少的测试次数
2. 解题思路
1. 判定芯片A的好坏
  • 问题:给定芯片A,判定A的好坏
  • 方法:用其余n-1片芯片对A测试
    在这里插入图片描述
2. 蛮力算法
  • 算法思想:任取1片测试,如果是好芯片,则测试结束;如果是坏芯片,则抛弃,再从剩下芯片中任取1片测试,直到得到1片好芯片
  • 时间估计:O( n 2 n^2 n2)
    • 若第1片为坏芯片,则最多测试n-2次
    • 若第2片为坏芯片,则最多测试n-3次;
3. 分治算法
  • 算法思想:假设n为偶数,将n片芯片两两一组做测试淘汰,剩下芯片构成子问题,进入下一轮分组淘汰
    • 淘汰规则
      • “好,好”——任留1片,进入下轮
      • 其他情况——全部抛弃
    • 递归出口:n ≤ \le 3
      • 若为3片芯片(2好1坏),则1次测试可得到好芯片
      • 若为1或2片芯片(必为好),不再需要测试
    • 命题当n是偶数时,在上述淘汰规则下,经过一轮淘汰,剩下的好芯片比坏芯片至少多1片
      在这里插入图片描述
  • 算法思想:若n为奇数时,按上述处理可能会出问题
    在这里插入图片描述
    • 解决办法:当n为奇数时,增加一轮对轮空芯片的单独测试。
      • 若该芯片为好芯片,则算法结束
      • 若该芯片为坏芯片,则淘汰该芯片
  • 伪码描述
    在这里插入图片描述
3. 时间复杂度分析
  • 设输入规模为n,每轮淘汰后,芯片数至少减半,测试次数(含轮空处理):O(n)
  • 时间复杂度: W(n) = W(n/2) + O(n) , W(3)=1, W(2)=W(1)=0, 可得,W(n)=O(n)
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值