Троичный поиск — различия между версиями
| Строка 1: | Строка 1: | ||
{{В разработке}} | {{В разработке}} | ||
| − | '''Троичный поиск''' {{---}} метод поиска минимума или максимума функции на отрезке. | + | '''Троичный поиск''' (или ''тернарный поиск'') {{---}} метод поиска минимума или максимума функции на отрезке. |
Рассмотрим этот алгоритм на примере поиска минимума (поиск максимума аналогичен). | Рассмотрим этот алгоритм на примере поиска минимума (поиск максимума аналогичен). | ||
| − | Пусть функция <tex>f(x)</tex> на отрезке <tex>[ | + | Пусть функция <tex>f(x)</tex> на отрезке <tex>[l, r]</tex> имеет минимум, и мы хотим найти точку <tex>x_{min}</tex>, в которой он достигается. |
| − | Посчитаем значения функции в точках <tex> | + | Посчитаем значения функции в точках <tex> a = l + \frac{(r-l)}{3} </tex> и <tex> b = l + \frac{2(r-l)}{3} </tex>. Так как в точке <tex>x_{min}</tex> минимум, то на отрезке <tex>[l, x_{min}]</tex> функция убывает, а на <tex>[x_{min}, r]</tex> {{---}} возрастает, то есть |
| − | <tex> \forall x', x'' \in [ | + | <tex> \forall x', x'' \in [l, r]: \\ |
| − | + | l < x' < x'' < x_{min} \Rightarrow f(l) > f(x') > f(x'') > f(x_{min}) \\ | |
| − | x_{min} < x' < x'' < | + | x_{min} < x' < x'' < r \Rightarrow f(x_{min}) < f(x') < f(x'') < f(r) </tex>. |
| − | Значит если <tex>f( | + | Значит если <tex>f(a) < f(b)</tex>, то <tex>x_{min} \in [l, b]</tex>, |
| + | аналогично из <tex>f(a) > f(b)</tex> следует <tex> x_{min} \in [a, g]</tex>. | ||
| + | Тогда нам нужно изменить границы поиска и искать дальше, | ||
| + | пока не будет достигнута необходимая точность, то есть <tex> r-l < \varepsilon </tex>. | ||
| + | |||
| + | Псевдокод: | ||
| + | |||
| + | 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 | ||
Версия 16:40, 15 июня 2011
Эта статья находится в разработке!
Троичный поиск (или тернарный поиск) — метод поиска минимума или максимума функции на отрезке.
Рассмотрим этот алгоритм на примере поиска минимума (поиск максимума аналогичен).
Пусть функция на отрезке имеет минимум, и мы хотим найти точку , в которой он достигается.
Посчитаем значения функции в точках и . Так как в точке минимум, то на отрезке функция убывает, а на — возрастает, то есть .
Значит если , то , аналогично из следует . Тогда нам нужно изменить границы поиска и искать дальше, пока не будет достигнута необходимая точность, то есть .
Псевдокод:
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