【问题标题】:Convert the given NFA转换给定的 NFA
【发布时间】:2019-05-21 22:34:55
【问题描述】:

问题)Σ={a,b},NFA如下图所示:

  1. 使用 NFA 到 DFA 过程,将给定的 NFA 转换为 DFA。
  2. 使用 reduce 过程,最小化 DFA 中的状态

我为 nfa 和 dfa 做了一个转换表,但不知道 q2 应该去哪里,要么是 q0,要么是创建一个新的状态,称为 q4

【问题讨论】:

    标签: automata dfa nfa


    【解决方案1】:

    通过将 NFA 状态的子集视为相应 DFA 的潜在状态,我们可以使用子集或幂集构造从 NFA 到 DFA。我们的 DFA 的初始状态将是 {q0},这意味着在读取任何输入之前只能达到 q0。从 {q0} 读取 a 后,我们可以通过消耗 a 到达 q2,然后通过 lambda-transition 再次到达 q0。因此,f({q0}, a) = {q0, q2}。在 {q0} 中读取 b 后,我们只能转到 q1;所以 f({q0}, b) = {q1}。

    我们在需要转换的 DFA 中引入了两个新状态,{q0, q2} 和 {q1}。稍加思考就会发现 {q0, q2} 具有与 {q0} 完全相同的转换。在输入 a 时,q1 可以转到 q1、q2 或 q0(通过 q2);在输入 b 上,它可以转到 q2 或 q0(通过 q2)。因此,f({q1}, a) = {q0, q1, q2} 和 f({q1}, b) = {q0, q2}。

    我们已经看到 {q0, q2} 并且知道它的转换。但是,我们现在需要 {q0, q1, q2} 的转换。似乎在输入 a 上,NFA 的所有状态都可以从某个状态到达;输入 b 也是如此。所以,f({q0, q1, q2}, a) = {q0, q1, q2} 和 f({q0, q1, q2}, b) = {q0, q1, q2}。

    我们没有在此迭代中引入任何新状态,因此我们拥有 DFA 中可能需要的所有状态。我们的 DFA 如下所示:

    q            s    q'
    {q0}         a    {q0, q2}
    {q0}         b    {q1}
    {q0, q2}     a    {q0, q2}
    {q0, q2}     b    {q1}
    {q1}         a    {q0, q1, q2}
    {q1}         b    {q0, q2}
    {q0, q1, q2} a    {q0, q1, q2}
    {q0, q1, q2} b    {q0, q1, q2}
    

    除了 {q1} 之外的所有状态都在接受,因为它们都包含来自 NFA 的接受状态 q0。现在,在我们最小化这个 DFA 之前,让我们重命名状态:

    qA = {q0}
    qB = {q0, q2}
    qC = {q1}
    qD = {q0, q1, q2}
    

    我们可以迭代地划掉不能组合的状态对,如下所示:

       qA,qB    qA,qC    qA,qD    qB,qC    qB,qD    qC,qD
       --------------------------------------------------
    1.          xxxxx             xxxxx             xxxxx
    Reason: qC cannot be combined with others since it is
            not accepting and the others are
    
    2.                   xxxxx             xxxxxx
    Reason: f((qA, qD), b) and f((qB, qD), b) equal (qC, qD)
            which was crossed off during the last iteration.
    
    qA,qB cannot be crossed off, so these states can be
    combined in a minimal DFA.
    

    得到的最小 DFA 为:

    q            s    q'
    qAB          a    qAB
    qAB          b    qC
    qC           a    qD
    qC           b    qAB
    qD           a    qD
    qD           b    qD
    

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 1970-01-01
      • 2014-10-23
      • 2011-08-16
      • 2013-01-28
      • 2019-10-18
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多