今天突然间想起这样一个问题,有八瓶液体,其中一瓶是毒药,老鼠喝下毒药会在一个小时后发作,请问最少用几只老鼠能在一个小时后立即就能知道哪瓶是毒药,忽略喝毒药的时间。
之前关于这个问题,我也在网上看过一些帖子解决这个问题的方法,今天总结了一下,记录于此,养成写博客的习惯。如有错误之处,还望指正,谢谢!
之前看过一些关于这个问题的解决方法,是用二进制的方法来解的,但是我并不明白为什么,只知道这么做可以解决。下面就来一步一步的解决这个问题。
八瓶液体,其中一瓶是毒药,其他七瓶是没有毒的。
首先,给八瓶液体编号1-8,毒药的分布有八种情况,分别是
1有毒,其他无毒
2有毒,其他无毒
。。。
8有毒,其他无毒
毒药的分布,只会是上面这八种可能的一种,而我们也只有用老鼠的生死状态来与这八种毒药分布来对应。每只老鼠有两种状态,生或死。所以三只老鼠就能组成八种不同的生死状态。
现在我们来把老鼠的生死状态对应上毒药的分布,以达到看老鼠的生死状态就能断定毒药分布的情况。
0代表无毒,1代表有毒,所以共有以下这八种可能的分布 0代表老鼠生,1代表老鼠死
第一瓶 | 第二瓶 | 第三瓶 | 第四瓶 | 第五瓶 | 第六瓶 | 第七瓶 | 第八瓶 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
第一只老鼠 | 第二只老鼠 | 第三只老鼠 |
0 | 0 | 0 |
0 | 0 | 1 |
0 | 1 | 0 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
1 | 1 | 1 |
这样,我们可以将左边的八种毒药分布和右边的老鼠生死状态分布一一对应起来,可以随便对应。
比如,第一瓶有毒药和第二只老鼠死,第一、三老鼠生对应,那我们就把第一瓶液体给第二只老鼠喝,如果毒药分布是这种情况,那么就会出现第二只老鼠死,其他老鼠生的情况。
因为后面的实验只会把除第一瓶以外的液体给老鼠喝,因为除第一瓶以外的液体都是无毒,喝了不会影响生死的状态。类似分析其他对应情况,为了简单,我们就按上面表格一行行的对应上。操作如下:
毒药分布第一种情况,第一瓶是毒药,对应于三只老鼠生,那么不把毒药喂给死亡的老鼠喝
毒药分布第二种情况,第二瓶是毒药,对应于第三只老鼠死,其他生,那么就把第二瓶液体给第三只老鼠喝
毒药分布第三种情况,第三瓶是毒药,对应于第二只老鼠死,其他生,那么就把第三瓶液体给第二只老鼠喝
。。。
毒药分布第八种情况,第八瓶是毒药,对应于三只老鼠都是死,那么就把第八瓶液体给所有老鼠喝
因为毒药分布只会是上面其中的一种,所以我们分别对每种毒药分布来喂给老鼠喝是可以的,因为错误假设的情况,喝了假设的毒药不会影响老鼠生死状态。所以这么操作就能用最少老鼠试出毒药分布情况。
上面注意的是,老鼠生不会影响老鼠生死状态,也就是可以叠加不影响结果,才能这么操作。所以假如题目改成八瓶液体有两种毒药,那么问题就复杂了,虽然八瓶液体有两瓶是毒药只有8x7/2=28种可能的分布,5只老鼠就能分辨出来。但是操作不出来,下面举个简单的例子来说明这一点。
假如有三瓶液体,有两瓶是毒药,共有3x2/2=3种毒药分布,我们用两只老鼠来试出毒药情况。
1代表有毒,0代表无毒,只会存在下面这三种分布。 0代表老鼠生,1代表老鼠死
第一瓶 | 第二瓶 | 第三瓶 |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
第一只老鼠 | 第二只老鼠 |
0 | 0 |
0 | 1 |
1 | 0 |
操作如下:
把第一瓶,第二瓶液体不给两只老鼠喝
把第一瓶,第三瓶液体给第二只老鼠喝
把第二瓶,第三瓶液体给第一只老鼠喝
所以,第一只老鼠喝了2,3 第二只老鼠喝了1,3
因为有两瓶毒药,按照上面喝法,至少有一个老鼠死,而按照对应关系,当第一瓶,第二瓶是毒药,对应两只老鼠生。所以试不出来。
为什么会这样呢,这是因为当毒药分布是第一种情况下,第二种假设实验会影响第一种实验的老鼠生死状态,这样就会出问题,而前面的只有一瓶是毒药,针对当前假设时操作后,其他假设的操作都不会影响。这种问题我只会做有多少瓶毒药就用多少只老鼠来试,哈哈哈。所以我还不知道有什么好解法。
原文:https://www.cnblogs.com/shadu/p/12570577.html