大家好,我是石头哥。
估计大家都有做过核酸检测吧?我也做过好多次。
我参加到的检测流程基本是这样:
医院挂号缴费,然后排队,领个管儿,再排队,然后到“全副武装”的护士那里,用棉签捅一捅喉咙,放到你领的管儿里面。
然后等结果,完事儿……
我都是做的咽拭子,一般还有一种鼻拭子,估计会难受一点儿?(你做过么?)
这种,基本上都是一个人采样(所谓的“单采单检”),用一份核酸检测的试剂进行检查。
不知道你有没有参与过大规模的核算检测。
大规模核算是这样的吗?比如全员核酸?
如果,都按照“单采单检”的标准进行,成本是一回事,耗时也不少啊。
要知道在疫情的关键时刻,早一点筛查出目标,就能尽早减少扩散,多一份安全。
因此,会采用 “多人混检”的方式。
例如“十合一混检”:
即:每组10人,采集10个标本,全混入一个容器,然后统一送检。
其中只要有一位中招了,那就10人全部召回复检。
复检再回到前文提到的“单采单检”模式进行,确定10人中的哪一个(或多个)中招。
这样做,速度大大提高了。
不过,能否有方法能省掉上文中的复检流程呢?
在初次检测中知道某组10人中,有一人中招了,不需要再通过复检,就能确定出到底是谁中招呢?
直接就想到了这样一道面试题。
类似的场景设计题目,我多年前面试某个大厂的时候,就遇到了!
印象笔记中躺着的多年前的面经
这道题目是这样的:
有8瓶药,其中只有一瓶是毒药,我们有三只老鼠,能被毒药很快毒死。请问如何设计,能尽快把毒药试出来?假设药水可以混合且不影响毒性。
这个题目比较好的解法是利用二进制思想。
如下所示,三只老鼠编号 A、B、C,0-7
对应8瓶药编号:
ABC //三只老鼠编号ABC
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
对应位为1,表示对应老鼠需要吃对应药水,按照如下的方案进行分配:
老鼠喝完后,该挂的也就挂了。ABC对应挂了的标记为1,活着的标记为0,得到一个数字。
假设结果为:A、B 挂了,C 活着,即为110=6
,就得到6号药水有毒。
110=6
不假,但 A、B 挂了,C 活着,就能得到6号药水有毒??
确实是的!
回到前面的混合方案:
6号有毒,确实能正向推导结果:C活着,A、B 挂了。
反过来呢?
C活着,必然1、3、5、7号药水无毒。即相当于:
又因为只有 1 瓶有毒:
所以只能是6号有毒。
这个“老鼠试毒”的场景能直接“照搬”到核算检测吗?
假设不考虑核酸检测实操过程中的困难,比如每人采样后,可以直接将标本进行拆分(不考虑采样标本被稀释,从而影响结果等等),标号分组等工序。
是否能设计一种类似的方案,排列组合一下,拆分,尽量用较少的核酸检测试剂,较少的次数,来确定到底谁中招?
我脑袋不够用了,评论区等你来回答~
推荐一份清华经典数据结构课件及教材,点这里领取 —— 曝光了,清华计算机系最牛的课!
有收获请记得下方点赞、在看、分享
。
你好,我是石头哥,来自十八县贫困农村,一路逆袭上清华(点击蓝字查看我的逆袭之路),目前在BAT某厂打工,是前大疆(无人机)技术主管,曾经也在创业公司待过,有着丰富的经验。
公众号【程序猿石头】(ID:tangleithu)会分享一些自己对技术、职场等经验和见解,欢迎关注。同时欢迎你加入互联网大厂内推群 & 技术交流群,一起学习、共同进步。关注后回复 “0” 送大厂技术大礼包。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有