【问题标题】:How to convert an NFA to the corresponding Regular Expression?如何将 NFA 转换为相应的正则表达式?
【发布时间】:2012-12-26 13:43:03
【问题描述】:

我正在为明天的考试而学习,并且我查看了许多关于如何将 NFA 转换为正则表达式的教程,但我似乎无法确认我的答案。按照教程,我解决了 NFA

我的解决方案是:

aba

我说的对吗?

【问题讨论】:

  • 取决于你在课堂上学到的算法。如果我是 TA,我只会接受通过正确执行算法获得的正则表达式...可能不同,包含 + 和括号等。
  • 我在课堂上学到的算法包括将自动机转换为 GNFA,然后通过一次消除一个状态来减少。

标签: regex computation-theory nfa


【解决方案1】:

如何将 NFA 转换为正则表达式?

您的答案a*ba* 是正确的。我可以在给定图像中从NFA 驱动您的答案,如下所示:

  • 在开始状态 q0 上有一个自循环,标签为 a。因此,初始(前缀)可以有任意数量的as,包括RE中的空^。所以正则表达式(RE)以a*开头。

  • 您只需要一个b 即可达到最终状态。实际上是一个接受字符串;在ab 的字符串中必须至少有一个b。所以 RE a*b 到达 q1 或 q2。两者都是最终状态

  • 一旦达到最终状态(q1 或 q2)。字符串中不可能有其他bb 没有来自 q1 和 q2 的出边)。

  • 只有a 可以在 q1 和 q2 处出现。此外,a 在 q1 或 q2 在 q1 、 q2 和两者都是最终的。因此,在符号 b 之后,任何数量的 as 都可以在后缀中。 (所以字符串以 a* 结尾)。

RE 是a*ba*

另外,它的DFA如下:

 DFA: 
======

    a-          a-  
    ||          ||
    ▼|          ▼|
--►(q0)---b---►((q1))      

    a*    b      a*    :RE  
                       ==== 
  • q0 处的任意数量的as,即:a*

  • 一旦你得到b,你就可以切换到最终状态q1b

  • 在最终状态下,任何数量的 a 都是可能的:a*

它是最小化的 DFA!

这是我在FAsREs上的一些更有趣的回答,我相信对你有用:

  1. HOW TO WRITE REGULAR EXPRESSION FOR A DFA
  2. RE TO DFA
  3. Regular Expression to DFA
  4. Constructing an equivalent Regular Grammar from a Regular Expression
  5. How to Eliminate Left recursion in Context-Free-Grammar
  6. Is a* the same as (a*)*?
  7. IN CONTEXT OF REGULAR EXPRESSION: is (AB)* = A*B*?

【讨论】:

    【解决方案2】:

    这个答案是正确的,因为以下两个都是正确的:

    • 任何匹配正则表达式的字符串都会导致 NFA 以接受状态(双圈状态)结束
    • 任何导致 NFA 以接受状态结束的字符串也与正则表达式匹配

    但是,我无法查看你的作品,因为你还没有发布任何作品。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2010-10-18
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多