2015-06-09 4 views
1

Вам предоставляется строка, которая определяет частоту всей сортировки подстроки (порядок уменьшения) в соответствии с этой частотой.Эффект Все подсчеты подстроки в отсортированном порядке

Например: ababa {"a", "b", "a", "b", "a", "ab", "ba", "ab", "ba", "aba", " bab "," aba "," abab "," baba "," ababa "}.

выход:

3,2,2,2,2,1,1,1,1

объяснение

3 а 2 б 2 ба 2 ABA 2 аб 1 ABAB 1 Baba 1 Абеба 1 ЬаЬ

раствор

1) одно очевидное решение состоит в том, чтобы сохранить всю строку в карте хеша и посчитать ее частоту, но она примет o (n^3logn) O (n^2 * n) {n^2 число подстроки * O (n) для сравнения строки * logn (поскольку карта поддерживается как красное черное дерево)} 2) Вставить всю подстроку в Тройном дереве поиска, затем получить частоту каждой подстроки, затем отсортировать частоту O (n^3 logn)

Мне интересно, существует ли O (n^2) или O (nlogn) решение exsist.

как этот раствор http://www.quora.com/Given-a-string-how-do-I-find-the-number-of-distinct-substrings-of-the-string

+0

Возможный дубликат [Как подсчитать количество способов выбора k равных подстрок из списка L (список всех подстрок)] (http://stackoverflow.com/questions/30711272/how- to-count-the-number-of-way-of-choose-of-k-equal-substrings-from-a-list-l) – MBo

ответ

1

Уплотнительное (п^2) может быть достигнуто следующим образом:

  1. Вставить все подстроки в синтаксического дерева. Это можно сделать в O (n^2).

  2. Получить всю частоту и отсортировать их. Обратите внимание, что частота любой подстроки может быть только в диапазоне [0, n], поэтому сортировка ведра может иметь все числа, отсортированные в O (n^2), так как в худшем случае будет n^2 чисел.

+0

Подложки O (n^2), размер O (n). Вставка их в trie - O (n^3). – amit

+0

Но подстроки являются инкрементальными. поэтому для «abc» вставка «a» «ab» «abc» принимает только три операции на trie, а не 1 + 2 + 3 – lavin

+0

. Тогда это не «вставить O (n^2) подстроки в trie», это что-то иначе, если вы хотите использовать тот факт, что они являются инкрементальными. Я не утверждаю, что это невозможно, я утверждаю, что это не черная вставка O (n^2). – amit

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

  • Нет связанных вопросов^_^