Генерируйте все уникальные подстроки для данной строки

Учитывая строку s, что самый быстрый метод должен генерировать ряд всех его уникальных подстрок?

Пример: для str = "aba" мы добрались бы substrs={"a", "b", "ab", "ba", "aba"}.

Наивный алгоритм должен был бы пересечь все строковые генерирующиеся подстроки в длине 1..n в каждом повторении, уступая O(n^2) верхняя граница.

Лучшее связывается возможное?

(это - технически домашняя работа, таким образом только для указателей приветствуются также),

62
задан Bill the Lizard 20 September 2012 в 12:58
поделиться

4 ответа

Как говорили другие плакаты, потенциально существует O (n ^ 2) подстрок для данной строки, поэтому их распечатка не может быть выполнена быстрее, чем это . Однако существует эффективное представление множества, которое может быть построено за линейное время: суффиксное дерево .

43
ответ дан 24 November 2019 в 16:53
поделиться

ну, поскольку потенциально существует n * (n + 1) / 2 разных подстрок (+1 для пустой подстроки), я сомневаюсь, что вы можете быть лучше, чем O (n * 2) (худший случай). Проще всего их сгенерировать и использовать какую-нибудь красивую таблицу поиска O (1) (например, хэш-карту) для исключения дубликатов сразу после их обнаружения.

2
ответ дан 24 November 2019 в 16:53
поделиться

Нет способа сделать это быстрее, чем O (n 2 ), потому что в строке всего O (n 2 ) подстрок, поэтому, если вам нужно сгенерировать их все , их количество будет n ( n + 1) / 2 в худшем случае, отсюда верхняя нижняя граница O (n 2 ) Ω (n 2 ).

13
ответ дан 24 November 2019 в 16:53
поделиться

Для большого ох ... Лучшее, что вы могли бы сделать, это O (n ^ 2)

Не нужно изобретать колесо, это не струны, а наборы, так что вам придется концепции и примените их к своей ситуации.

Алгоритмы

Действительно хорошая Белая книга от MS

Подробно PowerPoint

Блог о перманентных перманентах

3
ответ дан 24 November 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: