Regex DFA的正则表达式

Regex DFA的正则表达式,regex,finite-automata,automata,dfa,automata-theory,Regex,Finite Automata,Automata,Dfa,Automata Theory,有人能告诉我所附的DFA是否正确吗 对于字母∑={a,b}的语言,我假设给出DFA 我需要DFA来解决这个问题-->A={ε,b,ab}否,原因有多种: 你的自动机bab 您的自动机不接受ab 您的自动机不是DFA,至少在某些严格的定义下是这样的 关于第一点:从q1开始,我们看到b,到q2,到a,到q3,到b,到q4,这是可以接受的。我们看到了bab并接受了它 关于第二点:从q1开始,我们看到a,但没有定义转换。自动机“崩溃”并且无法接受。因此,不接受以a开头的字符串,包括ab 关于第三点:DF

有人能告诉我所附的DFA是否正确吗

对于字母∑={a,b}的语言,我假设给出DFA


我需要DFA来解决这个问题-->A={ε,b,ab}

否,原因有多种:

  • 你的自动机
    bab
  • 您的自动机不接受
    ab
  • 您的自动机不是DFA,至少在某些严格的定义下是这样的
  • 关于第一点:从
    q1
    开始,我们看到
    b
    ,到
    q2
    ,到
    a
    ,到
    q3
    ,到
    b
    ,到
    q4
    ,这是可以接受的。我们看到了bab并接受了它

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

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

    您可以使用Myhill-Nerode定理来确定您的语言的最小DFA有多少个状态。我们注意到,空状态可以附加空字符串、
    b
    ab
    以获得语言中的字符串<代码>a可以附加
    b
    ;而
    b
    可以附加空字符串。不能向
    aa
    bb
    ba
    添加任何内容来获取语言中的字符串(因此这些字符串无法区分);但是
    ab
    可以附加空字符串(因此与
    b
    无法区分)

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

  • 像空字符串一样的字符串
  • b
  • a
  • aa这样的字符串
  • 我们注意到
    b
    在语言中,因此第二个类将对应于接受状态。我们注意到,
    aa
    不能附加任何内容来获取语言中的字符串,因此该类对应于DFA中的死状态。我们通过观察新符号的附加将我们置于哪个新的等价类来编写这些状态之间的转换:

  • a
    追加到(3)中,因为将
    a
    追加到空字符串中会得到(3)中的
    a
    。追加
    b
    将我们置于(2)中,因为将
    b
    追加到空字符串将给出(2)中的
    b

  • a
    追加到
    b
    中会产生
    ba
    ,这与
    aa
    类似,因为它不是语言中任何字符串的前缀。在
    b
    之后,我们通过一个类似的参数得出(4)

  • 追加
    a
    我们得到
    aa
    ,并且在(4)中。追加
    b
    我们得到
    ab
    ,这与
    b
    类似,所以我们在(2)中

  • 从死状态到死状态的所有转换都返回到死状态;
    a
    b
    都返回到(4)

  • 你最终会得到这样的结果:

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

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


    Thnks感谢您如此详细地解释。我现在对DFA有了更好的了解。在上面的DFA中,我可以知道你给我提供了q1(接受ε)、q2(接受b)和q4(接受ab)。所以我相信为了证明接受状态的合理性,我应该在q1、q2和q4上做双圈,对吗?@jon No,只有q1和q2。q1接受空字符串,q2同时接受
    b
    ab
    。进入状态
    q3
    的唯一方法是查看一个
    a
    ,它不在语言中,因此
    q3
    不被接受<代码>q4
    是一个死状态,语言中的任何字符串都无法访问。谢谢,先生。我想我需要大量的DFA练习。
    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