【发布时间】:2014-01-14 12:02:58
【问题描述】:
这里有一个英文单词表:(例如)
account
angel
apple
application
black
...
我想搜索以特定字符串开头的字符串。例如:the result for "ap" should be { apple, application }.
可以通过基于序列搜索的解决方案轻松实现返回一组对应的字符串。但是仍然有比序列搜索更强大的算法,但它们只返回一个字符串。那么,从 ArrayList 中返回一组对应的字符串是否比基于序列搜索的字符串更快?
谢谢!
【问题讨论】:
-
TRIE 算法似乎是为这项工作而设计的:en.wikipedia.org/wiki/Trie 这是一些实现:pathakalgo.blogspot.cz/2012/11/…
-
在您寻找更快的版本之前:您是否分析了现有代码并发现它是一个实际的瓶颈?
-
你也可以使用一个稍微修改过的二分搜索,它返回最后一个搜索位置,不管字符串是否被找到。从那里,您可以在数组中向上移动,直到初始字符串大于您的搜索字符串。
-
TRIE 不是算法,而是数据结构。如果你想保留你的 ArrayList,二分查找非常有效。
-
谢谢,特里应该是一个伟大的理想!但我在这篇文章之前想到了一个前缀树。前缀树需要我们支付成本来构建树,而数组列表已经对其自身进行了排序。此外,我们可以找到包含特定字符串的字符串的第一个和最后一个索引,而不是返回一组字符串,这比遍历树中的每个叶子要快。我认为会有算法可以快速完成。