epsilon转换如何用于NFA到DFA转换?

时间:2019-10-26 23:50:55

标签: dfa nfa

这是NFA: DFA

以下是我为DFA创建的两个表,然后尝试了与DFA等效的表: DFA

问题在于它不能解释epsilon,因为当有epsilon箭头时,我不知道如何转换。

2 个答案:

答案 0 :(得分:1)

这是epsilon-NFA,只需将epsilon-NFA转换为等效的NFA,而无需epsilon过渡。制作表格,就像将NFA转换为DFA一样,不仅要检查输入与该状态的关系,还应首先检查epsilon转换的状态,然后再检查输入,然后再使用epsilon转换(这称为epsilon-closure)。这样,您将获得输入将达到的状态集。您唯一需要做的就是使用epsilon过渡作为最终状态来标记可以达到最终状态的任何状态。然后,您可以构建没有ε过渡的NFA,然后可以使用您的知识将其转换为DFA。只是一个例子;在您的表中,您显示B的输入0有一个空集,但实际上它可以将epsilon转换为C并在那里取一个0,因此它实际上不是一个空集。

答案 1 :(得分:1)

要说明epsilon过渡,可以在读取下一个符号前后进行任意数量的epsilon过渡。因此,您不仅要考虑在阅读符号0时可以去的地方(例如),而且还要考虑在进行ε* 0 ε*之前和之后的epsilon过渡时可以去的地方。 / p>

这意味着,当您从状态{A}开始并读取符号0时,您可以进入以下状态:

A --0--> B
A --0--> B --ε--> C
A --0--> C
A --ε--> B --ε--> C --0--> C

要阅读符号1,可以进入以下状态:

A --1--> A
A --1--> A --ε--> B
A --1--> A --ε--> B --ε--> C
A --ε--> B --1--> B
A --ε--> B --1--> B --ε--> C
A --ε--> B --ε--> C --1--> C

因此,在生成的DFA中,过渡将如下所示:

+-------+---------+---------+
| state |    0    |    1    |
+-------+---------+---------+
|  {A}  |  {B,C}  | {A,B,C} |
+-------+---------+---------+