Algorithm Aho-Corasick算法的输出函数

Algorithm Aho-Corasick算法的输出函数,algorithm,data-structures,substring,aho-corasick,Algorithm,Data Structures,Substring,Aho Corasick,我对Aho Corasick算法的输出函数的实现有一个问题。总的来说,我不太明白输出函数是如何工作的。 根据in-goto函数,我将适当的模式索引放入输出,如output[currentState]=patternIndex 在fail函数中,我将状态S的现有输出与故障状态S的输出合并,如output[S]+=output[fail[S]]在搜索功能中,我使用这样的条件:if(output[state])!=0)然后我们找到我们的模式。 但这种方法不起作用,我得到了一个毫无意义的结果。也许,输出

我对Aho Corasick算法的输出函数的实现有一个问题。总的来说,我不太明白输出函数是如何工作的。 根据in-goto函数,我将适当的模式索引放入输出,如
output[currentState]=patternIndex
在fail函数中,我将状态S的现有输出与故障状态S的输出合并,如
output[S]+=output[fail[S]]在搜索功能中,我使用这样的条件:
if(output[state])!=0)然后我们找到我们的模式。
但这种方法不起作用,我得到了一个毫无意义的结果。也许,输出函数的伪代码在那篇文章中意味着什么,我不知道


我得到的带位映射的输出函数在大多数情况下也不能正常工作。错误模式与此条件匹配
if((输出[currentState]&(132位按位操作,如下所示

模式:
他,她,他的,她的

input: shethehishetheehershehehishe
州总数为
9
2,5,7,9
州为最终州,如下所示

输出函数表示在当前状态下匹配的模式。 比如:

[code>out[2]=他,out[5]=她/他,out[7]=他的,out[9]=她的
代码“out[currentState]|=(1)本文主要是关于构造状态机(通过生成表)输出“函数”实际上也是一个表:列表(可能/大部分为空)当达到状态时应该发出的输出符号。我理解它,但我不太理解如何填充输出。我教了一门关于数据结构的课程,并将其组合在一起,这说明了如何从第一原理提出算法。如何计算输出链接的描述从幻灯片405开始。
我不太清楚理解为什么使用逐位运算进行输出计算。
只是为了避免使用二维数组。位掩码用于对一小组小整数(匹配字符串的数目)进行编码
out[2] = he, out[5] = she/he, out[7] = his, out[9] = hers

The code "out[currentState] |= (1 << i)" just like below 

out[2] = 0000 0000 0000 0000 0000 0010 <-- means number 1(he) pattern matched 

out[5] = 0000 0000 0000 0000 0000 0110 <-- means number 1(he) and number 2(she) matched