正则表达式为DFA

时间:2015-09-24 01:09:28

标签: regex finite-automata automata dfa automata-theory

有人可以告诉我附加的DFA是否正确吗?

我想为DFA语言Σ= {a,b}

提供DFA

我需要DFA ----> A = {ε,b,ab} enter image description here

2 个答案:

答案 0 :(得分:3)

不,原因有多种:

  1. 您的自动机bab
  2. 您的自动机不接受ab
  3. 您的自动机不是DFA,至少是一些严格的定义
  4. 关于第一点:从q1开始,我们看到b,转到q2,查看a,转到q3,查看{{ 1}},然后转到正在接受的b。我们看到了q4并接受了它。

    关于第二点:从bab开始,我们看到q1但没有定义过渡。自动机“崩溃”并且无法接受。因此,不接受以a开头的字符串,包括a

    关于第三点:通常要求DFA显示所有状态和转换,包括永不导致任何接受状态的死状态和转换。您不会显示所有转场,也不会显示自动机中的所有状态。

    您可以使用Myhill-Nerode定理来确定您的语言的最小DFA状态。我们注意到空状态可以附加空字符串abb来获取语言中的字符串; ab可附加a个;并且b可以附加空字符串。没有任何内容可以附加到baabb以获取语言中的字符串(因此这些字符无法区分);但是ba可以附加空字符串(因此与ab无法区分)。

    如此确定的等价类对应于最小DFA中的状态。我们的等价类是:

    1. 像空字符串一样的字符串
    2. b
    3. 等字符串
    4. b
    5. 等字符串
    6. a
    7. 等字符串

      我们注意到aa在语言中,因此第二个类将对应于接受状态。我们注意到b无法附加任何内容来获取语言中的字符串,因此该类对应于DFA中的死亡状态。我们通过查看新符号附加到哪个新等价类来编写这些状态之间的转换:

      1. 追加aa会将我们放入(3),因为将a附加到空字符串会产生{3}中的a。附加a会将我们放入(2),因为将b附加到空字符串会产生b,这是(2)

      2. 追加b会将我们放入(4),因为a追加到ab ba,因为它不是aa不是语言中任何字符串的前缀。附加b,我们通过类似的论证到达(4)。

      3. 追加a我们得到aa并且在(4)中。添加b后,我们会ab b,因此我们在(2)中。

      4. 从死亡状态的所有转变都返回到死亡状态; ab都会返回(4)。

      5. 你最终得到的结论是:

        q1 --a--> q3
         |        /|
         b  --b--< a
         | /       |
         vv        v
        q2 -a,b-> q4 \
                   ^ a,b
                   \_/
        

        或以表格形式:

        q    s    q'
        ==   =    ==
        q1   a    q3
        q1   b    q2
        q2   a    q4
        q2   b    q4
        q3   a    q4
        q3   b    q2
        q4   a    q4
        q4   b    q4
        

答案 1 :(得分:0)

我认为这种DFA对于那种语言是正确的。

enter image description here