0

我有大约5000万个字符串的集合,每个字符串都有大约100个字符。我正在寻找非常高效(运行时间和内存使用情况)的通用后缀树实现。大数据集的广义后缀树Java实现

我已经试过https://github.com/npgall/concurrent-trees但它需要大量的内存事件,尽管运行时间很有效率。 250万字符串的长度为100.它已经花费了50GB的内存。

+0

我们实际上用这样的数据集做的事情不是用通用后缀树来完成的。如果你解释一下你需要用这些50M字符串做什么,也就是说你需要什么类型的查询来回答,我们可能会建议一个实际的数据结构。还要说明给定子字符串的数据类型和可用RAM的数量 –

+0

,我想要检索所有的出现次数:包含子字符串和出现位置的字符串。我想挤到16GB或8GB以下。这里可能会有时间和空间的交易。如果是这样,我更喜欢查询时间和建设时间不会下降,不好(对数因子很好) –

+0

请阅读[我可以问什么主题吗?](http://stackoverflow.com/help/我应该避免问什么类型的问题?](http://stackoverflow.com/help/dont-ask)和[我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask),然后尝试提出更多问题。过多的接收不到的问题会导致你被禁止提问,而你不想那样做? –

回答

0

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

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

缺点#2: 如果你需要一个并发版本,你必须看看Critbit64COW,它使用了写时复制并发性。但是,这还没有为Critbit1D实现,所以你需要自己做,使用Critbit64COW作为模板。然而,你可以只存储一个64位散列码作为关键字,那么你可以使用CritBit64(单线程)或CritBit64COW(多线程)。 顺便说一句,同时阅读不是一个问题,即使与CritBit64。

声明:我是CritBit的作者。

+0

谢谢,我会试试CritBit。 –