freeCodeCamp/curriculum/challenges/russian/08-coding-interview-prep/project-euler/problem-328-lowest-cost-sea...

4.1 KiB
Raw Blame History

id challengeType title videoUrl localeTitle
5900f4b41000cf542c50ffc7 5 Problem 328: Lowest-cost Search Задача 328: поиск по минимальным затратам

Description

Мы пытаемся найти скрытое число, выбранное из набора целых чисел {1, 2, ..., n}, задавая вопросы. Каждый номер (вопрос), который мы задаем, имеет стоимость, равную запрашиваемому номеру, и мы получаем один из трех возможных ответов: «Ваша догадка ниже скрытого числа» или «Да, вот и все!» Или «Ваша догадка выше скрытого числа ". Учитывая значение n, оптимальная стратегия минимизирует общую стоимость (т. Е. Сумму всех заданных вопросов) для наихудшего возможного случая. Например

Если n = 3, лучшее, что мы можем сделать, - это, очевидно, задать число «2». Ответ сразу заставит нас найти скрытое число (при общей стоимости = 2).

Если n = 8, мы можем решить использовать стратегию «двоичного поиска»: наш первый вопрос будет «4», а если скрытое число больше 4, нам понадобятся один или два дополнительных вопроса. Пусть наш второй вопрос будет «6». Если скрытое число еще выше 6, нам понадобится третий вопрос, чтобы различать от 7 до 8. Таким образом, наш третий вопрос будет «7», а общая стоимость этого наихудшего сценария составит 4 + 6 + 7 = 17.

Мы можем значительно улучшить наихудшие затраты для n = 8, задав «5» в качестве нашего первого вопроса. Если нам говорят, что скрытое число выше 5, наш второй вопрос будет «7», тогда мы точно знаем, что такое скрытое число (общая стоимость 5 + 7 = 12). Если нам говорят, что скрытое число меньше 5, наш второй вопрос будет «3», и если скрытое число будет ниже 3, наш третий вопрос будет «1», что даст общую стоимость 5 + 3 + 1 = 9. С 12> 9 наихудшая стоимость для этой стратегии равна 12. Это лучше, чем мы ранее достигали с помощью стратегии «бинарного поиска»; он также лучше или равен любой другой стратегии. Итак, на самом деле мы только что описали оптимальную стратегию для n = 8.

Пусть C (n) - наихудшая стоимость, достигаемая оптимальной стратегией для n, как описано выше. Таким образом, C (1) = 0, C (2) = 1, C (3) = 2 и C (8) = 12. Аналогично, C (100) = 400 и C (n) = 17575.

Найти C (n).

Instructions

Tests

tests:
  - text: ''
    testString: 'assert.strictEqual(euler328(), 260511850222, "<code>euler328()</code> should return 260511850222.");'

Challenge Seed

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

euler328();

Solution

// solution required