当您从 NFA 中删除 ε 时,您应该在转换时小心 ε 转换的方向。
在您的情况下,ε 转换是从节点 1 到节点 2,这是一个
接受状态。因此,您需要考虑所有传入的转换
状态1。
此外,由于 {1} 在 ε 转换时移动到 {2},所以 1 也可以减少到 {1,2} 并且它将是一个接受状态。查看this question 了解为什么会发生这种情况。
因此,为了去除 ε-transition,检查所有传入的状态 1 的转换,将 {1} 替换为接受状态 {1,2} 并转换它们:-
- 状态 0 在读取
a 时会转换到状态 1,状态 1 会在读取到 ε 时自动转换到状态 2。
因此,您应该省略从 1 到 2(ε-transition)的这条路径,并说在读取 a 时状态 0 会同时转换为 {1} 和 {2}。因此,只有 1 个转换将作为
添加到现有 NFA
{0} -> {2} (on reading a) // should be drawn, not given
{0} -> {1} (on reading a) // this is already given
- 状态 2 在读取
a 时会转换到状态 1,而状态 1 在读取到 ε 时会自动转换到状态 2。
因此,您应该省略从 1 到 2(ε 转换)的这条路径,并说读取 a 时的状态 2 转换到 {1} 和 {2} 本身。因此,只有 1 个转换将作为
添加到现有 NFA
{2} -> {2} (on reading a) // a self-loop, should be drawn, not given
{2} -> {1} (on reading a) // this is already given
请特别注意将状态 {1} 替换为
由于上述原因,接受状态 {1,2}。
没有更多指向状态 1 的传入箭头,因此所有依赖关系都已解决。新的 NFA 匹配您给定的 NFA 作为答案。