问题:有1000杯水,其中有一杯是毒水,现在需要从中找出含毒药的水,可以用老鼠来实验;老鼠如果喝了有毒的水,必死,请问如何安排试验,能够用最少的实验材料检测出有毒的水?
思考?
常规方法是用1000只老鼠,分别给它们喝这1000杯水,但显然用到的老鼠太多,工作量太大。1000,如果想的比较深,能够想到1024,对于学习计算机的同学来说,是个非常熟悉的数字,1024=2^10;暂时想不出这之间有什么关系,可以先放着。
如果我们用n只老鼠,喝过水后,对于老鼠来说有两种状态:活,死。我们是否可以从n只老鼠的死活中找出有毒的水,再往深处想:n只老鼠会出现2^n中结果,联想到前面1024=2^10,我们可以用2^n中状态分别表示1000杯水,n =10,所以用10只老鼠即可。
剩下的就是怎么安排10只老鼠喝水。把10只老鼠从右往左依次排开,对应与2进制中的位。给1000杯水分别别号1,2,3,4,… ,1000.
将其编号全部转换成2进制,0000000001,0000000010,0000000011,0000000100,….,1111101000.
把2进制中的10位对应于10只老鼠。如果位是1,就给对应的老鼠喝水,例如0010010011,就给第1,2,5,8只老鼠喝这一杯水。
最后观察这10只老鼠中,哪些死亡,如果第5,9,10只老鼠死亡,死亡位标志为1,即00001000011=64+2+1=67,所以第67杯水即为毒水。