Задать вопрос

Можете подсказать алгоритм поиска наиболее часто встречающихся подстрок в тексте?

Есть текст. Необходимо найти наиболее встречающиеся подстроки в нем.

Например:

Карл у Клары украл кораллы, а Клара у Карла украла кларнет.


Здесь например должно выдать:
  • к (Карл, Клары, уКрал, Кораллы, Клара, Карла, уКрала, Кларнет)
  • а (кАрл, укрАл, корАллы, клАра, кАрла, укрАла, клАрнет),
  • ...
  • клар (Клары, Клара, кларнет),
  • карл (Карл, Карла),
  • крал (украл, украла),
  • украл (Украл, Украла)



С алгоритмами на Вы, но предполагаю что решение O(n2) нежелательно.


Очень уж не хочется придумывать свой велосипед.

Буду очень благодарен за помощь!
  • Вопрос задан
  • 7275 просмотров
Подписаться 3 Оценить 1 комментарий
Решение пользователя MikhailEdoshin К ответам на вопрос (6)
@MikhailEdoshin
Суффиксное дерево (также на английском). Строится за линейное время, время поиска пропроционально длине искомой строки, памяти, правда, много занимает. (Забавно, что в Дискретном анализе (2003) И. В. Романовского в главе «Суффиксное дерево» дается пример как раз с этой же фразой о Карле и Кларе.)
Ответ написан