这种NFA到DFA的转换令我感到困惑

时间:2017-03-12 13:12:15

标签: finite-automata

我试图将此NFA转换为DFA。

enter image description here

我有NFA和DFA的转换表: enter image description here

然后我尝试为空字符串设置不同的状态。但无论我做什么,我都会不断获得与原始NFA无关的DFA。

我有点过了一圈,有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

嗯,据我所知,为NFA生成等效DFA的算法将DFA的状态集视为NFA状态集的幂集;也就是说,如果我们的NFA具有状态q0q1,则我们的DFA将具有状态{}, {q0}, {q1}, {q0, q1}。然后,我们按以下方式添加制作:如果NFA在q上从q'转换为a,则DFA会从p转换为{{1在p'a是与NFA状态集相对应的状态,该状态集可以通过与NFA状态的p'对应的集合中的任何状态来访问在输入p上。对我们来说:

  • a只能导致自己;这是一个死态。在{}{}上将{}转换为0
  • 1包含{q0}q0q0位于q10无处可见。 1上的{q0}{q0, q1}以及0上的{q0}{}的转化。
  • 1包含{q1}q1q0位于q11无处可见。 0上的{q1}{q0, q1}以及0上的{q1}{}的转化。
  • 1包含{q0, q1}q0q1 q0q0 q1 0 q1无处可去;在{q0, q1)上将{q0, q1}转换为0q1 q0q1 1 q0 1无效{q0, q1};因此,{q0, q1}上的1转换为 0 | 1 {} | {} | {} {q0} | {q0,q1} | {} {q1} | {} | {q0,q1} {q0,q1} | {q0,q1} | {q0,q1}

这是一张表:

           0,1
          /   \
         |     |
          \    v
{q0} -0-> {q0,q1} <-1- {q1}
   \                   /
    \                 /
     \-1--> { } <--0-/

这是一张图表:

{q0}

请注意,在此构造中,最终状态是DFA的任何状态,对应于包含NFA接受状态的集合。对我们而言,接受状态为{q0,q1}q0,因为{q0}是NFA中唯一的接受状态。

在这种结构中还要注意,初始状态是对应于仅包含NFA初始状态的集合的状态;对我们来说,var number = $("#number").val(); var range = 5; var points = Math.ceil(number / range) + 1; alert(points + ' points!');