Me acaban de entrevistar con una pregunta, y tengo curiosidad por saber cuál debería ser la respuesta. El problema era, esencialmente:Búsqueda óptima de valores mínimos k en la lista de enteros no ordenados
Supongamos que tiene una lista desordenada de n enteros. ¿Cómo se encuentran los k valores mínimos en esta lista? Es decir, si tiene una lista de [10, 11, 24, 12, 13] y está buscando los 2 valores mínimos, obtendrá [10, 11].
Tengo una solución O (n * log (k)), y eso es lo mejor que puedo, pero me da curiosidad lo que otras personas traen. Me abstendré de contaminar el cerebro de gente publicando mi solución y la editaré dentro de un rato.
editar # 1: Por ejemplo, una función como: getMinVals lista (lista & l, int k)
editar # 2: Parece que se trata de un algoritmo de selección, así que voy a echar en mi solución también; iterar sobre la lista y usar una cola de prioridad para guardar los valores mínimos. La especificación en la cola de prioridad era que los valores máximos terminarían en la parte superior de la cola de prioridad, por lo que al comparar la parte superior con un elemento, la parte superior aparecería y el elemento más pequeño sería empujado. Esto asumió que la cola de prioridad tenía un O (log n) push y un O (1) pop.
Recuerdo haber hecho estas preguntas hace más de un año y la respuesta que obtuve no fue mejor que O (n * log (k)), por lo que creo que ya puede tenerla. – achinda99
Casualmente tuve que implementar esto en el trabajo ayer. Es O (n * log (k)) aunque hay un par de formas diferentes de llegar allí. – Crashworks
Siempre es bueno escuchar que no he corrompido la entrevista. Dicho esto, las 2-3 soluciones que probé antes probablemente no me ayudaron mucho. –