如何为字符串的所有子字符串构造后缀Trie?

时间:2015-06-09 01:00:28

标签: substring suffix-tree suffix-array

我想为字符串的所有子字符串构建一个节省空间的后缀trie; 假设字符串的长度是5000,那么子字符串的数量将是大约25 * 10 ^ 6,并且对于每个节点,我存储大小为26的链接数组 所以总内存= 26 * 5000 * 5000,这是不可能的,因此预计会出现运行时错误。 我有一个节省空间的后缀trie的解决方案,其中我们压缩我们没有选择的路径,因此空间的顺序近似变为线性。 但我无法理解,所以任何人都可以帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您不会搜索trie,而是搜索我认为的后缀树。 压缩路径是一种方式,但我只是搜索Ukkonen算法。时间和空间的复杂性是n。 如果你想要更好理解的东西,只需搜索后缀数组。空间复杂度也是n,具有较低的常数(大约6而不是32左右,我不记得确切的数字)和通过硬件更好的缓存预测。

答案 1 :(得分:0)

不确定你的算术...但是如果你只有一个字符串,你的树必须是26n大小。

从技术上讲,您可以使用后缀阵列+ LCP阵列替换Suffix Trie / Tree,保持基本图形操作的相同速度。 内存消耗为1 + 4 + 4 = 9n。 缺点是改变原始字符串并不容易。