“{a,b}

时间:2015-04-27 21:31:36

标签: regex regular-language finite-automata dfa

我想制作正则表达式,其偶数b和奇数a也是DFA和NFA 为此我在DFA

下面做了

我得到了这两个 Regular Expression

  1. Regular Expression即使没有b (a*a*a*bb)*

  2. Regular Expression对于奇数的(a b*b*)(a b*b*a)*

  3. 问题:我做出了正确的DFA吗?

    • 如果两个正则表达式都正确,如何将上面两个正则表达式合并为一个??
    • 如何将DFA转换为NFA

    编辑:我从Grijesh Chauhan答案获得了DFA  仍然无法进行正则表达式,只允许偶数个b和奇数nubmer。 我也试过这个正则表达式

      

    (a(bb)*(aa)*)*

    注意:从上面RE只生成那些从a开始的字符串,但是我想要那个生成偶数b的字符串和从a或b开始的a的奇数的字符串的RE / p>

    enter image description here

3 个答案:

答案 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 ....可能会帮助你......我用油漆做的,所以看起来不漂亮...... enter image description here