这是this question.的后续行动。如何查找给定字典中的所有输入单词?
如果我有一个字符串text
和一组其他字符串,我可以使用Aho-Corasick算法找到text
中该组的字符串。
现在我已经不是一个text
dictionary
(组字符串)。我可以将dictionary
组织为一个trie或散列表(或甚至BST)。我可以使用Aho-Corasick算法来查找dictionary
中的所有字符串吗?
这是this question.的后续行动。如何查找给定字典中的所有输入单词?
如果我有一个字符串text
和一组其他字符串,我可以使用Aho-Corasick算法找到text
中该组的字符串。
现在我已经不是一个text
dictionary
(组字符串)。我可以将dictionary
组织为一个trie或散列表(或甚至BST)。我可以使用Aho-Corasick算法来查找dictionary
中的所有字符串吗?
您可以将改进算法。
假设在树中的每个节点有2种类型的边缘
的1)边缘“可能”,如果你在前缀,并得到了一些信件,所以新的前缀仍然可以从一些单词前缀的字典。
例如:词典aaa和aaabc,如果您在aaa并收到字母b,您将移动到aaab。
2)边缘“不”,如果你在前缀,并得到了一些信件,所以新的前缀不是字典,你说,在字典中的字心不是,然后继续下一个单词。
例如:词典aaa和aaabc,如果您在aaa并收到一封字母c,您可以说该单词不是在字典中,然后进入下一个单词。
要构建树,你需要O(总长度字典)时间和O(长度)来检查每个字,所以这会导致O(输入)算法。
一个字典的一点是,它有助于由使用的数据结构进行搜索。
例如,对于一个哈希表,你会采用哈希查找您在哈希表集合的每个成员。不需要使用子字符串搜索。