我无法理解将epsilon-NFA转换为NFA的过程,所以我想知道是否有人可以帮助我:
答案是:
新NFA中的0有一个A到1,2和2.我认为这是因为Epsilon NFA中的0导致1和2与A(与Epsilon结合)。那么为什么1,2没有A步进2,因为在Epsilon NFA中1的A步为1和2?
答案 0 :(得分:2)
每当您从NFA中移除ε
时,在转换ε
转换方向时都应该小心。
在您的情况下,ε转换是从节点1到节点2,这是一个 接受国家。因此,您需要考虑所有传入的转换 国家1.
此外,当{1}在ε-转换时移动到{2},因此1也可以减少到{1,2}并且它将是接受状态。检查this question以了解发生这种情况的原因。
因此,为了删除ε-转换,检查所有传入的转换到状态1,将{1}替换为接受状态{1,2}并转换它们: -
a
时转换为状态1,状态1在读取ε
时将自动转换为状态2。所以,你应该从1到2(ε-过渡)省略这个路径,并说明在读取{1}和{2}的过渡时的状态0。因此,只有1个转换将添加到现有NFA
{0} -> {2} (on reading a) // should be drawn, not given
{0} -> {1} (on reading a) // this is already given
a
时转换为状态1,状态1在读取ε
时将自动转换为状态2。所以,你应该省略这个从1到2(ε-过渡)的路径,并说明在读取{1}和{2}本身的过渡时的状态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作为答案。