我有Aho-Corasick算法的代码。但是,当在给定的字符串列表中搜索文本时,我仍然不知道如何在查找过程中使用状态信息。
例如,我有一个字符串列表[MOSCOW][COLA]
,现在我需要确定CA
是否在列表中,如果是,它的位置是什么?
这是代码的链接。
您正在研究的算法的工作方式完全相反。如果字典是[MOSCOW][COLA]
,而输入字符串是CA
,那么算法将告诉您MOSCOW
在CA
中的所有位置,以及COLA
在CA
中的全部位置。
现在,一个特定的状态(或链接代码所称的Node
)具有类似的含义:"我们可能在COLA
中唯一的C
之后,但我们肯定不在MOSCOW
的中间"。(这可能是在CA
的第一个字符之后访问的节点。)
当搜索不同的输入(例如MOSCOLONI
)时,更容易看到算法的威力。就在看到L
之前,当前状态将意味着"我们可能在一个潜在的MOSCOW
中有5个字符,或者在一个可能的COLA
中有2个字符"重要的是,该状态同时查看所有字典单词;事实上,即使是在所有单词的所有位置,当你考虑重复字符时也是如此。