Python 如何检查我的线路是否与NFA匹配?
我制作了NFA,它从正则表达式生成3d数组,例如(01*)表达式。我明白了:Python 如何检查我的线路是否与NFA匹配?,python,algorithm,nfa,automaton,Python,Algorithm,Nfa,Automaton,我制作了NFA,它从正则表达式生成3d数组,例如(01*)表达式。我明白了: [[FROM,TO,TRANSITION]] [['q0', 'q1', '0'], ['q1', 'q2', ':e:'] ,['q1', 'q4', ':e:'] , ['q2', 'q3', '1'], ['q3', 'q2', ':e:'], ['q3', 'q4', ':e:'] 如何编写一个方法来测试满足此自动机的字符串?例如“011111”将返回q0 q1 q2 q3 q3 q2 q3
[[FROM,TO,TRANSITION]]
[['q0', 'q1', '0'], ['q1', 'q2', ':e:'] ,['q1', 'q4', ':e:'] ,
['q2', 'q3', '1'], ['q3', 'q2', ':e:'], ['q3', 'q4', ':e:']
如何编写一个方法来测试满足此自动机的字符串?例如“011111”
将返回q0 q1 q2 q3 q3 q2 q3 q3 q2 q3 q3 q3 q3 q2 q3 q3 q3 q3 q3 q4
s->s'
转换的字符与字符串中位置pos
处的字符匹配,则还有一条边(s,pos)->(s',pos+1)
构建图形后,您只需检查一对
(t,string.length())
对于至少一个终端状态t
(您可以使用任何图形遍历算法进行检查,例如深度优先搜索)那么,如果自动机是确定性的,你知道怎么做吗?(如果知道,应用搜索引擎foo的算法来构建DFA)有很多现有的库可以使用,因此你不必重新发明weel。我建议为Java开发一个工业级的、易于使用的自动化包。这正是你想要的。如果您需要更多关于为了匹配给定字符串而进行了哪些特定转换的信息,那么扩展Automaton类也非常容易?似乎“q4”是一个接受的状态——但这是在哪里表达的呢?保罗·汉金,很抱歉我忘了。你写对了