这是this question.的后续行动。
如果我有一个字符串text
和一组其他字符串,我可以使用Aho-Corasick算法在text
中找到该字符串的字符串。
现在我有一个dictionary
(字符串集)而不是text
。我可以将dictionary
组织为trie或hash表(甚至是BST)。我是否可以应用Aho-Corasick算法查找dictionary
中所有字符串的字符串?
答案 0 :(得分:1)
您可以应用修改后的算法。
假设树中的每个节点都有两种类型的边
1)边缘“可能是”,如果你在前缀,并得到一些字母,所以新的前缀仍然可以是字典中某些单词的前缀。
例如:字典aaa和aaabc,如果你在aaa并收到一封信b,你就转移到aaab。
2)Edge“nope”,如果你在前缀,并得到一些字母,所以新的前缀不在字典中,你说这个单词不在字典中,继续下一个单词。
示例:字典aaa和aaabc,如果你在aaa并收到一个字母c,你可以说这个单词不在字典中并继续下一个单词。
要构建树,您需要O(总字典长度)时间和O(长度)来检查每个单词,因此这将导致O(输入)算法。
答案 1 :(得分:1)
字典的要点是它便于按所采用的数据结构进行搜索。
例如,使用哈希表,您可以使用哈希查找检查哈希表中set的每个成员。无需使用子字符串搜索。