ε 自动机:如果自动机的弧上允许标记 ε ,则称此自动机为 ε 自动机,记为 εNFA 。对于 εNFA (或 εDFA),总可构造等价的 NFA(或 DFA),使得 L(εNFA) = L(NFA)。换句话说,可以消除 ε 自动机中的空移(或空移环路)。ε 自动机的状态转换图中会出现若干条 ε 弧组成的空移环路或空移(NFA 在没有扫描任何输入符号的时候,也可以进行移动,这种移动称为空移)。


1,消除空移环路

           在 ε 自动机的状态转换图中找到空移环路之后,要消除它只需要把空移环路上的所有结点合并成一个结点,并消除它们所有的 ε 弧。如果其中的某一个结点是开始状态或终止状态,则将此合并之后的新结点相应设置为开始状态或终止状态。

for example:

                      如下图所示的是一个 εNFA,结点 q0 是开始状态,q3 是终止状态,结点 q0,q1 与 q4 形成一个空移环路。要消除这个空移环路,只需将3个结点 q0,q1 与 q4 合并成一个结点,以 q0 标记,并消除原来3个结点之间所有的 ε 环。由于这3个结点中的 q0 是开始状态,因此,合并之后的新结点 q0 被设置为开始状态。

wKioL1gR9LSjfTXiAAAqXZNuK5E154.png

2,消除空移

           消除某条 ε 弧的空移,需要引入若干条新弧来取代原来 ε 弧的作用。假设状态 A 有一条 ε 弧发出到状态 B,则在消除空移后,如果 B 是终止状态,则设置 A 为终止状态,而如果从开始状态经过一条 ε 路径到达状态 A,则设置 B 为开始状态。

for example:

                      如下图所示的是一个 εNFA,从状态 q1 到 q2 有一条 ε 弧,而状态 q2 没有 ε 弧发出,发出的是非 ε 弧,经弧 b 到达状态 q4,经弧 c 到达状态 q2 自身,经弧 d 到达状态 q1 。如果要消除状态 q1,q2 间的 ε 弧,则可从状态 q1 到 q2,q4 分别添加新弧 c,d和弧 b,并消除状态 q1,q2 间的 ε 弧。

wKioL1gR_6LRerrGAAAmdi-gHh0694.png

PS:要消除 q1 和 q2 结点之间的 ε 弧需要先判断结点 q2 所能到达的所有后继状态,消除 ε 弧后再构建 q1 结点到达 q2 所能到达后继状态的新弧。对于结点 q2 来说,它的后继状态有 { q1,q2,q4 },消除 ε 弧构建新的映射 t(q1,d) = q1,t(q1,c) = q2,t(q1,b) = q4,根据映射添加相应的弧得到消除空移的 NFA的状态转换图。


注意:在对 ε 自动机(ε NFA 或 ε DFA)消除空移环路和空移之后,一定要保证状态之间关系依然存在。