Regex 非确定性有限自动机(NFA)校正
我想解决一个关于NFA的问题。说明如下:字母表{a,b,c}L1是最后一个字符与最后五个字符相同的所有字符串。例如,应该接受字符串aaacbacbca,因为最后五个字符和最后一个字符都是a。应拒绝字符串ccaab,因为最后第五个字符是c,最后一个字符是b。以下是我的想法,但我对这个主题非常熟悉,我不确定是否正确: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
您目前拥有的自动机只接受以
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个分支。