Найти в Дзене
Записки сварщика

Алгоритмы для начинающих. Бинарный поиск

Сможете ли вы ответить, сколько попыток нужно, чтобы угадать число в диапазоне от 1 до 1000? При условии, что тот, кто загадал число, будет говорить вам при названии очередного числа "больше", "меньше" или "равно".

И снова, здравствуйте! Я решил изучить алгоритмы в программировании. Некоторые алгоритмы я буду записывать в свой блог.

Сегодня мы с вами изучаем алгоритм бинарный поиск.

Предположим, что у вас есть упорядоченный список каких-то значений. Это может быть, например, числа от 1 до 100. Или телефонный справочник, в котором фамилии абонентов упорядочены по алфавиту. Каким образом найти какое-либо значение из этого списка?

Самый простой способ, который приходит вам в голову - это начать перебирать с начала или с конца. Это называется прямым поиском, более удачное название "тупой" поиск. Он тупой, потому что если допустим, вам надо найти число 99, а перебираете вы, начиная с единицы, у вас уйдет 99 попыток.

Пример бинарного поиска. Картинка моя, нарисована в Пэйнте.
Пример бинарного поиска. Картинка моя, нарисована в Пэйнте.

Другим, более удачным способом поиска значения в упорядоченном списке является бинарный поиск.

При этом способе поиска, вы сразу делите список на 2. Затем проверяете, в какой половине списка лежит искомое значение. Таким образом, уже после первой попытки вы сразу же откинули половину списка.

Подобным же образом, вы каждый раз делите список на 2 и проверяете, в какой половине списка лежит ваше значение.

На вышеприведенной картинке указан ответ на вопрос в начале поста. Как мы видим, для того, чтобы найти загаданное число в диапазоне от 1 до 1000 нужно не более 10 попыток, при условии использования алгоритма "бинарный поиск".

Задания на дом:

1. Сколько попыток нужно, чтобы найти загаданное число в диапазоне от 1 до 100?

2. На сколько попыток увеличится поиск результата, если чисел будет не 100, а 200?

Ответы пишите в комментариях!

-2