61
правка
Изменения
Нет описания правки
while left < right - eps //Здесь можно использовать другое условие выхода
mid = (left + right) / 2;
if f(mid) == c //** return mid; //** else if f(mid) < c
left = mid;
else
return l;
</pre>
== Пример Примеры использования ==* Классической задачей на вещественный двоичный поиск является задача поиска корня <tex>n</tex>-ой степени из числа <tex>x</tex>: <tex>\sqrt[n]{x}</tex>. При <tex>x \ge 1</tex> нижней границей для поиска будет <tex>1</tex>, а верхней {{---}} <tex>x</tex>.* Если функция нестрого монотонна, то, убрав из приведенного выше алгоритма строки, отмеченные <tex>(**)</tex>, мы получим алгоритм, который будет находить <tex>x</tex> такой, что <tex>f(x) = c</tex> и <tex>f(x - \epsilon) < c</tex>.
== Замечания ==
* Необходимо отметить, то функция должна быть строго монотонна, иначе если мы ищем конкретный корень и он единственный. Нестрого монотонна, если нам необходимо найти самый левый (правый) аргумент. Если же функция не монотонна, то данный алгоритм не найдет искомый аргумент, либо найдет аргумент, но он не будет единственным. * Важным отличием от целочисленного поиска является то, что мы передвигаем границу ровно в середину отрезка (<tex>left = mid</tex>), а не со смещением внутрь отрезка (<tex>left = mid + 1</tex>).
== Источники ==
* [http://www.intuit.ru/department/algorithms/basicalgos/2/ Интернет университет, лекция сортировка и поиск]