有难度的算法笔试题:芯片测试

原创 2007年09月24日 14:57:00
有难度的算法笔试题

摘自:http://community.csdn.net/Expert/TopicView3.asp?id=5764920

3)芯片测试:

有2k块芯片,已知好芯片比坏芯片多。请设计算法从其中找出一片好芯片,说明你所用的比较次数上限。
其中:
好芯片和其它芯片比较时,能正确给出另一块芯片是好还是坏。
坏芯片和其它芯片比较时,会随机的给出好或是坏。 

Vitin(卫亭) ( 四级(中级)):

试着回答一下第三题,不保证最快效率:
1.对N个芯片,在保证好芯片比坏芯片多的情况下,取出一块芯片(为叙述方便,设为芯片X),与其他所有芯片做测试,记录相互间的结果.
2.按照芯片X对其他芯片的结果,将其他芯片分成两组:GOOD组和BAD组.
3.如果GOOD组的数目<BAD的数目,则X为坏芯片,跳到5.
4. 如果GOOD组的数目>=BAD组的数目,并且GOOD组对X的测试为good(认为X好芯片),则X确实是好芯片,算法结束(因为在N-1中,至 少半数的芯片认为X为不是坏芯片,考虑到"好芯片比坏芯片多",可归谬证明);否则,只要有一个GOOD组芯片对X的测试为bad,则X为坏芯片,继续.
5.X为坏芯片,故去除X,将所有芯片分成两组:对X的测试为bad的保留,对X的测试为good的去除.考虑到所有的好芯片都保留了(它们对X的测试必为bad),所以仍然满足"好芯片比坏芯片多"的条件.跳到1,继续.

以上算法保证可以结束.因为如果测试出X是坏的,那么每次N至少减一.并且,因为"好芯片比坏芯片多",算法必定是在第4步结束.而不会出现芯片降到1的情况(只要初始的芯片数>=2)

题目中,初始N=2k.其复杂度在最坏的情况下测试次数(假设一次测试同时出现相互的结果,否则次数*2)为: k + (k+1) + ... + (2k-1) = 1/2 * k(3k-1) = O(k^2)


xlfddlfd(楼主请点我加分^_^不用客气) ( 二级(初级)) :

下面两个结论比较有用,先列出来。

任意拿两片芯片互相测试,则有
1)结果都为真,则说明两片都为真,或者都为假。
2)其他结果,则最少有一为假。

在任意偶数多的芯片里,如果好芯片多于坏芯片,将所有芯片两两分组,根据抽屉原理,则有
1)必有两个好芯片分在一组。
2)同为好芯片的组数一定多于同为坏芯片的组数。

测试流程
1)将芯片两两分组,比如1和2,3和4。。。。2k-1和2k。互相测试,则必有结果同为真的组。
2)保留结果同为真的组,丢弃其他组。必有好芯片组多于坏芯片组。(所以当只有两组或者一组同为真时,则必为真,测试结束)
3)结果同为真的组芯片必定同好或者同坏,所以可以丢弃一半。从所有同真组中任意取出一个丢弃另一个,组成新的测试组,继续两两分组,直到同真组只有2个或者1个测试结束,坚持到最后的就是好芯片。

说 明:同真组可能会变成奇数个,当为奇数组时,任意选一组取其中一个(假设为A),在剩余组中各取一个来测试A,如果测试结果A为好芯片过半或者等于一半, 则A为好芯片,测试结束。否则A为坏芯片,判定A为好芯片的必为坏芯片,剔除后剩余部分形成新的测试组,继续两两分组。。。

总的原理和淘 金差不多,刚开始好的芯片多,在每次剔除芯片时一定要保证剔除的坏芯片数量一定要多于或者等于好芯片的数量,这样就能保证在剩余的芯片中好的一定多于坏 的。当组数为奇数时采用投票制,多于半数的投票有效(等于也有效,因为好的多于坏的,相等则被测试的一定为好的)。

因为每次最少剔除一半的芯片,所以最坏情况出现在每次只能剔除一半芯片的时候,按等比数列递减。当有N个芯片时,测试次数为n+(n/2)+(n/4)...=2n(实际上当为奇数组时,次数会更多,不过算不过来了,省略^_^ )


Vitin(卫亭) ( 四级(中级)) :

xlfddlfd 的算法很好,学习一下.

这个算法比我之前的算法要快得多.
当最坏情况是,每次都是奇数,并且每次都是坏芯片 时,测试次数(lg是以2为底的对数,N = 2k)约为 2(k + k/2 + k/4+...)-slgk = 4k - slgk = O(k),仍然是线性算法(此处的s为不大的常数(但大于1),因为在每次为奇数的情况下,实际的数目要比 k/2, k/4 之类的小,可以认为这个误差是lgk的倍数,此外坏芯片的比较数是每次总个数-1,所以要减少大约一个lgk).
版权声明:

相关文章推荐

百度笔试--芯片测试

有2k块芯片,已知好芯片比坏芯片多。请设计算法从其中找出一片好芯片,并说明你所用的比较次数上限。其中:好芯片和其它芯片比较时,能正确给出另一块芯片是好还是坏;坏芯片和其它芯片比较时,会随机的给出好或是...

阿里巴巴2014校园招聘北京站笔试题(研发/算法/系统/测试工程师)

下面是2014年阿里巴巴集团秋季校园招聘北京地区的笔试试题,先放照片版试卷,试题博主暂时还没有做,如果您知道答案或者对某道题有特别好的想法,欢迎留言分享,非常感谢。之后会整理出文字版和参考答案,欢迎关...

基于IRT和CRT的试题难度计算控制算法

目前, CAT(Computer aided test, 计算机辅助测试系统) 试卷模式中试题难度分布设计的核心思想,主要根据难度分布应该是正态分布函数来进行假设的。而难度在教育心理学中的定义大致有两...

poj 1062 昂贵的聘礼 Dijkstra算法,中等难度,,,内有测试数据,一道让我累觉不爱的题目

昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38474   Accepted: 11132 ...

软件测试工程师笔试题及答案(二)

测试人员考试试卷二(考试时间90分钟,满分100分) 一、 判断题(每题2分,正确的“√”,错误的“╳”)  1 、 好的测试员不懈追求完美。(×)  2、 测试程序仅仅...

2015阿里校园招聘笔试题(8.29 测试开发工程师)

这是8.29日阿里2015校招笔试题,题目来源于网络,所以题目可能略有问题,但大部分题目是正常的。这些题是网上各套题总结出的题库,稍后会继续更新不重复的。 答案都是自己做的,如果有不同意见欢迎讨论。...

阿里测试开发笔试题--字符串相关知识

一点准备的心思都没有,不想看书,硬着头皮参加阿里的笔试。前面40分钟的选择题,简直

网易笔试题(java 、 c++ 、软件测试等)

A卷(研发类笔试题) 第一部分(必做): 计算机科学基础 1. (单选)软件设计中模块划分应该遵循的准则是:     A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合 2...

[腾讯笔试] 2015腾讯校园招聘软件测试笔试题(笔试时间:2014-9-13,大部分,欢迎补充)

1、计算机系统中CPU中的base寄存器和limit寄存器的作用是() 2、操作系统不执行以下哪个操作() A 分配内存 B 输出/输入  C 资源回收  D 用户访问数据库资源 3...

tencent 2017暑期实习生-软件测试笔试题(回忆篇)

软件测试笔试题 Tencent我想是很多学计算机专业的孩子的梦想吧,自己很喜欢腾讯的企业文化,觉得是一个充满创造力和热情四溢的公司,希望自己有一天也能真正成为鹅厂的一员。自己还在上学,本着探探路的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)