1000瓶无色无味的药水,其中有一瓶毒药,10只小白鼠拿过来做实验

1000瓶无色无味的药水,其中有一瓶毒药,10只小白鼠拿过来做实验。喝了无毒的药水第二天没事儿,喝了有毒的药水后第二天会死亡。如何在一天之内(第二天)找出这瓶有毒的药水?

看着网上给出的都是从二进制的角度出发去解决问题,理解不是那么容易。本人将尝试从数学的角度去给出一个方案。并以此说明二进制方案的合理性。

首先简化问题:

想一想 2 只老鼠最多能够一次检测出多少瓶毒药?
在这里插入图片描述

图一、两只老鼠构成的二维空间
将两只老鼠记作为 A点以及B点。 有上图可以得到四个点,分别是:(0,0),(0,1),(1,0),(1,1).

那么假设有四瓶药水,那么药水与上面的点一 一对应,比如就用二进制方式对应: (0,0) 表示第0瓶,(0,1)表示第1瓶,(1,0)表示第二瓶,(1,1)表示第3瓶。那么就会有四种情况:

1、 第0瓶是毒: 没有老鼠死亡;
2、 第1瓶是毒: A老鼠死亡; 以此类推 可以根据老鼠的死亡来唯一的确认是哪一瓶药水是毒药。

可以如下通用的表示: (SA,SB) 用SA表示编号为A的老鼠是否死亡(死亡用1表示,未死亡用0表示),用SB表示编号为B的老鼠是否死亡(死亡用1表示,未死亡用0表示)。 故可以通过老鼠是否死亡得到哪一瓶是毒药。

以上是在2只老鼠的情况下面能够得到 2^2(2的平方) = 4 检测四瓶药水。

若3只老鼠呢,最多能够检测多少瓶药水?

这个我们将上面的二维空间上升到三维空间看看:

在这里插入图片描述
图二、三只老鼠构成的三维空间
由上面的三只老鼠构成的三维空间中,形成一个正方体,总共有2^3(2的3次方) = 8个顶点。那么分别是(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0)…,(1,1,1). 那么将药水以0开始进行编号。分别对应到各个坐标点通过二进制的形式得到的十进制数据。 比如(0,0,0)=000=0,(0,0,1)=001=1,(0,1,0)=010=2,(0,1,1)=011=3,(1,0,0)=100=4…,(1,1,1)=111=7。以此来将药水与坐标对应。

此时老鼠A需要喝下的药水是(1,0,0),(1,0,1),(1,1,0),(1,1,1); 规律是: (1,y,z). 其中y,z的取值范围为0,1. 也就是y取0,1. z也是取值0,1. 总共用2*2=4总组合。而由于A老鼠在的坐标为(1,0,0)。故其x必定固定为1. 从几何的角度来看。A老鼠需要喝的是以A点为起点,画出平行于y轴的线以及画出平行于z轴的线。由这两条线构成的面。

在这里插入图片描述
图三、经A点平行y轴及z轴的平面
以此可得B老鼠需要喝的规律为(x,1,z) x,z取值0,1.总共也是四种组合
以此可得C老鼠需要喝的规律为(x,y,1) x,y取值0,1.总共也是四种组合.

喝的药水数量其实是 老鼠(维度)-1 作为2的次方数。 二维是 2^(2-1) = 2瓶 三维是 2^(3-1) = 4瓶

现在假定毒药水是(x,y,z). 那么可以通过x=A老鼠的生死取值为0,1. 那么可以通过y=B老鼠的生死取值为0,1. 那么可以通过z=A老鼠的生死取值为0,1.

故可以通过所有老鼠的生死组合来唯一确认毒药的坐标(编号)。比如所有老鼠都死了,那么可以确认毒药是编号最大的那一个。都没有死,那么是编号为0的那一个。

以此,用老鼠的数量来确定维度,n只老鼠就使用n维空间。

为每一只老鼠进行编号, 编号对应其在坐标中的位置。比如编号为1,表示他在坐标中的位置是第一个。 取值只有0,1.

我们也为毒药进行编号,然后按照编号的二进制数据来对应到坐标点中去。

每一只老鼠应该对应的喝哪些药水呢?

假如n取值100(100只老鼠,100维空间), 其中一只老鼠编号为 m. m取值[1,100].

那么这只老鼠应该喝药水编号二进制中,第m位为1的所有药水,这种药水数量是 2^(100-1)瓶。

而如何确认哪一瓶为毒药呢?

答案是按照老鼠的编号来排序,老鼠死亡用1表示,未死亡用0表示。 得到的二进制串转换为十进制就是毒药水的编号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值