Un archivo contiene un gran número (por ejemplo, 10 mil millones) de cadenas y necesita encontrar cadenas duplicadas. Tienes N cantidad de sistemas disponibles. Cómo encontrará los duplicadosBuscar cadenas duplicadas en un archivo grande
Respuesta
Divida el archivo en N piezas. En cada máquina, cargue la mayor parte de la pieza en la memoria que pueda y ordene las cuerdas. Escriba estos fragmentos para el almacenamiento masivo en esa máquina. En cada máquina, combine los fragmentos en una única secuencia y luego fusione la secuencia de cada máquina en una secuencia que contenga todas las cadenas en orden ordenado. Compara cada cuerda con la anterior. Si son iguales, es un duplicado.
Para fusionar los fragmentos en una única secuencia, debería cargar todos los registros en la memoria. Para un archivo de registro de 1 mil, todos los registros de 1 mil deberían estar en la memoria en el último paso de fusión en el algoritmo anterior, ¿verdad? Si es así, entonces eso frustra el propósito. –
@AndyDufresne "Para fusionar los fragmentos en una única secuencia, tendría que cargar todos los registros en la memoria". No, no lo harías Solo necesita suficiente memoria para cargar la siguiente secuencia de cada fragmento a la vez, para poder compararlos. Una vez que se haya realizado la comparación, la siguiente cadena ocupará ese espacio de memoria. – erickson
No entendí tu algoritmo de fusión. Supongamos que tenemos un archivo de registro de 1 mil y solo se pueden cargar 5k registros en la memoria. Por lo que entendí, primero necesito dividir el archivo en N piezas con 5K registros cada una. Luego, clasifique todos los registros en cada archivo de 5k registros y vuelva a escribir. Para unir dos archivos de registro de 5k, tendría que cargar 10k registros en memoria ¿verdad? Si esto no es lo que quiso decir, puede explicar los pasos para buscar registros duplicados en un archivo de registro de 1 mil con el límite de memoria de cargar solo 5k registros. –
La respuesta de erickson es probablemente la esperada por quien haya planteado esta pregunta.
Se puede usar cada una de las N máquinas como un cubo en una tabla hash:
- para cada cadena, (por ejemplo número de cuerda i en la secuencia) calcular una función hash en él, h.
- enviar los los valores de i y h a máquina número n para el almacenamiento, donde n = h% N.
- de cada máquina, recuperar una lista de todos los valores de hash h para los que se recibió más de un índice, junto con la lista de índices.
- comprueba los conjuntos de cadenas con los mismos valores hash, para ver si realmente son iguales.
Para ser honesto, sin embargo, para 10 mil millones de cadenas, podría hacerlo en una PC. La tabla hash puede ocupar algo así como 80-120 GB con un hash de 32 bits, dependiendo de la implementación exacta de hashtable. Si está buscando una solución eficiente, tiene que ser un poco más específico a lo que quiere decir con "máquina", ya que depende de cuánto espacio tiene cada uno y el costo relativo de la comunicación de red.
- 1. Buscar y reemplazar en un archivo grande
- 2. Eliminar filas duplicadas de un archivo grande en Python
- 3. Eliminar cadenas duplicadas en matriz de cadenas
- 4. manera más eficiente de encontrar cadenas parciales en un archivo grande de cadenas (python)
- 5. Buscar líneas duplicadas en un archivo y contar cuántas veces se duplicó cada línea?
- 6. Lista de C++ eliminar cadenas duplicadas
- 7. Eliminación de líneas duplicadas en un archivo usando Java
- 8. Buscar varias cadenas en eclipse
- 9. Modificar un archivo grande en Scala
- 10. Buscar cadenas cíclicas
- 11. Cargar archivo CSV grande aproximadamente 10,000,000 registros en la tabla mysql también contiene filas duplicadas
- 12. Buscar un archivo en python
- 13. Vim: ¿Buscar y reemplazar en un proyecto grande?
- 14. Buscar subsecuencias de cadenas dentro de cadenas
- 15. ¿Coincidir una cadena en un archivo de texto grande?
- 16. Ordenar un archivo grande en Java
- 17. Consultas aleatorias en un archivo xml grande
- 18. Dividir un archivo grande en C++
- 19. seleccionar -primero 1 en un archivo grande
- 20. manera eficiente de buscar cadenas en la lista de cadenas?
- 21. Extracción de cadenas duplicadas de una lista en Python
- 22. Buscar todas las cadenas en los archivos de código python
- 23. Perl - Encontrar líneas duplicadas en un archivo o matriz
- 24. Buscar archivo en Xcode
- 25. Buscar todas las cadenas codificadas en origen
- 26. Buscar subcadena en una lista de cadenas
- 27. ¿Cómo buscar un archivo javascript en google?
- 28. buscar y reemplazar cadena en un archivo
- 29. Expresión regular para buscar y eliminar palabras duplicadas
- 30. Buscar y reemplazar cadenas en mi texto con VBScript
¿Es esta tarea? Esto suena como tarea. – SoapBox