digital-garden/dev/algorithm/Бинарный поиск.md
Struchkov Mark ad35bf983f
All checks were successful
continuous-integration/drone/push Build is passing
Исправление даты
2024-09-08 00:56:18 +03:00

23 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- maturity/🌱
date: 2024-04-07
zero-link:
- "[[../../meta/zero/00 Алгоритм|00 Алгоритм]]"
parents:
linked:
link: https://struchkov.dev/blog/ru/java-binary-search/
---
Один их самых простых алгоритмов это поиск элемента в отсортированном массиве. Это самая базовая алгоритмическая задача, которую нередко спрашивают на собеседованиях.
С одной стороны, для подобных алгоритмов используют уже готовые функции стандартной библиотеки, с другой подобные вопросы на собеседованиях позволяют узнать полезное о кандидате.
Первое что приходи на ум: перебор элементов в массиве до нужного, тогда если количество элементов равно n и нужный нам элемент будет последним, нам потребуется сделать n проверок элементов до нахождения нужного, про такой случай и говорят что сложность алгоритма равна O(n).
Рассмотрим другой подход - бинарный поиск возьмем средний элемент отсортированного массива и сравним его c искомым. Если элемент меньше продолжим поиск в левой части массива, если больше в правой, пока не останется нужный элемент. Таким образом нам понадобится число операций равное тому, сколько раз нам нужно поделить массив размером n пополам.
Например, для массива в 16 элементов мы сначала поделим его на два по 8, потом 8 на два по 4, потом 4 на два по 2 и на конец 2 пополам, те всего 4 операции в худшем случае. Такое число равно двоичному логарифму.
Реализации:
- [Бинарный поиск на Java](../java/Бинарный%20поиск%20на%20Java.md)