将Epsilon-NFA转换为NFA

时间:2015-06-29 16:18:15

标签: state automata computation-theory nfa epsilon

我无法理解将epsilon-NFA转换为NFA的过程,所以我想知道是否有人可以帮助我:

nfae

答案是:

nfa

新NFA中的0有一个A到1,2和2.我认为这是因为Epsilon NFA中的0导致1和2与A(与Epsilon结合)。那么为什么1,2没有A步进2,因为在Epsilon NFA中1的A步为1和2?

1 个答案:

答案 0 :(得分:2)

每当您从NFA中移除ε时,在转换ε转换方向时都应该小心。

  

在您的情况下,ε转换是从节点1到节点2,这是一个   接受国家。因此,您需要考虑所有传入的转换   国家1.

     

此外,当{1}在ε-转换时移动到{2},因此1也可以减少到{1,2}并且它将是接受状态。检查this question以了解发生这种情况的原因。

     

因此,为了删除ε-转换,检查所有传入的转换到状态1,将{1}替换为接受状态{1,2}并转换它们: -

  1. 状态0在读取a时转换为状态1,状态1在读取ε时将自动转换为状态2。
  2. 所以,你应该从1到2(ε-过渡)省略这个路径,并说明在读取{1}和{2}的过渡时的状态0。因此,只有1个转换将添加到现有NFA

    {0} -> {2} (on reading a)    // should be drawn, not given
    {0} -> {1} (on reading a)    // this is already given
    
    1. 状态2在读取a时转换为状态1,状态1在读取ε时将自动转换为状态2。
    2. 所以,你应该省略这个从1到2(ε-过渡)的路径,并说明在读取{1}和{2}本身的过渡时的状态2。因此,只有1个转换将添加到现有NFA

      {2} -> {2} (on reading a)    // a self-loop, should be drawn, not given
      {2} -> {1} (on reading a)    // this is already given
      
        

      请特别注意用状态替换状态{1}   由于上述原因,接受州{1,2}。

      没有更多的传入箭头指向状态1,因此解决了所有依赖关系。新的NFA会将您给定的NFA作为答案。