题目:
假设在一次事故中,实验人员把1000瓶试剂里含有999瓶纯净水和1瓶毒药混淆在一起了,且毒药只能通过试用的方法才能筛选出来,且毒药发作时间很快。现有健康理想小白鼠10只、无限支试管,试设计一种方案,使得能够找到其中的毒药。
解决方案:
思 路 思路 思路: 1000瓶试剂,10只小白鼠,喝了试剂的小白鼠只有死和活着两种状态,让人联想到进制的用法。
方
法
方法
方法:将1000瓶试剂按照10bit进行二进制编号,如第一瓶是0000000000,第二瓶是0000000001,第三瓶是0000000010…以此类推,因为10bit的二进制数可以表示1024种不同的组合;再将小白鼠对应也编上号,每一只小白鼠对应10bit的各个位。当假设轮到编号是0000111010的试剂时,就将该试剂喂给从低位数起的2,4, 5, 6号小白鼠(即位是1的对应小白鼠);1000瓶喂完或者或者未喂完时,对应的x只小白鼠死亡,则将各个小白鼠的编号在0000000000的10bit编号的位置置1,则对应试剂便是毒药;若当全部试剂都喂完,均无小白鼠死亡,则0000000000就是毒药。
这个方法有点像计算机网络的OSI数据链路层差错纠正的汉明码的味道
延拓题目:
假设在一次事故中,实验人员把 2 N − a 2^N-a 2N−a 瓶试剂 ( a 远 远 小 于 2 N ) (a 远远小于2^N) (a远远小于2N)里含有 2 N − a − 1 2^N-a-1 2N−a−1瓶纯净水和1瓶毒药混淆在一起了,且毒药只能通过试用的方法才能筛选出来,且毒药发作时间很快。现有健康理想小白鼠 N N N只、无限支试管,试设计一种方案,使得能够找到其中的毒药。
解决方案:
思 路 思路 思路: 2 N − a 2^N-a 2N−a 瓶试剂, N N N只小白鼠,还是一样的原理
方 法 方法 方法:将 2 N − a 2^N-a 2N−a 瓶试剂按照 N N Nbit进行二进制编号, 将试剂编号中,1的位置喂给对应的小白鼠,若对应的x只小白鼠死亡,则将各个小白鼠的编号在全是0的 N N Nbit编号串的位置置1,得出的那支试管便是毒药;若当全部试剂都喂完,均无小白鼠死亡,则第一瓶就是毒药。