Regex 非确定性有限自动机(NFA)校正

Regex 非确定性有限自动机(NFA)校正,regex,string,algorithm,logic,nfa,Regex,String,Algorithm,Logic,Nfa,我想解决一个关于NFA的问题。说明如下:字母表{a,b,c}L1是最后一个字符与最后五个字符相同的所有字符串。例如,应该接受字符串aaacbacbca,因为最后五个字符和最后一个字符都是a。应拒绝字符串ccaab,因为最后第五个字符是c,最后一个字符是b。以下是我的想法,但我对这个主题非常熟悉,我不确定是否正确: 您目前拥有的自动机只接受以acbca结尾的字符串。以下是获得解决方案的步骤: 更改您拥有的自动机,使其能够接受具有last和five to last符号的所有字符串a 对符号b,c

我想解决一个关于NFA的问题。说明如下:字母表{a,b,c}L1是最后一个字符与最后五个字符相同的所有字符串。例如,应该接受字符串aaacbacbca,因为最后五个字符和最后一个字符都是a。应拒绝字符串ccaab,因为最后第五个字符是c,最后一个字符是b。以下是我的想法,但我对这个主题非常熟悉,我不确定是否正确:

您目前拥有的自动机只接受以
acbca
结尾的字符串。以下是获得解决方案的步骤:

  • 更改您拥有的自动机,使其能够接受具有last和five to last符号的所有字符串
    a
  • 对符号
    b
    c
  • 合并3个自动机

您目前拥有的自动机只接受以
acbca
结尾的字符串。以下是获得解决方案的步骤:

  • 更改您拥有的自动机,使其能够接受具有last和five to last符号的所有字符串
    a
  • 对符号
    b
    c
  • 合并3个自动机

您几乎是对的,但您绘制的自动机只接受以
acbca
结尾的字符串。这个将接受您想要的字符串

a,b,c     a      a,b,c   a,b,c   a,b,c    a     a,b,c
,--->[q0]--->[q1]--->[q2]--->[q3]--->[q4]--->{q5}----+>[q16]-----.
|    /|   b      a,b,c   a,b,c   a,b,c    b     a,b,c|   ^ a,b,c |
`---´ +----->[q6]--->[q7]--->[q8]--->[q9]--->{q10}---+   `-------´
      |   c      a,b,c   a,b,c   a,b,c    c     a,b,c|
      `----->[q11]-->[q12]-->[q13]-->[q14]-->{q15}---´

{q5}
这样的状态是接受状态,而像
[q0]
这样的状态是不接受状态。
q16
的意思是确保两个相等的字母相距4个字符但没有结束的字符串处于不可接受状态。对于
[q4]
州的字母
b,c
,对于
[q9]
州的字母
a,c
,以及
[q14]
州的字母
a,b
,情况可能也是如此,但为了清楚起见,我省略了它们。

你几乎是对的,但是您绘制的自动机只接受以
acbca
结尾的字符串。这个将接受您想要的字符串

a,b,c     a      a,b,c   a,b,c   a,b,c    a     a,b,c
,--->[q0]--->[q1]--->[q2]--->[q3]--->[q4]--->{q5}----+>[q16]-----.
|    /|   b      a,b,c   a,b,c   a,b,c    b     a,b,c|   ^ a,b,c |
`---´ +----->[q6]--->[q7]--->[q8]--->[q9]--->{q10}---+   `-------´
      |   c      a,b,c   a,b,c   a,b,c    c     a,b,c|
      `----->[q11]-->[q12]-->[q13]-->[q14]-->{q15}---´

{q5}
这样的状态是接受状态,而像
[q0]
这样的状态是不接受状态。
q16
的意思是确保两个相等的字母相距4个字符但没有结束的字符串处于不可接受状态。对于州
[q4]
的字母
b、c
,州
[q9]
的字母
a、c
以及州
[q14]
的字母
a、b
可能也是如此,但为了清楚起见,我省略了它们。

我想正则表达式应该是
^[abc]*([abc]{3}\1$
,但是它有一个反向引用,您必须将其扩展为3个分支。我想正则表达式应该是
^[abc]*([abc])[abc]{3}\1$
,但是它有一个反向引用,您必须将其扩展为3个分支。