freeCodeCamp/curriculum/challenges/chinese/10-coding-interview-prep/project-euler/problem-352-blood-tests.md

2.9 KiB
Raw Blame History

id title challengeType videoUrl
5900f4cd1000cf542c50ffdf 问题352验血 5

--description--

必须对一群羊中的25只绵羊中的每一只进行稀有病毒检测已知这种病毒会影响2的绵羊群体。对血液样品存在准确且极其灵敏的PCR测试产生明显的阳性/阴性结果,但是它非常耗时且昂贵。

由于成本高负责人建议不要进行25次单独的测试而是可以使用以下程序将绵羊分成5组每组5只绵羊。对于每组将5个样品混合在一起并进行单次测试。然后如果结果是阴性则该组中的所有绵羊都被认为是无病毒的。如果结果为阳性将进行5次额外测试对每只动物进行单独测试以确定受影响的个体。

由于任何特定动物的感染概率仅为0.02因此每组的第一次测试在合并的样本上将为阴性并且不再需要测试概率为0.985 = 0.9039207968。正需要5次额外测试概率为1 - 0.9039207968 = 0.0960792032。

因此每组的预期测试次数是1 + 0.0960792032×5 = 1.480396016。因此所有5组都可以使用平均仅1.480396016×5 = 7.40198008的测试进行筛选这意味着节省了超过70的巨额费用

尽管我们刚刚描述的方案似乎非常有效但它仍然可以得到显着改善总是假设测试足够敏感并且不会因混合不同样品而产生不利影响。例如我们可以首先对所有25个样本的混合物进行测试。可以证实在大约60.35的情况下该测试将是否定的因此不再需要进行测试。其余39.65的案件只需要进一步测试。如果我们知道5个一组中至少有一只动物被感染并且前4个个体测试结果为阴性则不需要对第五个动物进行测试我们知道它必须被感染。我们可以在每组中尝试不同数量的组/不同数量的动物,在每个级别调整这些数字,以便最小化测试的总预期数量。

为了简化各种各样的可能性,我们在设计最具成本效益的测试方案时有一个限制:每当我们从混合样本开始时,必须对所有对该样本做出贡献的绵羊进行全面筛选(即对感染的判断)在我们开始检查任何其他动物之前,必须达到/无病毒。

对于当前的例子事实证明最具成本效益的测试方案我们称之为最优策略需要平均只需4.155452次测试!

使用最优策略让Tsp代表筛选一群绵羊所需的平均测试次数以获得任何个体中存在概率p的病毒。因此四舍五入到小数点后六位T25,0.02= 4.155452T25,0.10= 12.702124。

找到ΣT10000pp = 0.01,0.02,0.03...... 0.50。将您的答案四舍五入到小数点后六位。

--hints--

euler352()应该返回378563.260589。

assert.strictEqual(euler352(), 378563.260589);

--solutions--