[Group testing]群组测试:毒药谜题

问题背景

这个问题在统计学和组合数学领域被称为群组测试问题(Group testing),问题源于二战时期,美国需要通过血样检测美军是否携带梅毒,但是当时血液检测耗时耗钱,将每个士兵的血液都检查一遍效率很低。考虑到携带梅毒的总归是少数,Rosenblatt和Dorfman提出将全部待检测士兵的血样分组混合后再检测,如果混合后的血样没有病毒,可以推定整个组都没有病毒,如此便能够减少不必要的检测。

将以上问题标准化描述如下:

  • 给定集合N,其中有n个个体,每个个体要么是正例(Positive)要么是负例(Negative),记其中正例个数为d
  • 目标:通过尽量少的测试次数,找出所有的负例。
  • 群组测试(Group testing):在N 的一个子集上测试(与在每个个体上测试相对)。

这样做有一个前提:d<< n;可以设想,如果一个集合N当中大多数都是正例,那你随便找个子集,大概率都是含有正例的, 那么就不能达到排除一个子集的效果,这个方法就失去意义了。

Katona在1976年介绍了一种矩阵表示法,只需要\log_2{n}次测试即可检测出n个样本中的一个正例,并且证明的其最优性。这个方法就是被各个互联网公司面试题疯狂引用的1000瓶药中有一瓶有毒,要求用最少的小白鼠检测出这一瓶毒药的题目。我也刷过,但是不得不吐槽,起码对我来讲,倘若没见过这个题目的解法,要想自己独立思考出来,可以说是难如登天,即使有些人能够写下解法,但是这个“最优”一词,可能很少有人能说上来其中的原因。反正大加面试题抄来抄去,也没有认真想过为什么要出这么个面试题,可能面试官觉得自己已经背过了,不出给别人觉得浪费。

吐槽完了还是简单说说这个题目的解法,就免得部分同学再点到其他网页游览一圈了。将1000只老鼠用二进制的(1) _{10}(1000) _{10}编上序号,需要10位二进制码,然后把序号第1位为1的药混合在一起喂给老鼠1,....然后把序号第10位为1的药混合在一起喂给老鼠10。假设老鼠i死掉了,那么可以推定毒药的编号的第i位是1,把每只老鼠的实验结果综合起来,就能得到毒药编号的每一位,毒药就找出来了。另外,前述的此法所需测试次数 \log_2{n} 实际上就是所需二进制编码的位数。

一般,对上述从n个样本中寻找一个正例的问题,很容易能想到的就是采用二分法去寻找,把样本分成两份,分别进行群组测试,那么只有一个能包含正例,所以,排除一半,对另一半进行检测····使用此法也能在\log_2{n}次检测结束后找到解。不过此法与Katona的方法区别在于,此法是多阶段的决策(adaptive Algorithm),比如第二次对哪一拨进行测试,要根据第一次的测试结果来确定。但是Katona方法则不同,其在测试开始前即可确定全部的测试群组的划分(non-adaptive Algorithm)。


以上的只是一些老生常谈的问题,可能大家都看过无数遍了,我为甚么又要提起这个问题,还要谁个博文呢?主要是我昨天参加了IGG的线上笔试题,这个公司不走寻常路,出了一个这个问题的加强版,也就是在n个样本中寻找d个正例。这种题一下子就触及到我这样的刷题党的知识盲区了,因为之前没见过,要现场想出个解法太难了。

但是当时我还是大致写了个方法,不过不严密,当时也想的比较混乱。大致思想如下,既然已知其中有d个正例,我直接把样本随机分为d份,然后分别进行群组测试,按照鸽笼原理和统计学常识,这些正例恰好每组一个的概率是不太大的,所以能够淘汰掉一些群组。一直重复这个过程就能够排除掉很多负例。但是达到一定程度(在剩余样本里正例占比很大的时候),就不能再采用分组测试了,应该采用单独测试。后来我去查阅文献,发现这个思想和文章[1]类似。

-信息论下界

从信息论讲,这个问题(仅有一个正例)一定有一个下界。因为每次测试只有两个输出信息---正例or负例,因此进行k次测试最多表示2^k种信息状态,因此,至少要\log_2{n}次测试才能获得足够的信息,因此,下界为\log_2{n}
同理,对于d个正例的情况,下界为\log_2{n \choose d}。当然,下界一般而言是难以达到的。

解法1:可以简单地想到一种解法,利用二分法去解决,首先把n个样本分成两份进行检测,有毒(正例)的群组继续检测,没毒的部分排除,一直重复这个过程直到剩下的样本总数等于d,就找到所有的正例了。这个方法实际上就是算法中常用的剪枝的思想,剪枝越早,效率越高,假设你运气好,没走几步就只剩下d个可疑样本了,那就直接求出结果了。再来看看它的复杂度,由于其中只有d个样本是正例,那么在二叉搜索树的某一个层上最多只有d个节点能被检测出正例,而二叉树的深度是\log_2{n},所以复杂度为O(d \log_2{n} )。而哪个IGG笔试的题目实际上就是要求这个复杂度,只能说考试总是这样,交卷了思维才会清晰起来,呵呵。

但是这个方法也不是没有问题,因为它是adaptive的,需要的时间复杂度是\log_2{n},也就是要进行至多\log_2{n}次的试验。如果题目要求一次就测出来,那么就还需要一个提前决定测试分组的编码方案,并且在测试结果出来之后能够解码得出到底哪些是正例。由于我对类问题兴趣不大,所以暂时不想深究,有兴趣的可以去文献[3]尝试寻找答案。

最近比较忙,倘若日后有空再去看这个问题,如果你有了自己的见解欢迎分享给我,万分感谢。

//TODO

[1]: Li, Chou Hsiung (June 1962). "A sequential method for screening experimental variables". Journal of the American Statistical Association. 57 (298): 455–477. doi:10.1080/01621459.1962.10480672
[2]:https://en.wikipedia.org/wiki/Group_testing
[3]:Ding-Zhu, Du; Hwang, Frank K. (1993). Combinatorial group testing and its applications. Singapore: World Scientific. ISBN 978-9810212933.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,396评论 1 301
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,482评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 94,858评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,131评论 0 179
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,903评论 1 256
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,847评论 1 177
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,454评论 2 273
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,206评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,047评论 6 232
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,563评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,344评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,667评论 1 231
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,264评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,163评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,546评论 3 207
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,630评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,032评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,572评论 2 231
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,668评论 2 232

推荐阅读更多精彩内容