En ciencias de la computación , un algoritmo de selección es un algoritmo para encontrar elel valor más pequeño en una colección de valores ordenables, como números. El valor que encuentra se llamaestadística de orden n . La selección incluye como casos especiales los problemas de encontrar el elemento mínimo , la mediana y el máximo en la colección. Los algoritmos de selección incluyen quickselect y el algoritmo de la mediana de medianas . Cuando se aplica a una colección devalores, estos algoritmos toman tiempo lineal ,como se expresa utilizando la notación Big O. Para datos que ya están estructurados, es posible que existan algoritmos más rápidos; como caso extremo, la selección en un arreglo ya ordenado lleva tiempo..
Planteamiento del problema
Un algoritmo para el problema de selección toma como entrada una colección de valores y un número. Genera elel menor de estos valores, o, en algunas versiones del problema, una colección de losvalores más pequeños. Para que esto esté bien definido, debería ser posible ordenar los valores de menor a mayor; por ejemplo, pueden ser enteros , números de coma flotante o algún otro tipo de objeto con una clave numérica. Sin embargo, no se asume que ya estén ordenados. A menudo, los algoritmos de selección se limitan a un modelo de computación basado en comparaciones , como en los algoritmos de ordenación por comparación , donde el algoritmo tiene acceso a una operación de comparación que puede determinar el orden relativo de dos valores cualesquiera, pero no puede realizar ningún otro tipo de operaciones aritméticas sobre estos valores. [ 1 ]
Para simplificar el problema, algunos trabajos sobre este tema asumen que los valores son todos distintos entre sí, [ 2 ] o que se ha utilizado algún método de desempate consistente para asignar un orden a pares de elementos con el mismo valor. Otra variación en la definición del problema se refiere a la numeración de los valores ordenados: es el valor más pequeño obtenido al establecer, como en la numeración de matrices basada en cero , o se obtiene estableciendo¿ Siguiendo las convenciones habituales del idioma inglés para el más pequeño, el segundo más pequeño, etc.? Este artículo sigue las convenciones utilizadas por Cormen et al., según las cuales todos los valores son distintos y el valor mínimo se obtiene de. [ 2 ]
Con estas convenciones, el valor máximo, entre una colección devalores, se obtiene al configurar. Cuandoes un número impar , la mediana de la colección se obtiene estableciendo. Cuandoes par, hay dos opciones para la mediana, obtenidas redondeando esta elección dehacia abajo o hacia arriba, respectivamente: la mediana inferior cony la mediana superior con. [ 2 ]
Algoritmos
Ordenación y selección de montículos
Como algoritmo de referencia, la selección de laEl valor más pequeño en una colección de valores se puede obtener mediante los siguientes dos pasos:
- Ordenar la colección
- Si la salida del algoritmo de ordenación es una matriz , recupere suel enésimo elemento; de lo contrario, recorra la secuencia ordenada para encontrar elelemento th .
El tiempo para este método está dominado por el paso de clasificación, que requieretiempo usando una ordenación por comparación . [ 2 ] [ 3 ] Incluso cuando se pueden usar algoritmos de ordenación de enteros , estos son generalmente más lentos que el tiempo lineal que se puede lograr usando algoritmos de selección especializados. Sin embargo, la simplicidad de este enfoque lo hace atractivo, especialmente cuando se proporciona una rutina de ordenación altamente optimizada como parte de una biblioteca de tiempo de ejecución, pero no un algoritmo de selección. Para entradas de tamaño moderado, la ordenación puede ser más rápida que los algoritmos de selección no aleatorios, debido a los factores constantes más pequeños en su tiempo de ejecución. [ 4 ] Este método también produce una versión ordenada de la colección, que puede ser útil para otros cálculos posteriores, y en particular para la selección con otras opciones de. [ 3 ]
Para un algoritmo de ordenación que genera un elemento a la vez, como la ordenación por selección , el escaneo se puede realizar en tándem con la ordenación, y la ordenación se puede terminar una vez queSe ha encontrado el elemento n. Un posible diseño de un cuadro de consolación en un torneo de eliminación simple , en el que los equipos que perdieron contra el eventual ganador juegan otro minitorneo para determinar el segundo lugar, puede verse como un ejemplo de este método. [ 5 ] La aplicación de esta optimización a heapsort produce el algoritmo heapselect , que puede seleccionar elel valor más pequeño en el tiempo. [ 6 ] Esto es rápido cuandoes pequeño en relación conpero degenera enpara valores mayores de, como la elecciónutilizado para el cálculo de la mediana.
Pivote
Muchos métodos de selección se basan en elegir un elemento "pivote" especial de la entrada y utilizar comparaciones con este elemento para dividir el resto.valores de entrada en dos subconjuntos: el conjuntode elementos menores que el pivote y el conjuntode elementos mayores que el pivote. El algoritmo puede entonces determinar dóndeSe debe encontrar el valor más pequeño, basándose en una comparación decon los tamaños de estos conjuntos. En particular, si, elEl valor más pequeño está eny se puede encontrar recursivamente aplicando el mismo algoritmo de selección a. Si, entonces elEl valor más pequeño es el pivote y se puede devolver inmediatamente. En el caso restante, elEl valor más pequeño está eny más específicamente es el elemento en posicióndeSe puede encontrar aplicando un algoritmo de selección recursivamente, buscando el valor en esta posición en. [ 7 ]
Al igual que con el algoritmo quicksort basado en pivoteo relacionado , la partición de la entrada enypuede hacerse creando nuevas colecciones para estos conjuntos, o mediante un método que particione un tipo de datos de lista o matriz dado in situ. Los detalles varían según cómo se represente la colección de entrada. [ 8 ] El tiempo para comparar el pivote con todos los demás valores es[ 7 ] Sin embargo , los métodos de pivoteo difieren en cómo eligen el pivote, lo que afecta el tamaño de los subproblemas en cada llamada recursiva. La eficiencia de estos métodos depende en gran medida de la elección del pivote. Si el pivote se elige mal, el tiempo de ejecución de este método puede ser tan lento como. [ 4 ]
- Si el punto de pivote estuviera exactamente en la mediana de la entrada, entonces cada llamada recursiva tendría como máximo la mitad de valores que la llamada anterior, y los tiempos totales se sumarían en una serie geométrica aSin embargo , encontrar la mediana es en sí mismo un problema de selección sobre la totalidad de la entrada original. Intentar encontrarla mediante una llamada recursiva a un algoritmo de selección conduciría a una recursión infinita, ya que el tamaño del problema no disminuiría en cada llamada. [ 7 ]
- Quickselect elige el pivote de forma uniforme y aleatoria a partir de los valores de entrada. Se puede describir como un algoritmo de poda y búsqueda , [ 9 ] una variante de quicksort , con la misma estrategia de pivoteo, pero donde quicksort realiza dos llamadas recursivas para ordenar las dos subcolecciones.y, quickselect solo realiza una de estas dos llamadas. Su tiempo previsto es. [ 2 ] [ 7 ] [ 9 ] Para cualquier constante, la probabilidad de que su número de comparaciones superees superexponencialmente pequeño en. [ 10 ]
- El algoritmo Floyd-Rivest , una variación de quickselect, elige un pivote mediante el muestreo aleatorio de un subconjunto devalores de datos, para algún tamaño de muestray luego seleccionando recursivamente dos elementos ligeramente por encima y por debajo de la posiciónde la muestra para usar como pivotes. Con esta elección, es probable queestá intercalado entre los dos pivotes, de modo que después de pivotar solo queda una pequeña cantidad de valores de datos entre los pivotes para una llamada recursiva. Este método puede lograr una cantidad esperada de comparaciones que es. [ 11 ] En su trabajo original, Floyd y Rivest afirmaron que elEl plazo podría hacerse tan pequeño comomediante un esquema de muestreo recursivo, pero se ha cuestionado la corrección de su análisis. [ 12 ] [ 13 ] En cambio, un análisis más riguroso ha demostrado que una versión de su algoritmo lograpara este término. [ 14 ] Aunque el análisis habitual tanto de quickselect como del algoritmo de Floyd-Rivest asume el uso de un generador de números aleatorios verdaderos , se ha demostrado que una versión del algoritmo de Floyd-Rivest que utiliza un generador de números pseudoaleatorios inicializado con solo una cantidad logarítmica de bits aleatorios verdaderos se ejecuta en tiempo lineal con alta probabilidad. [ 15 ]

