NFA到RE Kleene定理

时间:2013-01-30 01:13:11

标签: regex finite-automata computation-theory nfa

这是我的NFA:

NFA

这是我的尝试。

  • 创建新的开始和最终节点
  • 接下来消除左边的第二个节点,它给我ab
  • 接下来从右边消除第二个节点,它给我ab * a
  • 接下来从左边消除第二个节点,它给了我abb * b
  • 接下来从右边消除第二个节点,它给出了b + ab * a

导致abb b(b + ab a)*

这是正确的答案吗?

1 个答案:

答案 0 :(得分:1)

不,你不正确:(

您不需要创建开始状态。 -符号的第一个状态是开始状态。此外,a,b标签表示ab但不是ab

有一个名为Arden's theoram的定理,将有助于将NFA转换为RE

此NFA的正则表达式是什么?

在你身上NFA DFA的初始部分:

第1步:

(-) --a,b-->(1)   

表示(a + b)

步骤2:接下来从统计1到2, note 状态2接受状态最终(具有+符号)。

(1) --b--->(2+)

所以你需要(a+b)b才能达到最终状态。

第3步:您处于最终状态2,可以接受任意数量的b(任意数字表示一个或多个)。这是因为状态2上的自循环带有标签b

所以,b*接受了状态-2。

第4步:

实际上state-2上有两个循环。

  • 一个是带有标签b的自循环,正如我在步骤3 中所描述的那样。其表达式为b*
  • 状态-2的第二个循环是通过状态-3 状态-2上的第二个循环的表达式是aa*b
    为什么表达aa*b

    因为:

              a-  
              ||               ====>  aa*b
              ▼|   
    (2+)--a-->(3) --b-->(2+)   
    

因此,在步骤3和步骤4中,由于状态-2上的循环运行,可以通过b标记为通过aa*b ===> ; (b + aa*b)*

因此,您的NFA的正则表达式是:

(a+b) b (b + aa*b)*