lo haría de esta manera: - analizar el archivo original y guardar todas las entradas en un archivo nuevo. Utilice bloques de datos de longitud fija para escribir entradas en el nuevo archivo (por ejemplo, su cadena más larga tiene 10 bytes de longitud, tome 10 + x como longitud de bloque, x es la información adicional que desea guardar junto con las entradas. en el archivo estaría en la posición de bytes 10 * (10 + x)). También necesitaría saber la cantidad de entradas para crear (para que el tamaño del archivo sea noOfEntries * blocklength, use RandomAccesFile y setLength para establecer la longitud de este archivo). - Ahora usa el algoritmo de quicksort para ordenar las entradas en el archivo (mi idea es tener un archivo ordenado al final que haga las cosas mucho más fáciles y más rápidas finalmente. Hashing también teóricamente funcionaría, pero tendrías que lidiar con la reorganización de duplicados entradas para agrupar todos los duplicados, no es realmente una elección aquí). - Analice el archivo con las entradas ahora ordenadas. Guarde un puntero a la entrada de la primera aparición de una entrada. Incremente la cantidad de duplicados hasta que haya una nueva entrada. Cambie la primera entrada y agregue esa información adicional que desea tener allí en un nuevo archivo de "resultado final". Continúe de esta manera con todas las entradas restantes en el archivo ordenado.
Conclusiones: Creo que esto debería ser un razonablemente rápido y utilizan cantidad razonable de recursos. Sin embargo, depende de los datos que tenga. Si tiene una gran cantidad de duplicados, el rendimiento de la conexión rápida se degradará. Además, si la entrada de datos más larga es mucho más larga que la media, también perderá espacio en el archivo.
Esta es mi idea también, me tomó demasiado tiempo escribirla con el trabajo en el camino! –
Bueno, el problema es que el archivo que tengo es demasiado grande. Mantenerlo en la memoria simplemente no funciona ... Y, por lo tanto, los hastables son una mala idea ... No tengo más remedio que recurrir a las operaciones de archivo :(Mala idea, pero no tengo otra ... – sharath
¿Cuánto dura la cadena más larga? podría usar un trie. Tomaría un poco menos de espacio y si tiene muchos solapamientos en términos, tomaría mucho menos espacio. En el peor de los casos, debería usar una base de datos, en lugar de escribir la suya. –