【问题标题】:Nondeterministic Finite Automata construction非确定性有限自动机构造
【发布时间】:2018-09-26 00:03:58
【问题描述】:

感觉这应该比现在更容易,但我遇到了问题。问题如下:

为以下语言 L = {ab,ba}* 构造一个 NFA。所以,我知道我可以在字符串中包含 ab 或 ba 的任意组合,但是如果说我连续得到两个 a,我是否需要一个死状态,或者它只是重新开始?这是我有的两个图表:

这些都是正确的吗?而且由于它们是 NFA 与 DFA,我是否需要在这里某处使用 lambda 边缘?

编辑: 这第三个是否正确,因为我需要两个最终状态?

【问题讨论】:

  • 您的所有示例都是 DFA(当然 NFA 也是如此)。您的第一个示例不正确,因为它接受语言之外的字符串(例如aab)。你的第二个和第三个例子几乎是正确的,但不是最小的。 DFA 都不接受该语言中的空字符串。具有 3 个状态(或 4 个具有显式死状态)的最小 DFA 是可能的。状态{q1, q2, q3}q1 是开始和接受状态。转场:q1,a,q2, q1,b,q3, q2,b,q1, q3,a,q1.

标签: finite-automata non-deterministic


【解决方案1】:

如果您要创建 NFA,则不需要死状态;你可以让NFA崩溃。 DFA 可能确实需要死状态来确保完整性,具体取决于您的定义。

这是一个 NFA(q0 是初始状态,也是唯一的接受状态):

         b
      +------+
      |      |
      V  a   |    
  +->q0 ---> q1
  |   |
a |   | b
  |   V
  +--q2

要使其成为 DFA,您可以添加一个死状态 q3,并使上面未另外定义的所有转换都以 q3 终止。

【讨论】:

    猜你喜欢
    • 2019-06-23
    • 2018-07-14
    • 2023-03-30
    • 2017-11-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2013-11-29
    相关资源
    最近更新 更多