我是自动机理论的新手。以下问题适用于练习:
让一种语言由以不同符号开头和结尾的单词组成,并且字母为{0,1}。例如,001,10110101010100,10和01都被接受。但101,1,0和1010001101被拒绝。
我如何:
我试图发布我画的DFA图片,但遗憾的是我需要10个声明来发布图片,我还没有。
答案 0 :(得分:2)
要回答这个问题,我认为首先识别正则表达式会更容易。
正则表达式
1(1|0)*0 | 0(1|0)*1
(*表示Kleene的明星行动)
现在我们将这个正则表达式转换为等效的有限自动机。
构建DFA
对于给定语言(正则表达式),您可以使用Thompson构造函数[1]轻松设计NFA-∧(或某些文本中的NFA-ε),然后将其转换为不带lambda过渡的NFA。 然后可以使用子集构造方法将此NFA映射到等效的DFA。 [2]
如果需要,您可以进一步减少此DFA以获得对于给定常规语言而言唯一的最小DFA。 (Myhill-Nerode定理)[3]
Regex→NFA-∧→NFA→DFA→DFA(最小), 这是标准程序。
[1] http://en.wikipedia.org/wiki/Thompson%27s_construction_algorithm
[2] http://www.cs.nuim.ie/~jpower/Courses/Previous/parsing/node9.html
[3] http://en.wikipedia.org/wiki/Myhill%E2%80%93Nerode_theorem
答案 1 :(得分:0)
我们可以在这里获得两种可能性 - 1)字符串以0开头,以1 =>结尾; [0(0 | 1)* 1] 2)以1开头并以0 =>结束的字符串; [1(0 | 1)* 0] 同样来自被拒绝的字符串,我们知道最小长度为2。
因此最终表达式为[0(0 | 1)* 1] | [1(0 | 1)* 0] NFA会是这样的