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

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

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

Например:

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


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



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


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

Буду очень благодарен за помощь!
  • Вопрос задан
  • 7279 просмотров
Подписаться 3 Оценить 1 комментарий
Ответ пользователя agmt К ответам на вопрос (6)
@agmt
Я не гуру, но сдаётся мне, что O(n2) — вполне достойно, по-крайней мере в той формулировке, что я понял. Ведь результатом должен быть отсортированный массив строк размером от n (исходная строка «аа… а») до (1+n)*n/2 (исходная строка «abcd..»). С введением ограничения на размер подстроки, быть может, получится и улучшить эффективность алгоритма.
А вообще, как говорил Пайк:
Правило 3: Изощрённые алгоритмы являются медленными, если n мало, а n обычно мало. В изощрённых алгоритмах присутствуют большие константы. До тех пор, пока вы не убедитесь, что n часто становится большим, избегайте изощрённости. (Даже если n становится большим, вначале используйте правило 2).
Ответ написан
Комментировать