一、生死时速的数学谜题
在算法面试中,有这样一道经典逻辑题:
实验室有1000瓶完全相同的药水,其中1瓶被混入剧毒物质。已知小白鼠服毒后会在1小时内死亡,现在给你1小时的时间,至少需要多少只小白鼠才能找出有毒的那瓶药水?
这个看似简单的谜题,实际蕴含着深刻的计算机科学原理。我们先进行初步分析:如果用最笨的"逐一试毒"法,需要999只小白鼠,显然存在巨大的优化空间。而经过数学推导,最终的答案只需10只小白鼠!这背后到底隐藏着怎样的智慧?
二、二进制编码的降维打击
2.1 信息编码的艺术
每个小白鼠的生死状态都承载着1位信息(0表示存活,1表示死亡)。对于n只小白鼠,可以产生2ⁿ种不同的状态组合。要区分1000个可能结果,需要满足:
2ⁿ ≥ 1000 → n ≥ log₂1000 ≈ 9.966
取整数得n=10。这说明至少需要10只小白鼠才能覆盖所有可能性。
2.2 构建二进制坐标系
我们为每瓶药水赋予唯一的10位二进制编号(0000000001到1111101000)。每只小白鼠对应一个特定的二进制位:
小白鼠编号 | 对应的二进制位 | 作用说明 |
---|