Алгоритм двоичного поиска — это эффективный метод поиска определенного значения в отсортированном массиве. Этот подход делит массив на более мелкие части и непрерывно сравнивает значение в средней позиции диапазона поиска с целевым значением. Если значения совпадают, искомое значение найдено; в противном случае алгоритм продолжает сужать диапазон поиска и повторяет процесс до тех пор, пока значение не будет найдено или не останется элементов для проверки.
Шаги:
- Инициализируйте диапазон поиска: начните с выбора диапазона поиска от первой позиции
left
до последней позицииright
массива. - Найдите среднюю точку: вычислите среднюю точку, усредняя
left
и правые позиции; это средняя точка диапазона поиска. - Сравнить значения: Сравните значение в средней точке с целевым значением.
- Обработать результат сравнения: если значение в средней точке соответствует целевому значению, вернуть эту позицию. Если значение в средней точке меньше целевого значения, обновите левую позицию до средней + 1 для поиска правой половины. Если значение в средней точке больше целевого значения, обновите правую позицию до середины- 1 для поиска в левой половине.
- Повтор: Повторяйте шаги со 2 по 4, пока не будет найдено значение или не останется элементов для проверки
left > right
.
Преимущества и недостатки
Преимущества:
- Эффективная производительность: временная сложность алгоритма составляет O(log n), что делает его очень эффективным для обработки больших наборов данных.
- Эффективен для больших наборов данных: бинарный поиск эффективен для сокращения количества элементов, которые необходимо быстро проверить для больших наборов данных.
Недостатки:
- Применимо только к отсортированным массивам: алгоритм работает только с отсортированными массивами.
- Переменное количество шагов: количество шагов, необходимых для поиска значения, зависит от его положения в массиве, и может потребоваться много шагов для значений ближе к концам.
Пример: двоичный поиск для нахождения значения 12 в отсортированном массиве в PHP
Пояснение к примеру
- Мы начинаем с начального диапазона поиска от первой позиции
left = 0
до последней позицииright = 6
массива. - Среднюю точку(mid) вычисляем, усредняя левую и правую позиции;
mid = 3
. Значение в середине равно 12. - Мы сравниваем значение в
mid(12
) с целевым значением(12) и находим совпадение, поэтому возвращаем позицию 3. - Алгоритм завершается, и мы выводим результат «Значение 12 найдено в позиции 3».