Una de mis estructuras de datos favoritas en la universidad fue el Trie. Es una gran estructura de datos para mantener un gran conjunto de cadenas si los prefijos se comparten. Las búsquedas también son agradables, ya que se realizan en O (| longitud |) de la cadena independientemente de cuántas cadenas hay en el conjunto.¿Sigue siendo una buena idea para las arquitecturas modernas?
En comparación, un árbol equilibrado sería O (log N) en el número de elementos establecidos, más lo que pague por las comparaciones. Una tabla hash implicaría el cálculo de hash, comparación, etc.
Me sorprende que there is no Trie implementation in the standard library of most languages.
La única razón por la que se me ocurrió fue la posibilidad de que los costos de acceso a la memoria lo hagan demasiado caro. En lugar de investigar ubicaciones O (log N) si realiza una búsqueda en árbol, no está haciendo O (| longitud |) ubicaciones diferentes, con todas las consecuencias. Si las cuerdas son largas, esto podría terminar siendo demasiado.
Así que me pregunto: ¿cuánto es lo que acabo de describir una preocupación? ¿Qué haces cuando necesitas almacenar un conjunto grande o un mapa de cadenas?
"en la biblioteca estándar de la mayoría de las funciones." ¿quisiste decir "en la biblioteca estándar de la mayoría de los _idiomas_?" –
Si va a publicar preguntas estrechamente relacionadas (http://stackoverflow.com/questions/623892/where-do-i-find-a-standard-trie-based-map-implementation-in-java) debería vincularlos juntos. –
Iba a ir, y luego puso el enlace de Wikipedia para Trie en su lugar ... De todos modos, ahora pones el enlace, así que estamos bien. – Uri