10
правок
Изменения
Нет описания правки
{{Определение
|definition=
'''Целочисленный двоичный поиск (бин. поиск)<i>(от англ. Binary Search)</i>''' {{---}} алгоритм поиска объекта по заданному признаку во множестве объектов, упорядоченных по тому же самому признаку.
}}
== Формулировка задачи ==
Пусть нам дан упорядоченный массив, состоящий только из целочисленных элементов. Нам надо найти в нем нём индекс, по которому находится искомый элемент, или же мы можем находить интервалы вхождения искомого элемента. Для этой задачи мы и можем использовать двоичный поиск.
==Принцип работы==
Двоичный поиск заключается в том, что на каждом шаге множество объектов делится на две части и в работе остается остаётся та часть множества, где находится искомый объект. Или же, в зависимости от постановки задачи, мы можем остановить процесс, когда мы получим первый или же последний индекс вхождения элемента. Последнее условие {{---}} это левосторонний/правосторонний двоичный поиск.
== Правосторонний/левосторонний целочисленный двоичный поиск ==
Когда мы ищем правосторонним бин. бинарным поиском, то он возвращает индекс самого правого вхождения заданного значения <tex> x </tex> .
Когда же поиск левосторонний, возвращается индекс самого левого вхождения заданного значения <tex> x </tex> .
== Код ==
<pre>binSearch(l, r) // l, r - левая и правая границы while l < r - 1 // запускаем цикл m = (l + r) / 2; // m - середина области поиска if a[m] < k l = m; else r = m; // сужение границ
</pre>
В случае правостороннего поиска изменится знак сравнения при сужении границ на (<tex>a[m] \leqslant k</tex>).
==Ссылки==
[http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA Википедия - двоичный поиск]
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Сортировки]]