1

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

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

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

Java 中是否有数据结构或排序/搜索算法可以帮助提高效率?

4

2 回答 2

1

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

假设您的增长率不是非常高,那么以这种方式对列表进行排序将大大提高您的绩效。

于 2012-10-29T22:30:17.343 回答
1

如果仅存储在 HashMap 中链接的关键字和短语还不够,我建议继续使用短语的倒排索引。在这种情况下,Apache Lucene可能是实现这一点的选择。

于 2012-10-29T22:32:27.550 回答