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