使用有序字典进行快速前缀搜索
Fast prefix search with ordered dictionary
给定一个字符串字典 D 和一个输入字符串 S。我正在尝试从 D 中找到某个字符串 p,它是 S 的前缀。
对于无序字典,最快的方法似乎是为 D 构建一个 trie 并遍历该 trie 以及 S[=39= 的初始字符].由于 D 中的字符串是无序的,这里最自然的搜索算法是找到最长前缀 p.
的算法
但是,我需要为 D 中的字符串保留一个特殊的输入顺序。例如,对于 D = [bar
、foo
、foobar
] 和 S = foobariously
,上面的搜索会产生 p = foobar
,因为它是最长的前缀。但是我想得到 p = foo
,因为 foo
出现在输入列表的前面。
这种前缀搜索最快的算法是什么?估计基本的做法还是要用trie,但是不知道怎么把原来的排序整合进去。
只是构建一个 trie,但是在添加一个元素时,如果您在途中发现一个已经存在,请删除它,因为那个更好。
也就是说,当尝试添加 'foobar' 时,您会遍历 trie 到 'foo' 并意识到您永远不需要 'foobar',所以放弃它。
给定一个字符串字典 D 和一个输入字符串 S。我正在尝试从 D 中找到某个字符串 p,它是 S 的前缀。
对于无序字典,最快的方法似乎是为 D 构建一个 trie 并遍历该 trie 以及 S[=39= 的初始字符].由于 D 中的字符串是无序的,这里最自然的搜索算法是找到最长前缀 p.
的算法但是,我需要为 D 中的字符串保留一个特殊的输入顺序。例如,对于 D = [bar
、foo
、foobar
] 和 S = foobariously
,上面的搜索会产生 p = foobar
,因为它是最长的前缀。但是我想得到 p = foo
,因为 foo
出现在输入列表的前面。
这种前缀搜索最快的算法是什么?估计基本的做法还是要用trie,但是不知道怎么把原来的排序整合进去。
只是构建一个 trie,但是在添加一个元素时,如果您在途中发现一个已经存在,请删除它,因为那个更好。
也就是说,当尝试添加 'foobar' 时,您会遍历 trie 到 'foo' 并意识到您永远不需要 'foobar',所以放弃它。