小白鼠试药问题。

在某次面试的时候遇到的问题,如下:一千瓶药里只有一瓶有毒,一周后毒发。用10只老鼠试药,要怎样才能检测出有毒的那瓶药?

我一开始以为每只老鼠只能喝一瓶药,所以想了很久都没有想出来,后来参考:

http://zhidao.baidu.com/link?url=q_w2eqyptqobnl0gPRzeE9Q9ScoJyJJWi7XLwPRIApWR3fCQu_svD1naluRGKK1EZo0f6vJ8VFLWT6Pe3cnHf_

http://bbs.csdn.net/topics/370210548

http://tieba.baidu.com/p/1662492456#

这个不错哦:http://dong008259.blog.163.com/blog/static/51645417201192911561141/

才想明白了。下面以3只老鼠检测8瓶药为例讲解:

每瓶药依次编号为000,001,010,011,100,101,110,111右边为低位

共有3只老鼠,第一只老鼠喝所有第一位(从右开始)为1的药,即喝第1,3,5,7瓶药;第二只老鼠喝所有第二位为1的药,即喝第2,3,6,7瓶药;第三只老鼠喝所有第三位(从右开始)为1的药,即第4,5,6瓶药。

一星期之后,如果某只老鼠死,标记为1,活标记为0。则如果第1只老鼠活,第2,3,只老鼠都死了,即110=6说明第6瓶要是毒药,其他都是无毒的。

因为第1只老鼠活的,而第一只老鼠只喝了1,3,5,7瓶药,说明第1,3,5,7瓶药是无毒的,第2,3,只老鼠是死的,而第2只老鼠只喝了2,3,6,7瓶,第3只老鼠只喝了4,5,6瓶,交集即为第6瓶药。所以第6瓶要是毒药。

小白鼠试药问题。_第1张图片

易知,根据二进制编码,3只老鼠共可以编码2^3=8种,所以可以检测8种药。如果是10只老鼠,可以检查2^10=1024瓶药。


你可能感兴趣的:(算法)