Я наивно представлял, что могу построить суффикс trie, где я храню count-count для каждого node, а затем самые глубокие узлы со счетами больше одного - это набор результатов, который я ищу.
У меня действительно очень длинная строка (сотни мегабайт). У меня около 1 ГБ ОЗУ.
Вот почему построение суффикса trie с данными подсчета слишком малоэффективно, чтобы работать для меня. Чтобы процитировать Дерево суффикса Википедии:
сохранение дерева суффиксов строк обычно требует значительно большего пространства, чем сохранение самой строки.
Большой объем информации в каждом краю и node делает дерево суффиксов очень дорогостоящим, потребляя от десяти до двадцати раз объем памяти исходного текста в хороших реализациях. Суффикс-массив уменьшает это требование до четырех раз, и исследователи продолжают находить меньшие структуры индексирования.
И это были комментарии к википедии на дереве, а не три.
Как я могу найти длинные повторяющиеся последовательности в таком большом количестве данных и в разумные промежутки времени (например, менее часа на современной настольной машине)?
(Некоторые ссылки в Википедии, чтобы избежать публикации их в качестве ответа: Алгоритмы для строк и особенно Самая длинная повторяющаяся проблема с подстрокой;-))