Ответ
Бинарный поиск (binary search) — это эффективный алгоритм для нахождения элемента в отсортированном массиве. Его принцип основан на стратегии "разделяй и властвуй": на каждом шаге алгоритм отбрасывает половину массива, в которой искомого элемента точно нет.
Благодаря этому его временная сложность составляет O(log n)
, что значительно быстрее линейного поиска (O(n)
).
Алгоритм
- Определить левую (
left
) и правую (right
) границы поиска (изначально — весь массив). - Пока
left <= right
, вычислить центральный индексmid
. - Сравнить искомый элемент (
target
) с элементомarr[mid]
:- Если они равны, элемент найден, вернуть
mid
. - Если
target
большеarr[mid]
, продолжить поиск в правой половине, сместивleft
наmid + 1
. - Если
target
меньшеarr[mid]
, продолжить поиск в левой половине, сместивright
наmid - 1
.
- Если они равны, элемент найден, вернуть
- Если границы поиска сошлись (
left > right
), элемент в массиве отсутствует.
Пример на Python
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
# Вычисляем середину, избегая возможного переполнения для больших чисел
mid = left + (right - left) // 2
if arr[mid] == target:
return mid # Элемент найден
elif arr[mid] < target:
left = mid + 1 # Искать в правой половине
else:
right = mid - 1 # Искать в левой половине
return -1 # Элемент не найден
Ключевые моменты
- Главное требование: Массив должен быть отсортирован.
- Эффективность: Значительно превосходит линейный поиск на больших объемах данных.
- Реализация: Может быть как итеративной (цикл
while
), так и рекурсивной.