使用有序字典进行快速前缀搜索

Fast prefix search with ordered dictionary

给定一个字符串字典 D 和一个输入字符串 S。我正在尝试从 D 中找到某个字符串 p,它是 S 的前缀。

对于无序字典,最快的方法似乎是为 D 构建一个 trie 并遍历该 trie 以及 S[=39= 的初始字符].由于 D 中的字符串是无序的,这里最自然的搜索算法是找到最长前缀 p.

的算法

但是,我需要为 D 中的字符串保留一个特殊的输入顺序。例如,对于 D = [barfoofoobar] 和 S = foobariously,上面的搜索会产生 p = foobar,因为它是最长的前缀。但是我想得到 p = foo,因为 foo 出现在输入列表的前面。

这种前缀搜索最快的算法是什么?估计基本的做法还是要用trie,但是不知道怎么把原来的排序整合进去。

只是构建一个 trie,但是在添加一个元素时,如果您在途中发现一个已经存在,请删除它,因为那个更好。

也就是说,当尝试添加 'foobar' 时,您会遍历 trie 到 'foo' 并意识到您永远不需要 'foobar',所以放弃它。