Для того чтобы найти одно число из множества за минимальное количество вопросов, используется метод бинарного (двоичного) поиска. Этот метод позволяет исключать ровно половину вариантов с каждым новым вопросом. Математическое обоснование Количество вопросов определяется с помощью логарифма по основанию 2 от общего количества вариантов. Если общее количество чисел обозначить как , а минимальное количество вопросов как , то выполняется следующее соотношение: В данном случае . Подставим это значение в формулу: Следовательно, . Принцип отгадывания Процесс поиска строится на последовательном делении диапазона пополам. Рассмотрим пример, если загадано число 10:
- Вопрос 1: Число больше 64? (Нет. Остается диапазон 1–64).
- Вопрос 2: Число больше 32? (Нет. Остается диапазон 1–32).
- Вопрос 3: Число больше 16? (Нет. Остается диапазон 1–16).
- Вопрос 4: Число больше 8? (Да. Остается диапазон 9–16).
- Вопрос 5: Число больше 12? (Нет. Остается диапазон 9–12).
- Вопрос 6: Число больше 10? (Нет. Остается диапазон 9–10).
- Вопрос 7: Число равно 10? (Да).
Почему это работает Каждый ответ «да» или «нет» несет в себе 1 бит информации. Чтобы однозначно определить одно из 128 чисел, необходимо получить объем информации, равный , что составляет ровно 7 бит. Если бы чисел было, например, 129, то 7 вопросов бы уже не хватило, и потребовался бы 8-й вопрос. Хотите, чтобы я рассчитал минимальное количество вопросов для другого диапазона чисел или объяснил, как изменится логика, если цена ответа «да» и «нет» будет разной?