- El método de la mediana de medianas divide la entrada en conjuntos de cinco elementos y utiliza algún otro método no recursivo para encontrar la mediana de cada uno de estos conjuntos en tiempo constante por conjunto. Luego se llama a sí mismo recursivamente para encontrar la mediana de estosmedianas. Usando la mediana resultante de las medianas como pivote se obtiene una partición conPor lo tanto , un problema enelementos se reduce a dos problemas recursivos enelementos (para encontrar el pivote) y como máximoelementos (después de usar el pivote). El tamaño total de estos dos subproblemas recursivos es como máximo, lo que permite analizar el tiempo total como una serie geométrica que se suma aA diferencia de quickselect , este algoritmo es determinista, no aleatorio. [ 2 ] [ 4 ] [ 5 ] Fue el primer algoritmo de selección determinista de tiempo lineal conocido, [ 5 ] y se enseña comúnmente en clases de algoritmos de pregrado como un ejemplo de divide y vencerás que no se divide en dos subproblemas iguales. [ 2 ] [ 4 ] [ 9 ] [ 16 ] Sin embargo, los altos factores constantes en suLas limitaciones de tiempo hacen que sea más lento que quickselect en la práctica, [ 3 ] [ 9 ] e incluso más lento que la ordenación para entradas de tamaño moderado. [ 4 ]
- Los algoritmos híbridos como introselect pueden utilizarse para lograr el rendimiento práctico de quickselect con una alternativa a las medianas de las medianas que garantiza el peor caso.tiempo. [ 17 ]
Fábricas
Los algoritmos de selección deterministas con el menor número conocido de comparaciones, para valores deque están lejos deo, se basan en el concepto de fábricas , introducido en 1976 por Arnold Schönhage , Mike Paterson y Nick Pippenger . [ 18 ] Estos son métodos que construyen órdenes parciales de ciertos tipos especificados, en pequeños subconjuntos de valores de entrada, utilizando comparaciones para combinar órdenes parciales más pequeños. Como un ejemplo muy simple, un tipo de fábrica puede tomar como entrada una secuencia de órdenes parciales de un solo elemento, comparar pares de elementos de estos órdenes y producir como salida una secuencia de conjuntos totalmente ordenados de dos elementos. Los elementos utilizados como entradas para esta fábrica podrían ser valores de entrada que aún no se han comparado con nada, o valores "desperdiciados" producidos por otras fábricas. El objetivo de un algoritmo basado en fábricas es combinar diferentes fábricas, con las salidas de algunas fábricas yendo a las entradas de otras, para eventualmente obtener un orden parcial en el que un elemento (elel más pequeño) es más grande que algunosotros elementos y más pequeños que otrootros. Un diseño cuidadoso de estas fábricas conduce a un algoritmo que, cuando se aplica a la búsqueda de la mediana, utiliza como máximocomparaciones. Para otros valores de, el número de comparaciones es menor. [ 19 ]
Algoritmos paralelos
Los algoritmos paralelos para la selección se han estudiado desde 1975, cuando Leslie Valiant introdujo el modelo de árbol de comparación paralela para analizar estos algoritmos, y demostró que en este modelo la selección utilizando un número lineal de comparaciones requierepasos paralelos, incluso para seleccionar el mínimo o el máximo. [ 20 ] Posteriormente, los investigadores encontraron algoritmos paralelos para la selección enpasos, que coinciden con este límite. [ 21 ] [ 22 ] En un modelo de árbol de comparación paralelo aleatorio es posible realizar la selección en un número limitado de pasos y un número lineal de comparaciones. [ 23 ] En el modelo de RAM paralelo más realista de computación, con acceso a memoria de lectura exclusiva y escritura exclusiva, la selección se puede realizar en tiempoconprocesadores, lo cual es óptimo tanto en tiempo como en número de procesadores. [ 24 ] Con acceso concurrente a memoria, en general es posible un tiempo paralelo ligeramente más rápido , [ 25 ] y elEl término en el límite de tiempo puede ser reemplazado por. [ 26 ]
Estructuras de datos sublineales
Cuando los datos ya están organizados en una estructura de datos , es posible realizar una selección en un tiempo sublineal con respecto al número de valores. Como un caso simple de esto, para datos ya ordenados en una matriz, seleccionar elEl elemento n se puede obtener mediante una única búsqueda en la matriz, en tiempo constante. [ 27 ] Para valores organizados en una matriz bidimensional de tamañoCon filas y columnas ordenadas , la selección se puede realizar en el tiempoo más rápido cuandoes pequeño en relación con las dimensiones de la matriz. [ 27 ] [ 28 ] Para una colección dematrices ordenadas unidimensionales, conartículos menores que el artículo seleccionado en elmatriz , el tiempo es. [ 28 ]
La selección de datos en un montón binario lleva tiempo.Esto es independiente del tamaño .del montón, y más rápido que ellímite de tiempo que se obtendría de la búsqueda primero en amplitud . [ 28 ] [ 29 ] Este mismo método se puede aplicar de forma más general a datos organizados como cualquier tipo de árbol ordenado por montículo (un árbol en el que cada nodo almacena un valor en el que el padre de cada nodo que no es la raíz tiene un valor menor que su hijo). Este método de realizar selección en un montículo se ha aplicado a problemas de enumerar múltiples soluciones a problemas de optimización combinatoria , como encontrar los k caminos más cortos en un grafo ponderado, definiendo un espacio de estados de soluciones en forma de un árbol ordenado por montículo definido implícitamente , y luego aplicando este algoritmo de selección a este árbol. [ 30 ] En la otra dirección, se han utilizado algoritmos de selección de tiempo lineal como una subrutina en una estructura de datos de cola de prioridad relacionada con el montículo, mejorando el tiempo para extraer suartículo dea; aquíes el logaritmo iterado . [ 31 ]
Para una colección de valores de datos que experimentan inserciones y eliminaciones dinámicas, el árbol de estadísticas de orden aumenta una estructura de árbol de búsqueda binaria autoequilibrada con una cantidad constante de información adicional por nodo del árbol, lo que permite inserciones, eliminaciones y consultas de selección que solicitan lael elemento en el conjunto actual se realizará entiempo por operación. [ 2 ] Más allá del modelo de comparación de computación, son posibles tiempos más rápidos por operación para valores que son enteros pequeños, en los que se permiten operaciones aritméticas binarias. [ 32 ] No es posible para un algoritmo de transmisión con memoria sublineal en ambosypara resolver consultas de selección exactamente para datos dinámicos, pero el método count-min se puede utilizar para resolver consultas de selección aproximadamente, al encontrar un valor cuya posición en el orden de los elementos (si se añadiera a ellos) estaría dentro depasos de, para un boceto cuyo tamaño está dentro de factores logarítmicos de. [ 33 ]
límites inferiores
ElEl tiempo de ejecución de los algoritmos de selección descritos anteriormente es necesario, ya que un algoritmo de selección que puede procesar entradas en un orden arbitrario debe tomar ese tiempo para examinar todas sus entradas. Si alguno de sus valores de entrada no se compara, ese valor podría ser el que debería haberse seleccionado, y el algoritmo podría generar una respuesta incorrecta. [ 28 ] Más allá de este argumento simple, se ha realizado una cantidad significativa de investigación sobre el número exacto de comparaciones necesarias para la selección, tanto en los casos aleatorios como deterministas.
Seleccionar el mínimo deLos valores requierencomparaciones, porque laLos valores que no se seleccionan deben haber sido determinados como no mínimos, al ser los mayores en alguna comparación, y ningún par de estos valores puede ser el mayor en la misma comparación. El mismo argumento se aplica simétricamente a la selección del máximo. [ 14 ]
El siguiente caso más simple es seleccionar el segundo más pequeño. Después de varios intentos incorrectos, el primer límite inferior ajustado para este caso fue publicado en 1964 por el matemático soviético Sergey Kislitsyn . Se puede demostrar observando que seleccionar el segundo más pequeño también requiere distinguir el valor más pequeño del resto, y considerando el númerode comparaciones que involucran el valor más pequeño que produce un algoritmo para este problema. Cada una de lasLos elementos que se compararon con el valor más pequeño son candidatos para el segundo más pequeño, yDe estos valores, debe encontrarse uno mayor que otro valor en una segunda comparación para poder descartarlos como segundos más pequeños.valores siendo mayores en al menos una comparación, yLos valores son mayores en al menos dos comparaciones, hay un total de al menoscomparaciones. Un argumento adversario , en el que el resultado de cada comparación se elige para maximizar(sujeto a la coherencia con al menos un ordenamiento posible) en lugar de por los valores numéricos de los elementos dados, muestra que es posible forzar to be at least . Therefore, the worst-case number of comparisons needed to select the second smallest is , the same number that would be obtained by holding a single-elimination tournament with a run-off tournament among the values that lost to the smallest value. However, the expected number of comparisons of a randomized selection algorithm can be better than this bound; for instance, selecting the second-smallest of six elements requires seven comparisons in the worst case, but may be done by a randomized algorithm with an expected number of 6.5 comparisons.[14]
More generally, selecting the th element out of requires at least comparisons, in the average case, matching the number of comparisons of the Floyd–Rivest algorithm up to its term. The argument is made directly for deterministic algorithms, with a number of comparisons that is averaged over all possible permutations of the input values.[1] By Yao's principle, it also applies to the expected number of comparisons for a randomized algorithm on its worst-case input.[34]
For deterministic algorithms, it has been shown that selecting the th element requires comparisons, where is the binary entropy function.[35] The special case of median-finding has a slightly larger lower bound on the number of comparisons, at least , for .[36]
Exact numbers of comparisons

