stringtranslate.com

Троичный поиск

Тернарный алгоритм поиска [1] — это метод в информатике для нахождения минимума или максимума унимодальной функции .

Функция

Предположим, что мы ищем максимум и знаем, что максимум лежит где-то между и . Для того, чтобы алгоритм был применим, должно быть некоторое значение , такое что

Алгоритм

Пусть будет унимодальной функцией на некотором интервале . Возьмем любые две точки и на этом отрезке: . Тогда есть три возможности:

Точки выбора и :

Порядок выполнения во времени

Рекурсивный алгоритм

def  ternary_search ( f ,  left ,  right ,  absolute_precision )  ->  float : """Слева и справа — текущие границы;  максимум находится между ними.  """ if abs ( right - left ) < absolute_precision : return ( left + right ) / 2              левая_третья  =  ( 2 * левая  +  правая )  /  3  правая_третья  =  ( левая  +  2 * правая )  /  3 если  f ( left_third )  <  f ( right_third ):  вернуть  ternary_search ( f ,  left_third ,  right ,  absolute_precision )  иначе :  вернуть  ternary_search ( f ,  left ,  right_third ,  absolute_precision )

Итеративный алгоритм

def  ternary_search ( f ,  left ,  right ,  absolute_precision )  ->  float : """Найти максимум унимодальной функции f() в пределах [left, right].  Чтобы найти минимум, поменяйте местами оператор if/else или сравнение.  """ while abs ( right - left ) >= absolute_precision : left_third = left + ( right - left ) / 3 right_third = right - ( right - left ) / 3                          если  f ( левая_третья )  <  f ( правая_третья ):  левая  =  левая_третья  иначе :  правая  =  правая_третья # Слева и справа — текущие границы; максимум между ними  return  ( слева  +  справа )  /  2

Смотрите также

Ссылки

  1. ^ "Тернарный поиск". cp-algorithms.com . Получено 21 августа 2023 г. .