estoy trabajando con un gran conjunto (5-20 millones) de claves de cadena (longitud media de 10 caracteres) cual necesitará almacenar en una estructura de datos de memoria que soporta la operación siguiente en tiempo constante o casi en tiempo constante:forma eficiente de almacenar toneladas de cuerdas (era: aplicación HAT-Trie en Java)
// Returns true if the input is present in the container, false otherwise
public boolean contains(String input)
Hashmap de Java está demostrando ser más que satisfactorio en cuanto a rendimiento se refiere, pero está tomando una gran cantidad de la memoria Estoy buscando una solución que sea eficiente desde el punto de vista de la memoria y aún así soporte un rendimiento que sea decente (comparable o casi tan bueno como el hashing).
No me importan los tiempos de inserción/eliminación. En mi aplicación, realizaré solo inserciones (solo en el momento del inicio) y, posteriormente, solo consultaré la estructura de datos utilizando el método contains
durante la vida útil de la aplicación.
He leído que la estructura de datos de HAT-Trie es la más cercana para mis necesidades. Me pregunto si hay una biblioteca que tiene una implementación.
Otras sugerencias con sugerencias para implementaciones de bienvenida.
Gracias.
Supongo que cualquier otra estructura de datos utilizará mucha memoria, si se implementa en Java. – ebo
@ebo No si la implementación subyacente usa matrices chars/char. No es necesario que persista el objeto String de entrada. En general, Tries debe usar menos memoria. – hashable
Pregunta muy interesante. –