Bueno, esta es una pregunta interesante para la entrevista ... casi todas estas preguntas tienen el propósito de poner a prueba tus habilidades y, afortunadamente, no se aplican directamente a ejemplos de la vida real. Esto se ve como uno, así que entremos en el rompecabezas
Cuando su entrevistador pregunta por "lo mejor", creo que solo habla sobre el rendimiento.
Respuesta 1
30 GB de cadenas es gran cantidad de datos. Todos los algoritmos de comparación-intercambio son Omega(n logn)
, por lo que llevará mucho tiempo. Si bien hay algoritmos O(n)
, como el conteo de ordenación, no están en su lugar, por lo que multiplicarás los 30GB y tienes solo 4GB de RAM (considera la cantidad de intercambio ...), así que iría con quicksort
Respuesta 2 (parcial)
Comience a pensar en la clasificación de conteo. Es posible que desee dividir primero las cadenas en grupos (utilizando el método de ordenamiento de radix), uno para cada letra. Es posible que desee escanear el archivo y, para cada letra inicial, mueva la cadena (por lo tanto, copie y elimine, sin desperdicio de espacio) en un archivo temporal. Es posible que desee repetir el proceso para los primeros 2, 3 o 4 caracteres de cada cadena. Luego, para reducir la complejidad de ordenar muchos archivos, puede ordenar por separado la cadena dentro de cada uno (usando quicksort ahora) y finalmente fusionar todos los archivos en orden.De esta manera usted todavía tiene una forma O(n logn)
pero justo en menor n
Suena como un algoritmo de dividir y vencer, con resultados almacenados en archivos separados y luego fusionados al final. – Omar