问题描述:
例1:(阿里巴巴)有16瓶水,其中有一瓶有毒,小白鼠喝一滴水之后一个小时会死,请问至少用几只小白鼠,在1小时内一定可以找出至少14瓶无毒的水?
分析:将16瓶水分别标号为1~16,2瓶为一组,分为8组。A1为第1,2瓶水以此类推,A8为第15,16瓶水。
小白鼠1喝:A1, A4, A5, A7
小白鼠2喝:A2, A4, A6, A7
小白鼠3喝:A3, A5, A6, A7
1小时后~
小白鼠1死: A1组有毒
小白鼠2死: A2组有毒
小白鼠3死: A3组有毒
小白鼠1,2死: A4组有毒
小白鼠2,3死: A6组有毒
小白鼠1,3死: A5组有毒
小白鼠1,2,3死: A7组有毒
都没死: A8组有毒
答案:3只
例2:(腾讯)有1000瓶水,其中有一瓶有毒,小白鼠只要尝一滴24小时后就会死亡,至少需要多少只小白鼠才能在24小时内鉴别出那瓶水有毒?
分析:每个老鼠有死活两种状态分别为1,0。因此N个老鼠可以表达2^N种状态。
假设:有4瓶水A,B,C,D,1瓶有毒,设N=2,可以表达4种状态:
1号老鼠喝A,B;2号老鼠喝B,C
24小时后~
00:1号老鼠活,2号老鼠活。D有毒
01:1号老鼠活,2号老鼠死。C有毒
10:1号老鼠死,2号老鼠活。A有毒
11:1,2号老鼠死。B有毒
同理:有1000瓶水,2^10=1024,N=10所以选10个小白鼠,一共可以表示1024个状态。
答案:10只
例3.(搜狐)8瓶酒有1瓶有毒,用人测试,每次测试结果8小时后才会得出,而你只有8个小时时间,问最少需要多少个人测试?
分析:M=8,所以N=3
答案:3个人
总结:有M种状态,则选N只小白鼠。此时:M<2^N
有M瓶水,1瓶有毒,选N只小白鼠可以在规定时间内检测出哪一瓶水有毒。直接用技巧M<2^N
像例1情况,有16瓶水,要求在规定时间内检测出14瓶无毒的。可以两瓶水分一组共8组。
问题转换为:一共有8种状态,检测出哪一组检测出有毒,则剩余的组无毒。此时M=8,所以选3只小白鼠2^3=8