stringtranslate.com

Búsqueda ternaria

Un algoritmo de búsqueda ternaria [1] es una técnica en informática para encontrar el mínimo o máximo de una función unimodal .

La función

Supongamos que buscamos un máximo de y que sabemos que el máximo se encuentra en algún punto entre y . Para que el algoritmo sea aplicable, debe haber algún valor tal que

Algoritmo

Sea una función unimodal en un intervalo . Tome dos puntos cualesquiera y en este segmento: . Entonces hay tres posibilidades:

puntos de elección y :

Orden de tiempo de ejecución

Algoritmo recursivo

def  ternary_search ( f ,  left ,  right ,  absolute_precision )  ->  float : """Izquierda y derecha son los límites actuales;  el máximo está entre ellos.  """ if abs ( right - left ) < absolute_precision : return ( left + right ) / 2              tercio_izquierdo  =  ( 2 * izquierda  +  derecha )  /  3  tercio_derecho  =  ( izquierda  +  2 * derecha )  /  3 si  f ( tercio_izquierdo )  <  f ( tercio_derecho ):  devuelve  búsqueda_ternaria ( f ,  tercio_izquierdo ,  derecho ,  precisión_absoluta )  de lo contrario :  devuelve  búsqueda_ternaria ( f ,  tercio_izquierdo ,  derecho ,  precisión_absoluta )

Algoritmo iterativo

def  ternary_search ( f ,  left ,  right ,  absolute_precision )  ->  float : """Encuentre el máximo de la función unimodal f() dentro de [left, right].  Para encontrar el mínimo, invierta la declaración if/else o invierta la comparación.  """ while abs ( right - left ) >= absolute_precision : left_third = left + ( right - left ) / 3 right_third = right - ( right - left ) / 3                          si  f ( tercio_izquierdo )  <  f ( tercio_derecho ):  izquierda  =  tercio_izquierdo  de lo contrario :  derecha  =  tercio_derecho # Izquierda y derecha son los límites actuales; el máximo está entre ellos  return  ( izquierda  +  derecha )  /  2

Véase también

Referencias

  1. ^ "Búsqueda ternaria". cp-algorithms.com . Consultado el 21 de agosto de 2023 .