Троичный поиск — различия между версиями
| Строка 55: | Строка 55: | ||
то время работы алгоритма составит | то время работы алгоритма составит | ||
<tex>2 \log_{\frac32} \left(\frac{r - l}{\varepsilon}\right)</tex> | <tex>2 \log_{\frac32} \left(\frac{r - l}{\varepsilon}\right)</tex> | ||
| + | |||
| + | == Смотрите также == | ||
| + | |||
| + | Есть оптимизация этого алгоритма, если делить отрезок не на равные части в отношении золотого сечения, {{---}} [[Поиск с помощью золотого сечения]] | ||
| + | |||
| + | [http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA Троичный поиск на Википедии] | ||
| + | |||
| + | == Литература == | ||
| + | |||
| + | Дональд Кнут Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching. | ||
Версия 17:08, 15 июня 2011
Троичный поиск (или тернарный поиск) — метод поиска минимума или максимума функции на отрезке.
Алгоритм
Рассмотрим этот алгоритм на примере поиска минимума (поиск максимума аналогичен).
Пусть функция на отрезке имеет минимум, и мы хотим найти точку , в которой он достигается.
Посчитаем значения функции в точках и .
Так как в точке минимум, то на отрезке функция убывает, а на — возрастает, то есть
.
Значит если , то , аналогично из следует . Тогда нам нужно изменить границы поиска и искать дальше, пока не будет достигнута необходимая точность, то есть .
Псевдокод
ternarySearchMin(f, 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, l, b, eps)
else
return ternarySearch(f, a, r, eps)
end
Возможен и нерекурсивный вариант:
ternarySearchMin(f, l, r, eps)
while (r - l < eps)
{
a = (left * 2 + right) / 3
b = (left + right * 2) / 3
if (f(a) < f(b))
r = b
else
l = a
}
return (left + right) / 2
end
Время работы
Так как на каждой итерации мы считаем два значения функции и уменьшаем область поиска в полтора раза, пока , то время работы алгоритма составит
Смотрите также
Есть оптимизация этого алгоритма, если делить отрезок не на равные части в отношении золотого сечения, — Поиск с помощью золотого сечения
Литература
Дональд Кнут Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching.