原题:
题目大意:有10瓶药水,其中有一瓶是毒药,老鼠喝下毒药之后在一个小时后会死亡,需要你在一个小时内找到最少需要多少老鼠可以找出那瓶毒药。
分析:在一个小时内找到,就说明我们只有一次试药机会,每只老鼠喝下药水之后只有两种情况,那就是死或者不死,那么n只老鼠喝下药水之后就会有 2^n 方种情况, 在试药时我们可以考虑一种施药方法,,给第一只老鼠试用1号药水,2号老鼠试用二号药水,1,2两只老鼠同时试用3号药水,根据老鼠死亡情况,我们就可以判断出1,2,3号药水哪瓶是有毒的。我们可以知道老鼠死与不死的情况有多少种,我们就能试出多少瓶药。
根据上述例子,我们可以把每只老鼠看作一个二进制数位。10 < 2^4, 所以,最少要用四只老鼠。
10瓶药水表示:
0001 第一瓶
0010 第二瓶·
0011 第三瓶
0100 第四瓶
0101 第五瓶
0110 第六瓶
0111 第七瓶
1000 第八瓶
1001 第九瓶
1010 第十瓶
可以得到分为四组,每组代表一只老鼠喝药情况, 让第一只老鼠喝下第一位为1的药水, 第二只老鼠喝下第二位为1的药水…… 第n只老鼠喝下第n位为1的药水
第一只:{1, 3, 5, 7, 9};
第二只:{2, 3, 6, 7};
第三只:{4, 5, 6, 7};
第四只: {8, 9, 10};
如果第一只老鼠死了说明第一位为1,否则为0,如果第二只老鼠没死,我们就可以知道第二位为0,依次类推,我们可以得到每一位二进制0与1的情况,进而得知第几瓶药是毒药。
根据上述规律,我们可以得出,1000瓶药时只需要10只🐭就可以试出所有情况。
题目变式一:
那如果我们在两个小时内给小鼠试药,最少需要几只老鼠呢
分析:在两个小时内试药,有三种情况:
第一天死;
第二天死;(如果第一天不死就可以继续试药)
两天都不死
第一只老鼠喝下第一位编号为0的药水, 若死亡则说明组高位是0,如果一个小时不死,就接着喝下第一位是1的药水,如果死亡,则说明最第一位是1,如果不死则说明是第一位是2。
根据这种试药情况,n 只老鼠最多试出 2 ^ n瓶药.
变式二:
1000瓶药水里有2瓶毒药,需要多少只小鼠
2瓶毒药时,小鼠生存情况有1000*999种
总结:找毒药问题所涉及的思想是信息论,而小鼠的喝下药水生存情况是它的信息熵