“众里寻它”的学问
1943 年,第二次世界大战正紧张地进行着。
望着门口长长的等待验血的征兵队伍,美军军医道夫曼陷入了沉思。这些小伙子看来都很健康,可是要吸收他们入伍,还必须验血检查一次,以防一种可怕的疾病带入军队中,每个人都要化验一次,这要花多少时间!本来这种病的发病率并不高,比如说只有百分之一吧,为了一个人,就必须把 100 个人的血逐个儿化验一遍,这样做太不值得了,能不能减少化验次数呢?
道夫曼想起那些重复性的化验操作:抽血,投入试剂,观察反应⋯⋯。如果是阴性,就算通过;如果是阳性,就表明带有病毒。事情就是那么简单。突然,一个念头闪过他的脑子:干嘛不把一群人的血液都放在一起,集体化验一下呢?若是阴性,就一下子全部通过;若是阳性,就分成几群再试。假定 100 个人中只有一个病号,可把他们分为 10 群,每群 10 人。先每群集体化验一次,必有一群应为阳性的,再将这群人的血一个个化验一遍,这样最多只需化验 20 次就够了。他的想法实际运用后,果然大大加快了验血速度。后来,他把这种试验方法称之为“群试”,发表在一个数学杂志上。
再“一分为二”
把验血问题抽象化,我们可以得出这样一种“数学模型”:已知 N 个物体中含有 d 个坏物,如果从中取出一群物体来作试验,结果只有“好”、“坏” 两种。结果为好时,说明这群物体都是好的;结果为坏时,说明这群物体中至少包有一个坏物。问怎样才能以最少试验次数,把 d 个坏物全找出来。可以看出,工厂产品检验等许多问题都是属于这一类。所以,群试法用途很广泛。
人们当然也发现,道夫曼并没有彻底利用群试思想,因为他在试第二遍时,还得一个个地去化验。实际上他可以把群试思想贯彻到底。当仅含一个坏物(即 d=1)时,更有效的方法是“一分为二”法,即每次都把含有坏物的那群物体一分为二,取其中任意一半作为下次被试验的一群物体。还是假
设 100 个物体中含有一个坏物。第一次任取 50 个来试验。若结果为坏,就在
这群物体中取出 25 个来再试。若结果为好呢?这表明坏物含在没试过的剩下
的 50 个中。因此可把剩下的 50 个这一群一分为二,任取一半 25 个来试。总
之第二次只需试验由 25 个物体组成的群了。这样不断边分边试,遇到一群物
体的个数为奇数时,就分成大致相等的两半,像 25 个物体就可以分成 12 个
一群及 13 个一群,最后,只需试验 7 次就可以了。