博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用小白鼠鉴别有毒药水问题
阅读量:5773 次
发布时间:2019-06-18

本文共 973 字,大约阅读时间需要 3 分钟。

题设:有N瓶水,其中有一瓶水有剧毒,如果小白鼠喝了会在24小时的时候死亡。

问:用多少只小白鼠能够检测出哪瓶水有剧毒?

要求:用的小白鼠数量少并且用时要短,并给出合理的过程与结论。

我的解题思路如下:

这是一个二进制开关(0/1)问题,类比于海明码校验算法,将药水进行二进制编号(0000000,0000001,0000010,0000011...),算出至少多少位二进制能够将所有的小白鼠进行完全编号;

然后根据二进制的位数选取小白鼠,将小白鼠对应于相应二进制位,之后去依次遍历不同小白鼠的相同位,如果此位为1则喝下一点此瓶的药水,此位为0则不喝(至于怎么喝不是我们考虑的范围内,可以先按位进行药水的混合,放到其他的瓶中,再让小白鼠去喝混合后的药水,当然混合后的药水数量与选取小白鼠数量是相同的);

最后通过小白鼠的死活去鉴定哪瓶药水有剧毒。

 

类比实例分析:

1)         假设共有6瓶药水,其中1瓶有剧毒,其他无毒

2)         通过计算 2^3 = 8 >= 6,可知3位二进制数可以完全对所有药水瓶进行编号,因此我们要选取3只小白鼠做实验

3)         对药水瓶进行二进制编号,并且让小白鼠按位去喝药水(遇见1喝,遇见0不喝),示意图如下所示:

 

                    小白鼠

        二进制码

水瓶编号

A

B

C

0

0

0

0

1

0

0

1

2

0

1

0

3

0

1

1

4

1

0

0

5

1

0

1

 

然后让小白鼠A去喝编号为45瓶中的水;小白鼠B去喝编号为23瓶中的水;小白鼠C去喝编号为135瓶中的水

如果小白鼠ABC都没死000,则编号为0的水瓶中的水有剧毒;

如果小白鼠AB没死,C001,则编号为1的水瓶中的水有剧毒;

如果小白鼠AC没死,B010,则编号为2的水瓶中的水有剧毒;

如果小白鼠A没死,BC011,则编号为3的水瓶中的水有剧毒;

如果小白鼠A死,BC没死100,则编号为4的水瓶中的水有剧毒;

如果小白鼠AC死,B没死101,则编号为5的水瓶中的水有剧毒;

(实质上:我们可以保持小白鼠的位置不变,给没死的小白鼠贴上标签0,死的贴上标签1,会得出一串二进制码,在将此段二进制码转换成为十进制,即得出有剧毒水瓶的编号)

4)         随着水瓶数量N的增加,我们通过 2^M >= N 计算出所需要的小白鼠的数量M即可

转载地址:http://ojaux.baihongyu.com/

你可能感兴趣的文章
Scenario 9-Shared Uplink Set with Active/Active uplink,802.3ad(LACP)-Flex-10
查看>>
UML类图中的六种关系
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
mysql(待整理)
查看>>
使用PullToRefresh实现下拉刷新和上拉加载
查看>>
mysql
查看>>
2012年电信业八大发展趋势
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
redhat tomcat
查看>>
统计数据库大小
查看>>
IO流的学习--文件夹下文件的复制
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
nginx在响应request header时候带下划线的需要开启的选项
查看>>
Linux下DHCP服务器配置
查看>>