面试遇到一个问题:1000瓶水的问题
问:1000瓶水,一个小白鼠喝一点带毒的水7天后就会死亡,呢么至少多少只小白鼠会在7天后可以检测出带毒的水。
答案:
其实就相当于2**n > 1000,求解n是多少?
比如说每个老鼠都有死或者活两种状态,因此每个老鼠可以看作一个bit,取0或者1
N个老鼠可以看作N个bit,可以表达2**N个状态(其中第i个状态代表第i个瓶子有毒)
例如:当N=2时,可以存在四种状态
0,0(一号老鼠活,二号老鼠活)
0,1(一号老鼠活,二号老鼠死)
1,0(一号老鼠死,二号老鼠活)
1,1(一号老鼠死,二号老鼠死)
具体来说,有A、B、C、D这四个瓶子,一号老鼠喝A和B,二号老鼠喝B喝C
如果0,0,说明D有毒,第0个状态代表第4个瓶子
如果0,1,说明C有毒,第1个状态代表第3个瓶子
如果1,0,说明A有毒,第2个状态代表第1个瓶子
如果1,1,说明B有毒,第4个状态代表第2个瓶子
所以2**n > 1000,n为10,也就是至少需要10个老鼠才能在7天內确认哪个有毒。