Knuth supplies the following triangle of numbers summarizing pairs of and for which the exact number of comparisons needed by an optimal selection algorithm is known. The th row of the triangle (starting with in the top row) gives the numbers of comparisons for inputs of values, and the th number within each row gives the number of comparisons needed to select the th smallest value from an input of that size. The rows are symmetric because selecting the th smallest requires exactly the same number of comparisons, in the worst case, as selecting the el más grande. [ 14 ]
La mayoría, pero no todas, las entradas de la mitad izquierda de cada fila se pueden encontrar utilizando la fórmulaEsto describe el número de comparaciones realizadas por un método de Abdollah Hadian y Milton Sobel , relacionado con heapselect, que encuentra el valor más pequeño utilizando un torneo de eliminación simple y luego utiliza repetidamente un torneo más pequeño entre los valores eliminados por los eventuales ganadores del torneo para encontrar los siguientes valores sucesivos hasta llegar alel más pequeño. [ 14 ] [ 37 ] Se demostró que algunas de las entradas más grandes eran óptimas mediante una búsqueda por computadora. [ 14 ] [ 38 ]
Soporte de idiomas
Muy pocos lenguajes tienen soporte integrado para la selección general, aunque muchos proporcionan herramientas para encontrar el elemento más pequeño o más grande de una lista. Excepciones notables son las bibliotecas estándar de C++ y Rust . La biblioteca de plantillas estándar de C++ proporciona un nth_elementmétodo con plantilla que garantiza un tiempo lineal esperado. [ 3 ] La biblioteca estándar de Rust proporciona múltiples variantes de la select_nth_unstablefunción miembro para el slicetipo de datos. Todas estas variantes tienen un tiempo de ejecución lineal garantizado para todas las entradas. [ 39 ]
La biblioteca estándar de Pythonheapq.nsmallest incluye funciones heapq.nlargestpara devolver los elementos más pequeños o más grandes de una colección, en orden ordenado. La implementación mantiene un montón binario , limitado a almacenarelementos, e inicializado al primeroelementos en la colección. Luego, cada elemento subsiguiente de la colección puede reemplazar el elemento más grande o más pequeño en el montón si es menor o mayor que este elemento. El uso de memoria del algoritmo es superior a heapselect (el primero solo contieneelementos en memoria a la vez, mientras que el segundo requiere manipular todo el conjunto de datos en memoria). El tiempo de ejecución depende del orden de los datos. El mejor caso espara datos ya ordenados. El peor caso espara datos ordenados en orden inverso. En promedio, es probable que haya pocas actualizaciones de la pila y la mayoría de los elementos de entrada se procesan con una sola comparación. Por ejemplo, extraer los 100 valores más grandes o más pequeños de 10 000 000 de entradas aleatorias genera, en promedio, 10 009 401 comparaciones. [ 40 ]
Desde 2017, Matlab ha incluido maxk()funciones mink()que devuelven el máximo (mínimo)valores en un vector así como sus índices. La documentación de Matlab no especifica qué algoritmo usan estas funciones ni cuál es su tiempo de ejecución. [ 41 ]
Historia
Quickselect fue presentado sin análisis por Tony Hoare en 1965, [ 42 ] y analizado por primera vez en un informe técnico de 1971 por Donald Knuth . [ 11 ] El primer algoritmo de selección determinista de tiempo lineal conocido es el método de la mediana de medianas , publicado en 1973 por Manuel Blum , Robert W. Floyd , Vaughan Pratt , Ron Rivest y Robert Tarjan . [ 5 ] Ellos rastrean la formulación del problema de selección hasta el trabajo de Charles L. Dodgson (más conocido como Lewis Carroll ) quien en 1883 señaló que el diseño habitual de los torneos deportivos de eliminación simple no garantiza que el segundo mejor jugador gane el segundo lugar, [ 5 ] [ 43 ] y hasta el trabajo de Hugo Steinhaus alrededor de 1930, quien siguió esta misma línea de pensamiento al pedir un diseño de torneo que pueda hacer esta garantía, con un número mínimo de juegos jugados (es decir, comparaciones). [ 5 ]
Véase también
- Mediana geométrica § Cálculo , algoritmos para generalizaciones de medianas en dimensiones superiores
- Filtro de mediana , aplicación de algoritmos de búsqueda de medianas en el procesamiento de imágenes.
Referencias
- 1 2 Cunto, Walter; Munro, J. Ian (1989). "Selección de casos promedio" . Journal of the ACM . 36 (2): 270– 279. doi : 10.1145/62044.62047 . MR 1072421. S2CID 10947879 .
- 1 2 3 4 5 6 7 8 Cormen, Thomas H. ; Leiserson, Charles E. ; Rivest, Ronald L. ; Stein, Clifford (2009) [1990]. «Capítulo 9: Medianas y estadísticas de orden». Introducción a los algoritmos (3.ª ed.). MIT Press y McGraw-Hill. págs. 213–227 . ISBN 0-262-03384-4.; "Sección 14.1: Estadísticas de orden dinámico", págs. 339–345
- 1 2 3 4 Skiena, Steven S. (2020). "17.3: Mediana y selección". The Algorithm Design Manual . Textos en Ciencias de la Computación (Tercera ed.). Springer. págs. 514–516 . doi : 10.1007/978-3-030-54256-6 . ISBN 978-3-030-54255-9. MR 4241430 . S2CID 22382667 .
- 1 2 3 4 5 Erickson, Jeff (junio de 2019). "1.8: Selección en tiempo lineal". Algoritmos . págs. 35–39 .
- 1 2 3 4 5 6 Blum, Manuel ; Floyd, Robert W .; Pratt, Vaughan ; Rivest, Ronald L.; Tarjan , Robert E. (1973). "Límites de tiempo para la selección" (PDF) . Journal of Computer and System Sciences . 7 (4): 448– 461. doi : 10.1016/S0022-0000(73)80033-9 . MR 0329916 .
- ↑ Brodal, Gerth Stølting (2013). "Una revisión sobre colas de prioridad". En Brodnik, Andrej; López-Ortiz, Alejandro; Raman, Venkatesh; Viola, Alfredo (eds.). Estructuras de datos, flujos y algoritmos eficientes en espacio: artículos en honor a J. Ian Munro con motivo de su 66.º cumpleaños . Lecture Notes in Computer Science. Vol. 8066. Springer. pp. 150–163 . doi : 10.1007/978-3-642-40273-9_11 . ISBN 978-3-642-40272-2.
- 1 2 3 4 Kleinberg, Jon ; Tardos, Éva (2006). "13.5 Divide y vencerás aleatorizado: búsqueda de la mediana y ordenación rápida". Diseño de algoritmos . Addison-Wesley. págs. 727–734 . ISBN 9780321295354.
- ↑ Por ejemplo, Cormen et al. utilizan una partición de matriz in situ, mientras que Kleinberg y Tardos describen la entrada como un conjunto y utilizan un método que la divide en dos nuevos conjuntos.
- 1 2 3 4 Goodrich, Michael T. ; Tamassia, Roberto (2015). "9.2: Selección". Diseño y aplicaciones de algoritmos . Wiley. págs. 270–275 . ISBN 978-1-118-33591-8.
- ↑ Devroye, Luc (1984). "Límites exponenciales para el tiempo de ejecución de un algoritmo de selección" (PDF) . Journal of Computer and System Sciences . 29 (1): 1– 7. doi : 10.1016/0022-0000(84)90009-6 . MR 0761047 . Devroye, Luc (2001). "Sobre el tiempo probabilístico del peor caso de 'encontrar'" (PDF) . Algorithmica . 31 (3): 291– 303. doi : 10.1007/s00453-001-0046-2 . MR 1855252 . S2CID 674040 .
- 1 2 Floyd, Robert W. ; Rivest, Ronald L. (marzo de 1975). "Límites de tiempo esperados para la selección" . Communications of the ACM . 18 (3): 165– 172. doi : 10.1145/360680.360691 . S2CID 3064709 . Véase también "Algoritmo 489: el algoritmo SELECT—para encontrar elel más pequeño deelementos", pág. 173, doi : 10.1145/360680.360694 .
- ↑ Brown, Theodore (septiembre de 1976). "Comentario sobre el algoritmo 489". ACM Transactions on Mathematical Software . 2 (3): 301– 304. doi : 10.1145/355694.355704 . S2CID 13985011 .
- ↑ Postmus, JT; Rinnooy Kan, AHG ; Timmer, GT (1983). "Un método de selección dinámica eficiente" . Communications of the ACM . 26 (11): 878– 881. doi : 10.1145/182.358440 . MR 0784120. S2CID 3211474 .
- 1 2 3 4 5 6 Knuth, Donald E. (1998). «Sección 5.3.3: Selección por comparación mínima». El arte de la programación informática, volumen 3: Ordenación y búsqueda (2.ª ed.). Addison-Wesley. págs. 207–219 . ISBN 0-201-89685-0.
- ↑ Karloff, Howard J.; Raghavan, Prabhakar (1993). " Algoritmos aleatorios y números pseudoaleatorios" . Journal of the ACM . 40 (3): 454– 476. doi : 10.1145/174130.174132 . MR 1370358. S2CID 17956460 .
- ↑ Gurwitz, Chaya (1992). "Sobre la enseñanza de algoritmos para encontrar la mediana". IEEE Transactions on Education . 35 (3): 230– 232. Bibcode : 1992ITEdu..35..230G . doi : 10.1109/13.144650 .
- ↑ Musser, David R. (agosto de 1997). "Algoritmos de clasificación y selección introspectivos". Software: Practice and Experience . 27 (8). Wiley: 983– 993. doi : 10.1002/(sici)1097-024x(199708)27:8 < 983::aid-spe117 > 3.0.co ; 2-# .
- ↑ Schönhage, A. ; Paterson, M. ; Pippenger, N. (1976). "Finding the mediana". Journal of Computer and System Sciences . 13 (2): 184– 199. doi : 10.1016/S0022-0000(76)80029-3 . MR 0428794 . S2CID 29867292 .
- ↑ Dor, Dorit ; Zwick, Uri (1999). "Selección de la mediana". SIAM Journal on Computing . 28 (5): 1722– 1758. doi : 10.1137/S0097539795288611 . MR 1694164. S2CID 2633282 .
- ↑ Valiant, Leslie G. (1975). "Paralelismo en problemas de comparación". SIAM Journal on Computing . 4 (3): 348– 355. doi : 10.1137/0204030 . MR 0378467 .
- ↑ Ajtai, Miklós ; Komlós, János ; Steiger, WL; Szemerédi, Endre (1989). "La selección paralela óptima tiene complejidad". Revista de Ciencias de la Computación y de Sistemas . 38 (1): 125– 133. doi : 10.1016/0022-0000(89)90035-4 . MR 0990052 .
- ↑ Azar, Yossi; Pippenger, Nicholas (1990). "Selección paralela". Matemáticas Aplicadas Discretas . 27 ( 1– 2): 49– 58. doi : 10.1016/0166-218X(90)90128-Y . MR 1055590 .
- ↑ Reischuk, Rüdiger (1985). "Algoritmos paralelos probabilísticos para ordenación y selección". SIAM Journal on Computing . 14 (2): 396– 409. doi : 10.1137/0214030 . MR 0784745 .
- ↑ Han, Yijie (2007). "Selección paralela óptima". ACM Transactions on Algorithms . 3 (4): A38:1–A38:11. doi : 10.1145 /1290672.1290675 . MR 2364962. S2CID 9645870 .
- ↑ Chaudhuri, Shiva; Hagerup, Torben; Raman, Rajeev (1993). "Selección paralela determinista aproximada y exacta". En Borzyszkowski, Andrzej M.; Sokolowski, Stefan (eds.). Fundamentos matemáticos de la informática 1993, 18.º Simposio Internacional, MFCS'93, Gdansk, Polonia, 30 de agosto - 3 de septiembre de 1993, Actas . Lecture Notes in Computer Science. Vol. 711. Springer. pp. 352–361 . doi : 10.1007/3-540-57182-5_27 . hdl : 11858/00-001M-0000-0014-B748-C . ISBN 978-3-540-57182-7.
- ↑ Dietz, Paul F.; Raman, Rajeev (1999). "Selección de rango pequeño en paralelo, con aplicaciones a la construcción de montículos". Journal of Algorithms . 30 (1): 33– 51. doi : 10.1006/jagm.1998.0971 . MR 1661179 .
- 1 2 Frederickson, Greg N.; Johnson, Donald B. (1984). "Selección y clasificación generalizadas: matrices ordenadas". SIAM Journal on Computing . 13 (1): 14– 30. doi : 10.1137/0213002 . MR 0731024 .
- 1 2 3 4 Kaplan, Haim; Kozma, László; Zamir, Or; Zwick, Uri (2019). "Selección de montones, matrices ordenadas por filas yusando montones blandos". En Fineman, Jeremy T.; Mitzenmacher, Michael (eds.). Segundo simposio sobre simplicidad en algoritmos, SOSA 2019, 8 al 9 de enero de 2019, San Diego, CA, EE. UU . . OASIcs. Vol. 69. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. págs. 5:1–5:21. arXiv : 1802.07041 doi : 10.4230 / OASIcs.SOSA.2019.5 .
- ↑ Frederickson, Greg N. (1993). "Un algoritmo óptimo para la selección en un min-heap" . Information and Computation . 104 (2): 197– 214. doi : 10.1006/inco.1993.1030 . MR 1221889 .
- ↑ Eppstein, David (1999). "Encontrar elcaminos más cortos". SIAM Journal on Computing . 28 (2): 652– 673. doi : 10.1137/S0097539795290477 . MR 1634364 .
- ↑ Babenko, Maxim; Kolesnichenko, Ignat; Smirnov, Ivan (2019). "Montículo en cascada: hacia extracciones óptimas en tiempo". Theory of Computing Systems . 63 (4): 637– 646. doi : 10.1007/s00224-018-9866-1 . MR 3942251 . S2CID 253740380 .
- ↑ Pătraşcu, Mihai ; Thorup, Mikkel (2014). "Conjuntos de enteros dinámicos con rango óptimo, selección y búsqueda de predecesores". 55.º Simposio Anual IEEE sobre Fundamentos de la Informática, FOCS 2014, Filadelfia, PA, EE. UU., 18-21 de octubre de 2014. IEEE Computer Society. págs. 166-175 . arXiv : 1408.3045 . doi : 10.1109/FOCS.2014.26 . ISBN 978-1-4799-6517-5.
- ↑ Cormode, Graham; Muthukrishnan, S. (2005). "Un resumen mejorado de flujo de datos: el esquema count-min y sus aplicaciones". Journal of Algorithms . 55 (1): 58– 75. doi : 10.1016/j.jalgor.2003.12.001 . MR 2132028 .
- ↑ Chan, Timothy M. (2010). "Límites inferiores espacio-temporales basados en comparaciones para la selección". ACM Transactions on Algorithms . 6 (2): A26:1–A26:16. doi : 10.1145 /1721837.1721842 . MR 2675693. S2CID 11742607 .
- ↑ Bent, Samuel W.; John, John W. (1985). "Encontrar la mediana requierecomparaciones". En Sedgewick, Robert (ed.). Actas del 17.º Simposio Anual de la ACM sobre Teoría de la Computación, 6-8 de mayo de 1985, Providence, Rhode Island, EE . UU . Association for Computing Machinery. págs. 213-216 . doi : 10.1145/22145.22169 . ISBN 0-89791-151-2.
- ↑ Dor, Dorit ; Zwick, Uri (2001). "La selección de la mediana requierecomparaciones". SIAM Journal on Discrete Mathematics . 14 (3): 312– 325. doi : 10.1137/S0895480199353895 . MR 1857348 .
- ^ Hadián, Abdollah; Sobel, Milton (mayo de 1969). Seleccionando el-ésimo mayor utilizando comparaciones binarias sin errores (Informe). Informes técnicos de la Escuela de Estadística. Vol. 121. Universidad de Minnesota. hdl : 11299/199105 .
- ↑ Gasarch, William ; Kelly, Wayne; Pugh, William (julio de 1996). "Encontrar elel más grande depara pequeños". ACM SIGACT News . 27 (2): 88– 96. doi : 10.1145/235767.235772 . S2CID 3133332 .
- ↑ "Segmento de tipo primitivo" . La biblioteca estándar de Rust . Consultado el 12 de octubre de 2025 .
- ↑ "Código fuente del paquete heapq" . Biblioteca de Python . Consultado el 6 de agosto de 2023 .; véase también la comparación vinculada del rendimiento del algoritmo en los datos del mejor caso .
- ↑ "mink: Encuentra los k elementos más pequeños de un array" . Documentación de Matlab R2023a . Mathworks . Consultado el 30 de marzo de 2023 .
- ↑ Hoare, CAR (julio de 1961). "Algoritmo 65: Find". Communications of the ACM . 4 (7): 321– 322. doi : 10.1145/366622.366647 .
- ↑ Dodgson, Charles L. (1883). Torneos de tenis sobre césped: El verdadero método de asignación de premios con una demostración de la falacia del método actual . Londres: Macmillan and Co.Véase también Wilson, Robin ; Moktefi, Amirouche, eds. (2019). «Torneos de tenis sobre césped» . El mundo matemático de Charles L. Dodgson (Lewis Carroll) . Oxford University Press. pág. 129. ISBN 9780192549013.
- Algoritmos de selección