来自磁盘的超快“开始”查询

时间:2010-12-11 20:44:50

标签: java string search

我有一个40MB(在这种情况下对于内存来说太大)字符串列表,我想要“开头”查询以提取匹配项。有人知道这个好的数据结构吗?现有os java实现的加分点。如果已经存在某些东西,我愿意牺牲“开始于”以完全匹配。基于磁盘的trie听起来很理想。

2 个答案:

答案 0 :(得分:2)

看起来你需要这样的东西:http://en.wikipedia.org/wiki/Trie

可以找到Java中的实现here,尽管它不是基于磁盘的。我会继续搜索:/

实用论文:Trie methods for text and spatial data on secondary storageB-tries for disk-based string management

编辑:我发现这可能有用:MG4J: Managing Gigabytes for Java™

答案 1 :(得分:1)

不能建议任何现有的库,但我之前处理过类似的问题。如果您不打算动态修改列表并且可以对文件中的字符串进行排序(用于二进制搜索),这很容易。

让我们将你的40Mb分成1000个大小相等的块,并保留内存中每个块的第一个字符串。这将是一个1000字符串的数组。他们订购了,因为订购了原始清单 当您需要执行查询时,可以在该数组上使用二进制搜索。这将显示哪个块结果字符串所在。然后你可以从磁盘读取该块(约40kb)并搜索其内容。

例如,如果数组包含值["andrew", "brian", "donald", "john"]并且您搜索前缀"cris",则您知道所有Cristophers和Cristians都在第二个块中。