freeCodeCamp/curriculum/challenges/russian/08-coding-interview-prep/project-euler/problem-352-blood-tests.rus...

6.5 KiB
Raw Blame History

id challengeType title forumTopicId localeTitle
5900f4cd1000cf542c50ffdf 5 Problem 352: Blood tests 302012 Задача 352: Анализы крови

Description

Каждый из 25 овец в стаде должен быть проверен на наличие редкого вируса, который, как известно, влияет на 2% овец. Для образцов крови существует точный и чрезвычайно чувствительный тест ПЦР, который дает четкий положительный / отрицательный результат, но он очень трудоемкий и дорогостоящий.

Из-за высокой стоимости, vet-in-charge предполагает, что вместо выполнения 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 тестов!

Используя оптимальную стратегию, пусть T (s, p) представляет среднее число тестов, необходимых для скрининга стаи овец для вируса с вероятностью p, присутствующей у любого человека. Таким образом, округленные до шести знаков после запятой, T (25, 0,02) = 4,155452 и T (25, 0,10) = 12,702124.

Найти ΣT (10000, p) для p = 0,01, 0,02, 0,03, ... 0,50. Дайте ваш ответ округленным до шести знаков после запятой.

Instructions

Tests

tests:
  - text: <code>euler352()</code> should return 378563.260589.
    testString: assert.strictEqual(euler352(), 378563.260589);

Challenge Seed

function euler352() {
  // Good luck!
  return true;
}

euler352();

Solution

// solution required