在字符串不断增长的数据结构中搜索子字符串

时间:2012-10-29 22:25:39

标签: java algorithm search data-structures

在Java中,在增长字符串列表中搜索单词或子字符串的最快方式是什么?

例如,如果我有一个包含十个单词的列表,并且我每隔五分钟搜索一个用户输入的单词的列表,并且该列表每分钟增长一个单词,那么是存储这些单词的最佳数据结构吗?

我们实际上在做的是......在检索“关键字”时,程序必须根据该关键字搜索要回复的短语,但短语列表会不断增长。读取关键字,解析每个短语,然后选择一个短语需要太长时间。我们目前的算法目前在n ^ 3,这是不合适的。

Java中是否存在数据结构,或排序/搜索算法是否有助于提高效率?

2 个答案:

答案 0 :(得分:1)

对于巨大而艰巨的搜索任务,我总是使用Merge Sort。您的列表每分钟都在增长的事实应该不是算法的问题。当你去寻找你想要的单词时,你可以将它与另一个检查器结合起来。实际上,一旦你对第一个列表进行了排序,当你收到它时,只需将每个元素插入列表中的位置就更有意义,而不是仅在你开始搜索时查看数据。

如果您的增长率不是非常高,保持列表以这种方式排序将大大提高您的表现。

答案 1 :(得分:1)

如果仅仅存储在HashMap中链接的关键词和短语是不够的,我建议使用反向的短语索引。在这种情况下,Apache Lucene可能是实现此目的的选择。