Data structures 大型数据集的通用后缀树Java实现

Data structures 大型数据集的通用后缀树Java实现,data-structures,full-text-search,suffix-tree,suffix-array,Data Structures,Full Text Search,Suffix Tree,Suffix Array,我收集了大约5000万个字符串,每个字符串大约有100个字符。我正在寻找非常高效(运行时间和内存使用)的通用后缀树实现 我已经尝试过了,但是它需要大量的内存,即使运行时间是有效的。长度为100的250万串。它已经占用了大约50GB的内存。不是一个理想的解决方案,但您可以使用。 它有一个CritBit1D版本,您可以存储任意长度的密钥 缺点#1: 您必须首先将字符串转换为long[],即每长4-8个字符 缺点#2: 如果您需要一个并发版本,您必须查看Critbit64COW,它使用写时复制并发。但

我收集了大约5000万个字符串,每个字符串大约有100个字符。我正在寻找非常高效(运行时间和内存使用)的通用后缀树实现


我已经尝试过了,但是它需要大量的内存,即使运行时间是有效的。长度为100的250万串。它已经占用了大约50GB的内存。

不是一个理想的解决方案,但您可以使用。 它有一个CritBit1D版本,您可以存储任意长度的密钥

缺点#1: 您必须首先将字符串转换为long[],即每长4-8个字符

缺点#2: 如果您需要一个并发版本,您必须查看Critbit64COW,它使用写时复制并发。但是,这还没有为Critbit1D实现,因此您需要自己使用Critbit64COW作为模板来实现

但是,您只需将64位哈希代码存储为密钥,然后就可以使用CritBit64(单线程)或CritBit64COW(多线程)。 顺便说一句,即使使用CritBit64,并发读取也不是问题


免责声明:我是CritBit的作者。

我们实际使用的数据集不是通用后缀树。如果您解释了使用这50万个字符串需要做什么,即需要回答什么类型的查询,我们可能会建议一种实用的数据结构。另外,如果说它是什么类型的数据,以及给定子字符串的可用RAM有多大,我想检索所有引用:包含子字符串的字符串和引用的位置。我想挤到16GB或8GB以下。这里可能有时空交易。如果是这样的话,我更喜欢查询时间和构建时间不会下降到那么糟糕的程度(使用日志系数是可以的),请阅读,然后再尝试提出更多问题。过多的不受欢迎的离题问题会让你被禁止提问,你不想这样,是吗?