Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primavera 2023
Búsqueda del k-ésimo de un conjunto. Asuma un conjunto de números enteros (no hay repetidos), el k-
ésimo menor elemento del conjunto corresponde al elemento que ocupa la posición k al ordenar el conjunto en
forma ascendente (de menor a mayor). Una forma obvia de solucionar este problema es ordenar los elementos del
conjunto y retornar el elemento que est´a en la posición k. Llamamos A1 a este algoritmo. Sin embargo, esta
solución es de complejidad temporal (peor caso) O(n log2 n) y que corresponde al costo de ordenar los elementos.
Existe otro algoritmo (dividir para reinar), que llamamos A2, para encontrar el k-ésimo menor que no necesita
ordenar el arreglo. El algoritmo es el siguiente:
int k-esimo(S, k) {
if(k > |S|) return Error
else {
separar S en tres conjuntos:
S1 con los elementos de S < S[k]
S2 con los elementos de S = S[k]
S3 con los elementos de S > S[k]
if(|S1| > k) return k-esimo(S1,k)
if(|S1 U S2| >= k) return S[k]
else return k-esimo(S3,k-|S1 U S2|)
}
}
Notar que el algoritmo A2 particiona el conjunto de manera muy parecida a como lo hace el algorirmo QuickSort.
Anticipamos que A2 es de complejidad temporal O(n2 ), pero en la práctica (caso promedio) es muy eficiente.
A2 tiene un comportamiento muy similar a QuickSort, es decir, a pesar de tener un muy mal peor caso, el caso
promedio es mucho mejor. En la literatura existe otro algoritmo, y que llamamos A3, que permite resolver el
problema en tiempo lineal, es decir O(n). Los detalles del algoritmo A3 los puede ver en las siguientes referencias:
1
3. 3. Brassard, G. et al. Fundamentos de ALgoritmia (Capı́tulo 7).
1 Condiciones
1. Máximo tres personas por grupo
2. Fecha de entrega: 31 de octubre de 2023 hasta 23:59
3. Forma de entrega: Subir a la plataforma (adecca) del curso:
4. Informe (con al menos las siguientes secciones)
(a) Introdución (de que trata la tarea )
(b) Descripción del problema
(c) Una sección con la solución (algoritmos y sus complejidades)
(d) Sección con resultados de experimentación de los algoritmos A2 y A3
(e) Sección de Conclusiones.
5. Programas fuentes y un archivo con las instrucciones para compilarlos y ejecutarlos