Escuché mucho esta pregunta de la entrevista y esperaba obtener algunas opiniones sobre cuáles podrían ser buenas respuestas: tiene un archivo grande de más de 10 GB y desea saber qué elemento se produce más, cuál es una buena manera ¿para hacer esto?
Iterar y realizar un seguimiento en un mapa probablemente no sea una buena idea, ya que usa mucha memoria, y realizar un seguimiento a medida que ingresan las entradas no es la mejor opción, ya que cuando se plantea esta pregunta, el archivo generalmente ya existe.
Otros pensamientos que incluí dividir el archivo para ser iterado y procesado por múltiples subprocesos y luego combinar esos resultados, pero el problema de memoria para los mapas sigue ahí.
algorithms
arrays
Palmadita
fuente
fuente
Respuestas:
Un poco de reflexión sobre este procedimiento lo convencerá de que si existe un elemento "mayoritario", es decir, uno que se produce más de la mitad del tiempo, ese elemento será el elemento almacenado después de que se procese todo el archivo.
fuente
La respuesta obvia es, por supuesto, mantener un mapa hash y almacenar un contador de la aparición de elementos a medida que avanza por el archivo como Nejc ya sugirió. Esta es (en términos de complejidad temporal) la solución óptima.
fuente
Si el elemento más común es más común que el siguiente elemento común por un margen sustancial, y el número de elementos diferentes es pequeño en comparación con el tamaño del archivo, puede muestrear aleatoriamente un par de elementos y devolver el elemento más común en su muestra.
fuente