ingenuamente imaginé que podría construir un sufijo trie donde guardo una visita-recuento para cada nodo, y luego los nodos más profundos con recuentos mayores que uno son el conjunto de resultados que estoy buscando para.búsqueda de subcadenas largas repetidas en una cadena masiva
Tengo una cadena muy larga (cientos de megabytes). Tengo alrededor de 1 GB de RAM.
Es por eso que construir un sufijo trie con conteo de datos es demasiado ineficiente en cuanto al espacio para que funcione. Para citar Wikipedia's Suffix tree:
el almacenamiento del árbol de sufijo de una cadena generalmente requiere mucho más espacio que el almacenamiento de la cadena.
La gran cantidad de información en cada borde y nodo hace que el árbol de sufijos sea muy costoso, consumiendo de diez a veinte veces el tamaño de la memoria del texto fuente en buenas implementaciones. El conjunto de sufijos reduce este requisito a un factor de cuatro, y los investigadores han seguido encontrando estructuras de indexación más pequeñas.
Y eso fue los comentarios de Wikipedia sobre el árbol, no trie.
¿Cómo puedo encontrar secuencias repetidas largas en una cantidad tan grande de datos, y en un tiempo razonable (por ejemplo, menos de una hora en una máquina de escritorio moderna)?
(Algunos enlaces Wikipedia para evitar la publicación de la gente como la 'respuesta': Algorithms on strings y especialmente Longest repeated substring problem ;-))
Fwiw, aquí es una implementación de un problema relacionado que escribí para SpamAssassin, pueden ser útiles: http://taint.org/2007/03/05/ 134447a.html –