J'ai imaginé naïvement que je pouvais construire un suffixe trie où je garde un compte de visite pour chaque nœud, puis les nœuds les plus profonds avec des nombres supérieurs à un sont le résultat que je cherche pour. J'ai une chaîne vraiment très longue (des centaines de mégaoctets). J'ai environ 1 Go de RAM. C'est pourquoi la construction d'un suffixe trie avec des données de comptage est trop inefficace dans l'espace pour travailler pour moi. Pour citer Wikipedia's Suffix tree:trouver de longues sous-chaînes répétées dans une chaîne massive
Le stockage de l'arborescence de suffixes d'une chaîne nécessite généralement beaucoup plus d'espace que le stockage de la chaîne elle-même. La grande quantité d'informations dans chaque arête et nœud rend l'arborescence de suffixes très coûteuse, consommant environ dix à vingt fois la taille de la mémoire du texte source dans de bonnes implémentations. Le tableau des suffixes réduit cette exigence à un facteur de quatre, et les chercheurs ont continué à trouver des structures d'indexation plus petites.
Et c'était les commentaires de wikipedia sur l'arbre, pas trie.
Comment puis-je trouver de longues séquences répétées dans une quantité de données aussi importante et dans un délai raisonnable (par exemple, moins d'une heure sur une machine de bureau moderne)?
(Quelques liens wikipedia pour éviter les gens de les afficher comme la « réponse »: Algorithms on strings et surtout Longest repeated substring problem ;-))
FWIW, voici une mise en œuvre d'un problème connexe j'ai écrit pour SpamAssassin, peut être utile: http://taint.org/2007/03/05/ 134447a.html –