Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按排序顺序对所有子串进行有效计数_Java_String_Algorithm_Suffix Tree_Suffix Array - Fatal编程技术网

Java 按排序顺序对所有子串进行有效计数

Java 按排序顺序对所有子串进行有效计数,java,string,algorithm,suffix-tree,suffix-array,Java,String,Algorithm,Suffix Tree,Suffix Array,您将获得一个字符串,用于查找根据频率排序(降序)的所有子字符串的频率 例如:亚贝巴 {“a”、“b”、“a”、“b”、“a”、“ab”、“ba”、“ab”、“ba”、“aba”、“bab”、“aba”、“aba”、“abab”、“baba”、“abab”、“baba”、“ababa”} 输出: 3,2,2,2,1,1,1,1,1,1 解释 3A 2 b 2 ba 2 aba 2 ab 1阿巴布 1巴巴 1亚的斯亚贝巴 1巴布 解决方案 1) 一个显而易见的解决方案是将所有字符串保留在哈希映射中并

您将获得一个字符串,用于查找根据频率排序(降序)的所有子字符串的频率

例如:亚贝巴 {“a”、“b”、“a”、“b”、“a”、“ab”、“ba”、“ab”、“ba”、“aba”、“bab”、“aba”、“aba”、“abab”、“baba”、“abab”、“baba”、“ababa”}

输出:

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

解释

3A 2 b 2 ba 2 aba 2 ab 1阿巴布 1巴巴 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)溶液

像这样

O(n^2)解决方案可以通过以下方式实现:

  • 将所有子字符串插入到trie中。这可以在O(n^2)中完成

  • 获取所有频率并对其进行排序。 请注意,任何子字符串的频率只能在[0,n]范围内,因此桶排序可以将所有数字按O(n^2)排序,因为在最坏的情况下,将有n^2个数字


  • 有O(n^2)个子字符串,大小为O(n)。将它们插入到trie是O(n^3),但子字符串是递增的。因此,对于“abc”,插入“a”“ab”“abc”只需要对一个trie执行3次操作,而不是1+2+3如果不是“向一个trie插入O(n^2)子字符串”,那么如果您想使用它们是增量的这一事实,则是另一回事。我并不是说它不能完成,我是说它不是黑盒插入O(n^2)子字符串。可能是