【问题标题】:How to construct a suffix Trie for all the substrings of a string?如何为一个字符串的所有子串构造一个后缀Trie?
【发布时间】:2015-06-09 01:00:27
【问题描述】:

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

【问题讨论】:

    标签: substring suffix-tree suffix-array


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-18
        • 2020-02-01
        • 1970-01-01
        • 2019-05-03
        • 2021-12-16
        • 2014-07-09
        • 1970-01-01
        • 2017-04-22
        相关资源
        最近更新 更多