自动完成算法有哪些好的数据结构?哪些数据结构可以有效地查找包含特定子字符串的字符串?
答案 0 :(得分:18)
如果您希望执行与Google实施自动填充功能类似的操作,您可能需要查看三元搜索树:
http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/
但是,如果要在字符串中查找任何随机子字符串,请尝试使用广义后缀树。
答案 1 :(得分:6)
答案 2 :(得分:1)
作为Suffix Arrays,Trees和Tries的替代方案,请查看Directed Acyclic Word Graphs(DAWG)和压缩变体(CDAWG)。它们可以在线性时间内构建,占用线性空间,并允许子字符串搜索。
使用更复杂的搜索功能,您甚至可以支持一组有限的通配符。
答案 3 :(得分:1)
如果自动填充建议集是按等级排序的,则SuggestTree是一个很好的数据结构。对于任何给定的前缀,它可以快速访问以该前缀开头的顶级 k 建议。
答案 4 :(得分:0)
如果您正在做前缀(这是大多数自动填充功能所做的那样),那么三元搜索树也是我推荐的。如果您正在使用通用中缀,那么请使用后缀树,如上所述。
答案 5 :(得分:0)
我已经为你想要的东西创建了一个应用程序。它是基于排名自动填充算法的最有效前缀。