借鉴博客:http://blog.csdn.net/shaolianbo/article/details/8650061
题目:
1000瓶试剂,其中有1瓶有毒,如果小白鼠服用有毒的药,则24小时后死亡。要求使用尽可能少的小白鼠,在24小时内找出有毒的药。
思路:
这是一道典型的二分法查找的算法题,一般情况下,我们使用的都是串行的二分法,如果这道题没有时间限制,我们就可以使用串行的二分法找到毒药,步骤如下:
(1)首先,给试剂编号,1~1000
(2)给第一只小白鼠喂1~500号混合的试剂,等待24小时,
(3)如果小白鼠死亡,则给第二只喂1~250号混合的试剂,否则,喂501~750号试剂
(4)依次进行二分,可以看出,这样最多需要10只小白鼠就能找到毒药。
但是,这道题有时间限制,所以我们要同时给一定的小白鼠喂药,然后从小白鼠的死亡情况找出毒药。步骤如下:
(1)第一只小白鼠:1~500
(2)第二只小白鼠:1~250 + 501~750
(3)第三只小白鼠:1~125 + 251~500 + 501~625 + 751+875
……….
依次下去,由于2^9 < 1000 < 2^10,所以需要10只小白鼠才能找到毒药。