1.问题:现在有100瓶药,只有1瓶是有毒的,老鼠试完药需要3天才能知道药是否有毒,而现在需要3天知道100瓶中哪一瓶有毒,请问至少需要多少只老鼠?
解决方法:100瓶太多,不适合理解。
我们现在假设只有5瓶,把这5个瓶子进行编号(1~5),然后用二进制表示每一瓶的号码:
1 => 0 0 1
2 => 0 1 0
3 => 0 1 1
4 => 1 0 0
5 => 1 0 1
m1 m2 m3
我们看到五个瓶子可以用3位二进制表示,现在把这三位分别记做s1,s2,s3.
现在找一个老鼠m1去吃s1的药,相当于m1吃了4号和5号瓶子的药,老鼠m2吃s2的药(相当于同时吃2号和3号瓶),老鼠m3吃s3的药(相当于吃了1,3,5号瓶的药)。
假如三天后m1死了,就说明4或者5号瓶的药有毒,由于m2不可能吃到4,5号的药,所以肯定不会死,那么就看m3是不是死了,假如s3死了,说明5号瓶有毒,因为5号瓶是唯一一个既给m1吃又给m3吃的.
所以至少需要三个老鼠,这个算法是2^3=8 > 5
同理,100个瓶子至少需要的老鼠2^7=128 > 100,至少需要7只老鼠。
如果你熟悉这个过程,只需要知道哪几个老鼠死了,从高位到低位依次记录就行,死了的老鼠记为1,没死的记为0。
记录方法如下:m1,m4,m5,m7死,其余活着,那么你得到的二进制为:1001101 ,转换成十进制为:77。说明77号瓶子有毒。