【问题标题】:NFA to an RE Kleene's TheoremNFA 到 RE Kleene 定理
【发布时间】:2013-01-30 01:13:10
【问题描述】:

这是我的 NFA:

这是我的尝试。

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

这导致abbb (b+aba)*

这是正确的答案吗?

【问题讨论】:

标签: regex finite-automata computation-theory nfa


【解决方案1】:

不,你不正确:(

你不需要创建启动状态。带有- 符号的第一个状态是开始状态。同样a,b 标签表示ab 但不是ab

有一个定理叫Arden's theoram,将有助于将NFA转化为RE

什么是这个 NFA 的正则表达式?

在你NFA DFA 的初始部分:

第一步:

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

表示 (a+b)

step-2:接下来从 stat 1 到 2,note state 2 正在接受 state final(有+ 符号)。

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

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

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

所以,b* 在状态 2 上被接受。

第四步:

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

  • 一个是带有标签b的自循环,正如我在step-3中描述的那样。它的表达式是b*
  • 状态 2 上的第二个循环是通过状态 3。
    state-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)*

【讨论】:

  • 我留下了一些明显的解释。如果您还有其他疑问,请告诉我。您可以通过我的个人资料在REFA 上找到更多有用的问题
猜你喜欢
  • 1970-01-01
  • 2017-01-20
  • 2018-03-14
  • 2014-10-23
  • 2011-01-02
  • 2010-11-23
  • 1970-01-01
  • 2015-09-16
  • 2012-10-20
相关资源
最近更新 更多