← Все вопросы

Бинарный поиск — объясните идею простыми словами

Задан 6 месяцев назад141 просмотров2 ответа
6

Знаю, что бинарный поиск быстрее линейного, но не уложу в голове как он работает. Можно на пальцах?

2 ответа

12
✓ Принятый ответ — помог автору

Работает только на отсортированном массиве. Идея как «угадай число 1–100 за минимум попыток»:

  1. Берёшь середину.
  2. Если искомое больше — отбрасываешь левую половину, меньше — правую.
  3. Повторяешь, пока не найдёшь.

Каждый шаг режет диапазон вдвое, поэтому из миллиона элементов хватает ~20 шагов (O(log n)).

lo, hi = 0, len(a) - 1
while lo <= hi:
    mid = (lo + hi) // 2
    if a[mid] == x: ...
    elif a[mid] < x: lo = mid + 1
    else: hi = mid - 1
Руслан Герасимов аналогия с угадай-число всё расставила по местам 🙏 · 6 месяцев назад
Игорь Михайлов важно что массив должен быть отсортирован — вот это упускал · 6 месяцев назад
2

в питоне ещё есть готовый модуль bisect, если не нужно писать руками

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект