En ciencias de la computación , un algoritmo de selección es un algoritmo para encontrar el k-ésimo elemento más grande en una matriz (dicho elemento se denomina estadístico de k-ésimo orden ). Los casos especiales de este algoritmo son encontrar el elemento mínimo , el elemento máximo y la mediana . Hay un algoritmo que está garantizado para resolver el problema de elegir el k-ésimo elemento más grande en O( n ).
El problema de la selección puede reducirse a la clasificación . De hecho, puede ordenar una matriz y luego tomar el elemento que necesita en orden. Esto es efectivo cuando la elección debe hacerse varias veces: luego puede ordenar la matriz en O ( n log n ) y luego seleccionar elementos de ella. Sin embargo, si la elección debe hacerse una vez, este algoritmo puede ser excesivamente largo.
Obviamente, cómo encontrar el mínimo (máximo) en una matriz dada en tiempo lineal:
Existe un algoritmo para encontrar la estadística de orden k -ésimo basado en el algoritmo de clasificación rápida que se ejecuta en O( n ) en promedio.
La idea del algoritmo es que la matriz se divide en dos partes en relación con un elemento seleccionado aleatoriamente (equiprobablemente): los elementos más pequeños que el seleccionado caen en una parte, el resto en la otra (esta operación se realiza para , en al final del mismo el elemento seleccionado está en posición ). Si hay exactamente elementos en la primera parte ( ), entonces el elemento seleccionado es el deseado, si , entonces el algoritmo se ejecuta recursivamente para la primera parte de la matriz, de lo contrario, para la segunda (en el último caso, para el siguiente iteración, se resta de ). Las llamadas recursivas conducen a una disminución exponencial del tamaño de la matriz procesada con cada iteración y, por esta razón, el tiempo de ejecución del algoritmo es .
BFPRT-Algorithm le permite encontrar las estadísticas de k -ésimo orden garantizadas en O( n ). Nombrado en honor a sus inventores: Manual Blum, Robert W. Floyd, Vaughan R. Pratt , Ronald L. Rivest y Robert Endre T arjan . Se utiliza con una lista bastante larga de elementos, más de 800 elementos.
Entrada: número que representa el -ésimo elemento.
Con cada llamada recursiva , el algoritmo le permite descartar al menos una cuarta parte de todos los elementos. Esto proporciona un límite superior en el tiempo de ejecución lineal garantizado para un algoritmo determinista , ya que se expresa mediante la relación de recurrencia . En general, si los subconjuntos son de tamaño , el tiempo de ejecución se expresa como .