Вещественный поиск

Пусть (функция, которая которая на области определения имеет область значений и монотонная на этой области.

Всё что обсуждалось в предыдущей главе про целочисленный поиск работает и тут, так как область значений является аналогом отсортированного массива. Такой поиск называется вещественный, так как функция похожа на математическую функцию. Главное, чтобы функция была монотонной.

Идея та же, что и при целочисленном бинарном поиске : сначала возьмём такие границы поиска . После этого на каждом шаге будем сдвигать одну из границ , в зависимости от значения . В тот момент, когда и отличаются на единицу, — искомый порог. Если считать, что значение функции в точке вычисляется за , то время работы алгоритма — , где — начальные границы поиска.

Разовьём идею дальше, можно искать не только целочисленные точки, но и дробные!!! Увы, большой точности добиться невозможно. Проблема заключается в том, что действительные числа хранятся в компьютере неточно(. Например, если ответ это число . Для границ стоит использовать тип с самой большой точностью, в c++ это тип double.

Тем не менее, мы можем найти такое с погрешностью : найдём такое , что существует такое, что . Единственное отличие от обычного бинпоиска : мы завершаем алгоритм в тот момент, когда .

Время работы алгоритма (при условии, что значение вычисляется за .

Любой алгоритм целочисленного поиска, является подмножеством вещественного, в котором функция бинарная. Например, для проверки есть ли число в массиве, надо было лишь заменить if (a[mid] < x) на .

Last change: 2023-10-24, commit: d3abe52