如何查找给定字典中的所有输入单词?

时间:2012-01-16 07:01:29

标签: string algorithm search language-agnostic data-structures

这是this question.的后续行动。

如果我有一个字符串text和一组其他字符串,我可以使用Aho-Corasick算法在text中找到该字符串的字符串。

现在我有一个dictionary(字符串集)而不是text。我可以将dictionary组织为trie或hash表(甚至是BST)。我是否可以应用Aho-Corasick算法查找dictionary中所有字符串的字符串?

2 个答案:

答案 0 :(得分:1)

您可以应用修改后的算法。

假设树中的每个节点都有两种类型的边

1)边缘“可能是”,如果你在前缀,并得到一些字母,所以新的前缀仍然可以是字典中某些单词的前缀。

例如:字典aaa和aaabc,如果你在aaa并收到一封信b,你就转移到aaab。

2)Edge“nope”,如果你在前缀,并得到一些字母,所以新的前缀不在字典中,你说这个单词不在字典中,继续下一个单词。

示例:字典aaa和aaabc,如果你在aaa并收到一个字母c,你可以说这个单词不在字典中并继续下一个单词。

要构建树,您需要O(总字典长度)时间和O(长度)来检查每个单词,因此这将导致O(输入)算法。

答案 1 :(得分:1)

字典的要点是它便于按所采用的数据结构进行搜索。

例如,使用哈希表,您可以使用哈希查找检查哈希表中set的每个成员。无需使用子字符串搜索。