我想制作正则表达式,其偶数b和奇数a也是DFA和NFA
为此我在DFA
我得到了这两个 Regular Expression
Regular Expression
即使没有b (a*a*a*bb)*
Regular Expression
对于奇数的(a b*b*)(a b*b*a)*
问题:我做出了正确的DFA吗?
DFA
转换为NFA
? 编辑:我从Grijesh Chauhan
答案获得了DFA
仍然无法进行正则表达式,只允许偶数个b和奇数nubmer。
我也试过这个正则表达式
(a(bb)*(aa)*)*
注意:从上面RE只生成那些从a开始的字符串,但是我想要那个生成偶数b的字符串和从a或b开始的a的奇数的字符串的RE / p>
答案 0 :(得分:2)
正则表达式不正确。他们应该是
a*(ba*ba*)*
为偶数b b*ab*(ab*ab*)*
对于奇数个有一种系统的方法来执行这两者的合并,因为每个正则表达式都可以由状态机表示,反之亦然,并且肯定有一种方法来合并状态机,使得结果状态机接受任何一个两个状态机接受,但我不记得如何直接在正则表达式上完成。
答案 1 :(得分:2)
您的DFA不正确。人们可以看到这一点,因为你有奇数长度的周期。在这些周期之后改变偶数/奇数奇偶校验。所以我可以从" babb"开始您的DFA接受的是,具有奇数个b和奇数个a' s。 q0-> q1-> q2是3a的循环,因此当我处于其中一种状态时添加3 a并不会改变自动机接受,所以你的自动机接受&#34 ; aaababb"尽管没有奇数的偶数或偶数的b。 (此外,你的机器无法使用" bab",尽管它具有奇数个&b; s和偶数个b'
您的DFA应至少跟踪a和b的数量的奇偶校验。所以你应该从4个州开始。 Q_ {偶数,偶数},Q_ {偶数,奇数},Q_ {奇数,偶数}和Q_ {奇数,奇数}。以这种方式标记状态后,应该直接设置转换并选择应该是初始状态和接受状态。
您的正则表达式也存在一些问题。我会注意到a*
表示0或更多,所以a*a*
表示0或更多,其后是0或更多a。这意味着a*a*
= a*
。除此之外,请看格奥尔格的答案。
传统的定义是每个DFA也是NFA。从NFA转到DFA时,转换可能会出现问题。
有关正则表达式可以进行代数的讨论,请参阅Need Regular Expression for Finite Automata: Even number of 1s and Even number of 0s。
答案 2 :(得分:0)
使用这个DFA ....可能会帮助你......我用油漆做的,所以看起来不漂亮......