前言
最近看到网友讨论一个关于信息论的面试题,原题如下:
1000瓶酒其中1瓶有毒,10只老鼠找出毒酒,需要注意每只老鼠只可以试1次?
当然这个题目也有变种:
1000瓶酒其中1瓶有毒,使用老鼠来试毒,需要注意每只老鼠只可以试1次,最少需要多少只老鼠?
虽然,题目不同,实际上还是同样的原理。这个题目在网上有很多的解答,可是我觉得讲解的不够通俗易懂,所以准备按照自己的理解来讲解一下原理
如何使用老鼠试毒讲解
首先原题目的问题规模实在太大,所以我选择改为8瓶酒其中1瓶有毒,3只老鼠找出毒酒。这里改为8选1使用3只老鼠是因为2^3=8,原理下面会讲。
- 首先我们给每瓶酒进行编号,从0开始编号,并转化为二进制:
酒瓶编号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
二进制值 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
- 给每只老鼠进行编号,分别为1、2、3,根据编号,喝酒瓶编号二进制值对应位数为1的酒的混合液,如下所示: