由1的NFA分隔的一对零?

时间:2017-09-20 19:48:27

标签: finite-automata computation-theory dfa nfa

我正在处理一种语言L = {每对零被1分隔长度为4i,i> = 0}

e.g。应该接受110011110,因为前两个零被分开。然后下一对由4个分开。

这是我对NFA的尝试,遗失了什么?

enter image description here

1 个答案:

答案 0 :(得分:1)

我们可以直接使用Myhill-Nerode来获得这种语言的最小DFA。推理很简单。

  1. e,空字符串后面可以跟L中的任何字符串,以获取L中的字符串。
  2. 0之后可以是1 *或(1 ^ 4i)L来获取L中的字符串。
  3. 1之后可以跟L到达L中的字符串。这意味着它与空字符串无法区分。这也意味着我们不需要担心以1开头的较长字符串,因为它们将由不以1开头的较短字符串覆盖。
  4. 00之后可以跟0相同的东西,所以它是无法区分的。这也意味着我们不需要担心以00开头的较长字符串,因为它们由较短的字符串处理而不是。
  5. 01之后可以是1 *或111(1 ^ 4i)L来获得L中的字符串。
  6. 10,11可以忽略,因为它们以1开头(见3)
  7. 000,001可以忽略,因为它们以00开头(见4)
  8. 010后面没有任何东西可以在L中得到一个字符串。我们也可以忽略任何以此开头的东西,因为它不会导致L中的字符串。
  9. 011可以跟随1 *或11(1 ^ 4i)L来获得L中的字符串。
  10. 100,101,110,111可以忽略,因为它们以1开头(见3)
  11. 0000,0001,0010,0011可以忽略,因为它们以00开头(见4)
  12. 0100,0101可以忽略,因为它们以010开头(见8)
  13. 0110后面没有任何内容可以找到L中的字符串,因此与010无法区分。
  14. 0111之后可以是1 *或1(1 ^ 4i)L来获得L中的字符串。
  15. 1000,1001,11010,1011,1100,1101,1110,1111都可以忽略,因为它们以1开头(见3)
  16. 唯一可以与短字符串区分的长度为4的字符串为0111; 01110与010无法区分,因为没有任何东西可以将它引向L中的字符串,而01111与0无法区分,因为它可以跟随1 *或(1 ^ 4i)L来获得L中的某个字符串。
  17. 这可能看起来很多工作,但这是一个非常简单的练习。我们可以回过头来列出我们完整的最短长度可区分字符串:

    1. e,从上面第1点开始
    2. 0,来自上面的第2点
    3. 01,来自上面第5行
    4. 010,来自上文第8点
    5. 011,从第9点开始
    6. 0111,从第14点开始
    7. 要记下DFA,我们需要为这些最短长度可区分字符串中的每一个提供一个状态。从对应于字符串x的状态的转换将导致对应于通过将输入符号连接到x而形成的字符串的状态。所以:

                  ___________________________
                  |                         ^
              0   V  1       1        1     | 1
      --->(e)--->(0)--->(01)--->(011)--->(0111)
          \_/    \_/      | 0     | 0       | 0
           1      0       |       V         V
                          |<-----------------
                          V
                          (010)
                          \___/
                           0,1
      
      1. e是初始状态。
      2. e的循环状态为1,因为e.1 = 1且1与e无法区分。不可区分的字符串在最小DFA中导致相同的状态。
      3. 由于e.0 = 0,因此e的状态变为0的0状态,并且0可以与相同或更短长度的所有字符串区分开。
      4. 状态0导致状态01导致状态011导致状态0111在1s,因为0111 = 011.1 = 01.1.1 = 0.1.1.1并且这些都可以与相同或更短长度的字符串区分开。
      5. 0111因为0111.1 = 01111而导致0对1,这与0无法区分。
      6. 状态0,01,011和0111导致0上的状态010,因为0.0 = 00,01.0 = 010,011.0 = 0110和0111.0 = 01110与010无法区分。
      7. 010导致自己在所有输入上,因为没有任何东西可以添加到它来获得L中的字符串,所以对于任何在前面的连接都是如此。
      8. 现在我们有了结构,我们只需要查看每个状态并说出它的规范字符串是否在L中。如果是这样,状态就是接受;否则,它不是。

        1. e在L中,因此(e)正在接受。
        2. 0在L中,所以(0)正在接受。
        3. 01在L中,所以(01)正在接受。
        4. 010在L中,因此(010)不接受。
        5. 011在L中,所以(011)正在接受。
        6. 0111在L中,因此(0111)正在接受。
        7. 这样就完成了L的最小DFA的推导。