1.问题引入
假设有1000瓶水,其中有一瓶是毒水,且仅凭肉眼无法分辨,那么如何用最少的小白鼠快速检测出哪一瓶是毒水呢?
2.二进制编码原理
- 将1000瓶水编号为0~999,并将这些编号转化为二进制00_0000_0000~11_1111_1111
- 我们使用10只小白鼠进行实验(因为2¹⁰=1024>1000,足以覆盖1000种状态),分别标记为A~J
3.进行实验
- 对于小白鼠A,让它喝所有二进制编码第1位为1的瓶子里的水
- 对于小白鼠B,让它喝所有二进制编码第2位为1的瓶子里的水
- 以此类推......
- 对于小白鼠J,让它喝所有二进制编码第10位为1的瓶子里的水
4. 根据小白鼠的死亡情况判断毒水瓶编号
- 如果小白鼠A死了,说明毒水瓶编号的二进制第1位是1;反之,如果小白鼠A仍然存活,说明毒水编号的二进制第1位是0
- 如果小白鼠B死了,说明毒水瓶编号的二进制第2位是1;反之,如果小白鼠B仍然存活,说明毒水编号的二进制第2位是0
- 以此类推......
- 如果小白鼠J死了,说明毒水瓶编号的二进制第10位是1;反之,如果小白鼠A仍然存活,说明毒水编号的二进制第10位是0
- 最后,将毒水瓶编号的二进制转为十进制,即得到毒水瓶的十进制编号