老鼠试毒

老鼠试毒问题

问题描述:
有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。给你一星期的时间,问最少使用多少只小白鼠能够检测出哪一瓶有毒。
正确答案:

10只,我们只需要10只就能测出哪一瓶有毒。

原理:
简单原理解释,主要是使用位的思想来解决这个问题。 1000最少可以用2^10来表示,我们可以用10只老鼠,每只老鼠代表一个二进制位,一个星期后我们可以得到老鼠的死亡序列,通过转换成10进制,我们就可以得到哪瓶水有毒。

我们拿8瓶水来举例子,用三只老鼠测试,首先我们将8瓶水写成2进制:

第一瓶 --- 000

第二瓶 --- 001

第三瓶 --- 010

第四瓶 --- 011

第五瓶 --- 100

第六瓶 --- 101

第七瓶 --- 110

第八瓶 --- 111

第一个老鼠负责第一个二进制位,它将去喝第二瓶,第四瓶,第六瓶,和第八瓶。

第二个老鼠。。。。

第三个老鼠。。。。

假如老鼠死亡的序列为101,我们就可以知道,有毒的水在第1位上有值,在第三位上有值,在第二位上没有值,通过比对我们可以得出,是第六瓶有毒。

如果上述描述不能理解,那就换一种描述的方法。

还是每个老鼠负责一位,我们先拿出第一瓶水,他的编码为000,不让老鼠去喝。 然后拿出第二瓶,他的编码为001,让1号老鼠去喝,。。。。。。。第八瓶的编码为111,让三只老鼠都去喝。一星期之后,假如没有老鼠死亡,说明有毒的药水是第一瓶,因为只有第一瓶三个老鼠都没喝,如果三个老鼠全死了,说明第八瓶有毒,因为只有第八瓶三个老鼠都喝了。
总结:
通用方法是讲试剂中哪瓶是毒品的信息总数表示出来为N,然后再找出小白鼠所能表示的状态数目为M,则需要的小白鼠个数为:K=logNMK=logMN 
而具体实验的操作方法为:

讲每种状态按照M进制进行编码,编码长度为K
每个小白鼠分别去拿自身的M中状态去实验N的M进制编码的某一位
所以K个小白鼠,等同于是K长度M进制的对应的每一位
这样试验完后,就确定了每一位上面的数字,找到对应的那种状态就好。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值