User:Kevin65751/sandbox

Un algoritmo de Búsqueda Ternaria es una técnica en ciencias de la computación para hallar los extremos de una función (máximo o mínimo) de una función unimodal. Una búsqueda ternaria determina que el extremo que se busca, no puede estar en el primer tercio del dominio o que no puede estar en el último tercio del dominio, luego se repite el proceso en los dos tercios restantes. Una búsqueda ternaria es un ejemplo de un Algoritmo divide y vencerás (ver Algoritmo de búsqueda).

Función
Supongamos que estamos buscando un máximo de f(x) y sabemos que el máximo se encuentra en algún lugar entre A y B. Para que el algoritmo sea aplicable debe haber un valor x tal que
 * para todo a,b con A ≤ a &lt; b ≤ x, tenemos que f(a) &lt; f(b), y
 * para todo a,b con x ≤ a &lt; b ≤ B, tenemos que f(a) &gt; f(b).

Algoritmo
Sea $f(x)$ una función unimodal en el intervalo [l; r]. Tomamos dos puntos $m_{1}$ y $m_{2}$ en este segmento: $l < m_{1} < m_{2} < r$. Entonces, hay tres posibilidades: Puntos de partición $f(m_{1}) < f(m_{2})$ y $[l; m_{1}]$:
 * Si $[m_{1};r]$, entonces el máximo requerido no puede ubicarse en el lado izquierdo - $f(m_{1}) > f(m_{2})$. Esto significa que el máximo debe buscarse en el intervalo $[m_{2}; r]$
 * Si $[l; m_{2}]$, de manera similar al anterior caso. Ahora, el máximo requerido no puede estar en el lado derecho - $f(m_{1}) = f(m_{2})$, así que debe buscarse en el segmento $[m_{1}; m_{2}]$
 * Si $m_{1}$, entonces la búsqueda debe realizarse en $m_{2}$, pero este caso se puede atribuir a cualquiera de los dos anteriores (para simplificar el código). Tarde o temprano, la longitud del segmento será un poco menor que una constante predeterminada, y el proceso podrá detenerse.


 * Tiempo de ejecución
 * $$T(n) = T(2n/3) + 1

= \Theta(\log n)$$

Algoritmo Recursivo
en lenguaje Python:

en lenguaje C:

Algoritmo Iterativo
en lenguaje Python:

en lenguaje C:

Ver también

 * Newton's method in optimization (can be used to search for where the derivative is zero)
 * Golden-section search (similar to ternary search, useful if evaluating f takes most of the time per iteration)
 * Binary search algorithm (can be used to search for where the derivative changes in sign)
 * Interpolation search
 * Exponential search
 * Linear search

Referencias
Category:Search algorithms Category:Mathematical optimization