老鼠喝毒药问题
经典问题
问题描述:
有1000瓶液体中有一瓶是毒药,小鼠吞服后,立马死亡,请问至少需要几只老鼠,
才能一次找出毒药所在。
立马死亡,意味着小鼠的状态是0/1,即死亡/存活的状态,因此我们可以用0/1来
表示小鼠的状态。将药物编号为二进制形式,发现至少需要10位数字才能表示出来
即0000000000~1xxxxxxxxx
设毒药为_ _ _ _ _ _ _ _ _ _
由此可以想到,让10只小鼠,分别喝下
xxxxxxxxx1;
...
1xxxxxxxxx;
的液体,如果某只小鼠死亡,则将该位置1,最后未置位的均为0;
由此可得毒药编号。
问题变式
改变死亡时间
问题描述:
有1000瓶液体中有一瓶是毒药,小鼠吞服后,1小时后死亡,你有2小时,请问至少需要几只老鼠,才能一次找出毒药所在。
1小时死亡,2小时时间,意味着小鼠的状态是0/1/2,即死亡/待定/存活的状态,因此我们可以用0/1/2来表示小鼠的状态。将药物编号为三进制形式,发现至少需要7位数字(3^7>=10)才能表示出来
即0000000~1xxxxxx
设毒药为_ _ _ _ _ _ _
由此可以想到,让10只小鼠,分别喝下
xxxxxx2;
...
2xxxxxx;
的液体,如果某只小鼠死亡,则将该位置2,最后未死亡的则是0/1,进入下一回合;
下一回合,分别让小鼠喝下负责位为1的液体,则又返回第一个基础问题。
由此可得毒药编号。
推广
当小鼠死亡时间为t,做实验的总时间为v时,你可以操作的试验次数p=v/t;
则,应该使用p+1进制为信息的代表格式,然后每次迭代减一个进制