测试多瓶液体中毒药所在小探

某天课上听老师讲起这个趣题,特此记录一下。


题目:有1000瓶液体,其中一瓶装了慢性毒药,喂食毒药一周后实验用小白鼠会突然出现失去生命体征反应,问最少用多少只小白鼠可以知道哪瓶液体中存有毒药(注意此处未考虑喂食毒药浓度及量,即有毒药就会产生反应,则可以喂食混合液体)。


方法一:

将1000只小白鼠按照2进制尽量分为两部分,其中一部分为2^9,即为512只,另一部分为488只,取任意一边混合液体用一只小白鼠测试,知道结果后可选是继续分哪一边,512只的一边按照2分可继续分为9层,488只的可分为484个9层和4个8层,即按照概率,有毒的瓶子可位于其中任意一瓶,则由二分法知需要小白鼠数量与层数相等,为10*996/1000+9*4/1000=9.996只,耗时为9.996周。

结果:取大于等于的第一个整数,共需10只小白鼠和10周时间。


方法二:

编码法,1000个瓶子最少需要10位bit来编码,从00 0000 0000到11 1110 1000(左边为高位,右边为低位),小白鼠依次对应10个位,每只小白鼠只喝对应位数为1的瓶子的液体,如有只瓶子为10 1010 1010,则第10、8、6、4、2只小白鼠要喝该瓶子内的液体,第9、7、5、3、1只小白鼠不喝,所有瓶子均对应喝完后等候一周,看小白鼠状态,为失去生命体征则为1,否则为0,从高到低排出该10位bit,即对应有毒药的瓶子编号。

结果:共需10只小白鼠,耗时1周。


可对比知第二种方法占优。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值