Java中后缀数组的压缩

Java中后缀数组的压缩,java,data-structures,compression,suffix-array,Java,Data Structures,Compression,Suffix Array,我使用普林斯顿实现创建了一个后缀数组。但是,我的基本文本文档非常非常大,生成的后缀数组大小超过500mb。有没有办法压缩后缀数组 谢谢 据我所知,你不能压缩后缀数组(也许你可以,我只是不知道),但你可以压缩后缀树。因此,您可能会考虑更改数据结构。只需谷歌压缩后缀树 它们被大量用于基因测序和常见的子串问题,因为它们可以存储大量数据 可以在此处找到解释: 如果您按照底部的链接进行操作,它会将您带到这个页面,您可以在那里下载压缩后缀树的代码:据我所知,您不能压缩后缀数组(也许可以,我只是不知道),但您

我使用普林斯顿实现创建了一个后缀数组。但是,我的基本文本文档非常非常大,生成的后缀数组大小超过500mb。有没有办法压缩后缀数组


谢谢

据我所知,你不能压缩后缀数组(也许你可以,我只是不知道),但你可以压缩后缀树。因此,您可能会考虑更改数据结构。只需谷歌压缩后缀树

它们被大量用于基因测序和常见的子串问题,因为它们可以存储大量数据

可以在此处找到解释:

如果您按照底部的链接进行操作,它会将您带到这个页面,您可以在那里下载压缩后缀树的代码:

据我所知,您不能压缩后缀数组(也许可以,我只是不知道),但您可以压缩后缀树。因此,您可能会考虑更改数据结构。只需谷歌压缩后缀树

它们被大量用于基因测序和常见的子串问题,因为它们可以存储大量数据

可以在此处找到解释:

如果您遵循底部的链接,它会将您带到本页,您可以下载压缩后缀树的代码:

与前面的答案相反,您不仅可以压缩后缀数组,而且实际上压缩后缀树通常是通过首先使用后缀数组模拟树来实现的,然后压缩它

我不知道有任何现成的后缀数组压缩Java实现,现有的各种算法太复杂,无法在这里详细描述。Navarro和Mäkinen(DOI 10.1145/1216370.1216372)撰写了一篇论文,提供了详细的描述和比较

但从广义上讲,有两种通用方法:

方法A:直接减小阵列的大小 (见本文第7.1节)。这涉及到只存储后缀数组的一些条目,并在需要时插入缺少的条目。插值使用一个函数(本文中称为ψ)执行,该函数本身以大数组(但没有原始后缀数组大)和索引位向量的形式存储

方法B:FM方法(见本文第9节)。这里,后缀数组基本上被一个相对较短的数组C所取代,该数组C指示主词典存储桶(即,以相同初始字符开头的后缀组)的起始位置,并与另一个相对较大的数据结构Occ相结合,后者支持所谓的后向搜索。具体地说,给定一个搜索模式p=c1..cm,它可以迭代地将字符cm的存储桶缩小到字符串cm-1cm的较小存储桶,然后再进一步缩小到cm-2cm-1cm的存储桶,依此类推,直到找到完整模式p的最终范围。实现这一点的数据结构很大,但可以使用各种技术进行压缩,尤其是小波树

对搜索性能的影响

上面引用的论文包含了仔细的分析和比较。但从广义上讲,压缩后缀数组将导致搜索长度为m的模式(如果仔细实施,在未压缩的后缀数组中可以是O(m))延迟一个系数,该系数取决于整个文本的长度(通常是对数)。此外,任何使用小波树的方法都意味着对字母表大小的额外依赖性

与前面的答案相反,您不仅可以压缩后缀数组,而且实际上压缩后缀树通常是通过首先使用后缀数组模拟树来实现的,然后压缩它

我不知道有任何现成的后缀数组压缩Java实现,现有的各种算法太复杂,无法在这里详细描述。Navarro和Mäkinen(DOI 10.1145/1216370.1216372)撰写了一篇论文,提供了详细的描述和比较

但从广义上讲,有两种通用方法:

方法A:直接减小阵列的大小 (见本文第7.1节)。这涉及到只存储后缀数组的一些条目,并在需要时插入缺少的条目。插值使用一个函数(本文中称为ψ)执行,该函数本身以大数组(但没有原始后缀数组大)和索引位向量的形式存储

方法B:FM方法(见本文第9节)。这里,后缀数组基本上被一个相对较短的数组C所取代,该数组C指示主词典存储桶(即,以相同初始字符开头的后缀组)的起始位置,并与另一个相对较大的数据结构Occ相结合,后者支持所谓的后向搜索。具体地说,给定一个搜索模式p=c1..cm,它可以迭代地将字符cm的存储桶缩小到字符串cm-1cm的较小存储桶,然后再进一步缩小到cm-2cm-1cm的存储桶,依此类推,直到找到完整模式p的最终范围。实现这一点的数据结构很大,但可以使用各种技术进行压缩,尤其是小波树

对搜索性能的影响
上面引用的论文包含了仔细的分析和比较。但从广义上讲,压缩后缀数组将导致搜索长度为m的模式(如果仔细实现,在未压缩的后缀数组中可以是O(m))延迟取决于(通常是对数)的因子