Найти тему
Modul school

Бинарный поиск

Оглавление

В задачах, когда нужно искать элемент в последовательности чисел (например в списке или массиве), проще всего использовать линейный поиск. То есть последовательно перебрать все элементы сравнивая их с искомым значением.

Такой алгоритм достаточно прост в написании и понимании, но на практике при работе с большими наборами данных оказывается достаточно затратен с точки зрения времени выполнения.

Для сокращения времени работы программы можно использовать вместо линейного поиска алгоритм бинарного поиска.

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

Принцип работы алгоритма бинарного поиска

Основная последовательность действий алгоритма выглядит так:

  1. Сортируем массив данных.
  2. Делим его пополам и находим середину.
  3. Сравниваем срединный элемент с заданным искомым элементом.
  4. Если искомое число больше среднего — продолжаем поиск в правой части массива (если он отсортирован по возрастанию): делим ее пополам, повторяя пункт 3. Если же заданное число меньше — алгоритм продолжит поиск в левой части массива, снова возвращаясь к пункту 3.

В каких случаях используют бинарный поиск

Двоичный поиск подходит для нахождения позиций элемента в упорядоченном списке: в этом случае он эффективнее линейного, поскольку массив данных на каждом шаге разделяется надвое и одна половина сразу отбрасывается. Последовательная сложность двоичного метода в худшем и среднем случаях равна O(log n), в лучшем — O(1) (если обнаруживаем искомый элемент на первой итерации). Для сравнения: вычислительная сложность линейного поиска равна O(n) (обычный проход по всем элементам в поисках нужного).

У бинарного поиска есть недостаток — он требует упорядочивания данных по возрастанию. Сложность сортировки — не менее O(n log n). Поэтому, если список короткий, используется все-таки линейный поиск.

Применение бинарного поиска при решении задания 26 в ЕГЭ по информатике

Задача

В текстовом файле записан набор натуральных чисел, не превышающих 10 в 9 степени. Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле, и чему равно наибольшее из средних арифметических таких пар.

Входные данные Первая строка входного файла содержит целое число 𝑁 – общее количество чисел в наборе. Каждая из следующих 𝑁 строк содержит одно число.

Решение на python с применением бинарного поиска

-2

Наука
7 млн интересуются