昨日参加某大数据公司的笔试,最后一题是:有9瓶酒,其中一瓶有毒,可以使用小白鼠进行试验,但是毒发需要8小时,问最少需要几只小白鼠才可以在16小时内知道哪瓶酒是毒酒。
这道题的原型是一道经典的微软面试题:最少多少只小白鼠可以一次判断出1024(一说是1000)瓶酒中哪瓶是毒酒?
我们首先从这道题的做法开始说起:
可以将1024瓶酒依次编号为0到1023。编号转为2进制表示。将编号中bit0位置为1的酒取出混合给第一只小白鼠喝;bit1位置为1的酒取出混合给第二只小白鼠喝;…….bit9位置为1的酒取出混合给第十只小白鼠喝。将这十只小白鼠从右到左依次排开,死了的小白鼠的位置为1,否则为0,就得到10bit的二进制数,将这个二进制数转成十进制,这就是毒酒的编号。
上面的解法可以得到这样的结论:使用 n 只小白鼠最多可以一次判断出
其实更一般的说法应该是:使用 n 只小白鼠最多可以一次判断出