Ответ
Бинарный поиск (binary search) — это эффективный алгоритм для нахождения элемента в отсортированном массиве. Его сложность составляет O(log n)
, что значительно быстрее линейного поиска O(n)
.
Главное условие
Структура данных (массив, список) обязательно должна быть отсортирована. Без этого алгоритм не будет работать корректно.
Принцип работы
Алгоритм итеративно делит массив пополам, сужая область поиска:
- Определить границы поиска:
left
(начало) иright
(конец). - Найти средний элемент:
mid = (left + right) // 2
. - Сравнить искомый элемент со средним:
- Если они равны — элемент найден.
- Если искомый элемент больше среднего — отбросить левую половину и продолжить поиск в правой (
left = mid + 1
). - Если искомый элемент меньше среднего — отбросить правую половину и продолжить поиск в левой (
right = mid - 1
).
- Повторять шаги 2-3, пока
left <= right
. Если цикл завершился, а элемент не найден, значит, его нет в массиве.
Пример на Python
def binary_search(sorted_array, target):
left, right = 0, len(sorted_array) - 1
while left <= right:
mid = (left + right) // 2
mid_val = sorted_array[mid]
if mid_val == target:
return mid # Элемент найден, возвращаем индекс
elif target > mid_val:
left = mid + 1
else:
right = mid - 1
return -1 # Элемент не найден
# Пример использования
arr = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
print(binary_search(arr, 23)) # Вывод: 5
print(binary_search(arr, 1)) # Вывод: -1
В стандартной библиотеке Python для этих целей существует модуль bisect
.