2015-01-06 4 views
-5

Мне нужно разработать алгоритм в O (n), который задал строку t длины n, вычислить количество различных подстрок t.Сколько разных подстрок в строке?

+3

и каков ваш подход? –

+0

Формула: ** N!/(E0! ... Em!) **, где E0 ... Em - это счетчики m различных символов в строке. Кажется довольно простым взять его оттуда в O (n). –

ответ

0
  1. Создайте автомат суффикса для входной строки.

  2. Найти сумму maxLength[v] - maxLength[suffixLink[v]] for all states v, где maxLength[v] находится самый длинный путь от корня до v состояния и suffixLink[v] является ссылкой суффикса этого состояния.

Построение автомата суффикса в линейном времени является хорошо известной задачей. Вторая часть - просто простой обход. Таким образом, общая временная сложность составляет O(n).

+0

Большое спасибо, это именно то, что мне нужно. Ибо, если это помогает кому-то оставить ссылку, где я нашел алгоритм. [english google's translate] (https://translate.google.es/translate?hl=ru&sl=ru&tl=ru&u=http%3A%2F%2Fe-maxx.ru%2Falgo%2Fsuffix_automata) [оригинал на русском] (http://e-maxx.ru/algo/suffix_automata) – corxil

Смежные вопросы