如何使用Aho-Corasick在给定的字符串集中查找一段文本



我有Aho-Corasick算法的代码。但是,当在给定的字符串列表中搜索文本时,我仍然不知道如何在查找过程中使用状态信息。

例如,我有一个字符串列表[MOSCOW][COLA],现在我需要确定CA是否在列表中,如果是,它的位置是什么?

这是代码的链接。

您正在研究的算法的工作方式完全相反。如果字典是[MOSCOW][COLA],而输入字符串是CA,那么算法将告诉您MOSCOWCA中的所有位置,以及COLACA中的全部位置。

现在,一个特定的状态(或链接代码所称的Node)具有类似的含义:"我们可能在COLA中唯一的C之后,但我们肯定不在MOSCOW的中间"。(这可能是在CA的第一个字符之后访问的节点。)

当搜索不同的输入(例如MOSCOLONI)时,更容易看到算法的威力。就在看到L之前,当前状态将意味着"我们可能在一个潜在的MOSCOW中有5个字符,或者在一个可能的COLA中有2个字符"重要的是,该状态同时查看所有字典单词;事实上,即使是在所有单词的所有位置,当你考虑重复字符时也是如此。

最新更新