Java 有限自动机字符串匹配器

Java 有限自动机字符串匹配器,java,string,algorithm,string-matching,finite-automata,Java,String,Algorithm,String Matching,Finite Automata,我正在尝试使用java构建一个FA字符串匹配器。我有以下伪代码 对于有限自动机匹配算法,必须计算过渡函数。下面的算法计算转换函数计算给定的模式P和字母σ 在上面的代码中,我无法理解min(m+1,q+2)来自哪里。 (我确实理解为什么它是k=min(m+1,q+2)而不是k=min(m,q+1),但为什么我们首先要m和q+1的最小值) 在5-7行之间,它将k减少1,直到Pk是Pqa的后缀,但我不明白Pqa代表什么 另外,如何将第8行转换为java代码?二维数组是否足够,或者我是否需要另一个数

我正在尝试使用java构建一个FA字符串匹配器。我有以下伪代码

对于有限自动机匹配算法,必须计算过渡函数。下面的算法计算转换函数计算给定的模式P和字母σ

在上面的代码中,我无法理解min(m+1,q+2)来自哪里。 (我确实理解为什么它是k=min(m+1,q+2)而不是k=min(m,q+1),但为什么我们首先要m和q+1的最小值)

在5-7行之间,它将k减少1,直到Pk是Pqa的后缀,但我不明白Pqa代表什么

另外,如何将第8行转换为java代码?二维数组是否足够,或者我是否需要另一个数据结构


一个相关的问题:

在内部repeat-until循环中,我们有Pq='abdab',字符串是'abdab',我们的字母表是abcd,我们正在为字母表中的每个符号寻找最佳替代,然后存储到新状态的转换。在上面的例子中,通过“a”,我们应该移到开头,“b”移到最开头,c延长匹配,d符号应该存储指向初始字符串中第三个符号的指针。所以Pqa应该读作Pq加上字母表中的字符a

编辑为什么我们想要min of(q+2和m+1),因为我们想要向前执行一步,并且我们还想要限制字符串的长度,这是显而易见的。为什么我们不能执行q+3,+4?这是因为我们只添加了一个字符,不可能将最佳匹配从q扩展到q+2,+3,只添加一个字符