14 страницаОпубликовано: 20.05.2019. 17:26
150

Озвучивание не поддерживается в этом браузере

1 ГЛАВА 'Бинарный поиск'

Предположим, вы ищете фамилию человека в телефонной книге (какая древняя технология!). Она начинается с буквы «К». Конечно, можно начать с самого начала и перелистывать страницы, пока вы не доберетесь до буквы «К». Но скорее всего для ускорения поиска лучше раскрыть книгу на середине: ведь буква «К» должна находиться где-то ближе к середине телефонной книги.

Или предположим, что вы ищете слово в словаре, и оно начинается с буквы «0». И снова лучше начать с середины.

Теперь допустим, что вы вводите свои данные при входе на Facebook. При этом Facebook необходимо проверить, есть ли у вас учетная запись на сайте. Для этого ваше имя пользователя нужно найти в базе данных. Допустим, вы выбрали себе имя пользователя ~karlrnageddon~. Facebook может начать с буквы А и проверять все подряд, но разумнее будет начать с середины.

e48d82391ed3d2cdd332c723c50f01ec.avif

Перед нами типичная задача поиска. И во всех этих случаях для решения задачи можно применить один алгоритм: бинарный поиск.

Бинарный поиск - это алгоритм; на входе он получает отсортированный список элементов (позднее я объясню, почему он должен быть отсортирован). Если элемент, который вы ищете, присутствует в списке, то бинарный поиск возвращает ту позицию, в которой он был найден. В противном случае бинарный поиск возвращает null.

Например:

4ee2f21cebc6491378dc7e2148762a2e.avif

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

ddc68b2885b0b9e61f449e174e2c56dd.avif

Вы должны отгадать мое число, использовав как можно меньше попыток.
При каждой попытке я буду давать один из трех ответов: «мало», «много»
или «угадал».

Предположим, вы начинаете перебирать все варианты подряд: 1, 2, 3, 4... Вот как это будет выглядеть.

0547b01241749dd0dcf7cb92f6d832a3.avif

Это пример простого поиска (возможно, термин «тупой поиск» был бы уместнее). При каждой догадке исключается только одно число. Если я загадал число 99, то , чтобы добраться до него, потребуется 99 попыток!

Комментарии

0 / 5000 символов
Пока нет комментариев. Будьте первым!