Троичный поиск
Версия от 16:40, 15 июня 2011; 192.168.0.2 (обсуждение)
Эта статья находится в разработке!
Троичный поиск (или тернарный поиск) — метод поиска минимума или максимума функции на отрезке.
Рассмотрим этот алгоритм на примере поиска минимума (поиск максимума аналогичен).
Пусть функция
на отрезке имеет минимум, и мы хотим найти точку , в которой он достигается.Посчитаем значения функции в точках
и . Так как в точке минимум, то на отрезке функция убывает, а на — возрастает, то есть .Значит если
, то , аналогично из следует . Тогда нам нужно изменить границы поиска и искать дальше, пока не будет достигнута необходимая точность, то есть .Псевдокод:
ternarySearch(l, r, eps) if (r-l < eps) return (left + right) / 2 a = (left * 2 + right) / 3 b = (left + right * 2) / 3 if (f(a) < f(b)) return ternarySearch(f, a, r, eps) else return ternarySearch(f, l, b, eps) end