📜  状态消除方法将DFA / NFA /Ɛ-NFA转换为正则表达式

📅  最后修改于: 2021-06-29 18:37:00             🧑  作者: Mango

状态消除方法:
将DFA / NFA //Ɛ-NFA转换为相应正则表达式的规则。

Arden方法无法转换Ɛ-NFA。通过状态消除方法,您可以方便快捷地找到RE,而无需凭空想象。

规则1 :
如果没有进入起始状态的进入边,则继续检查其他规则。如果存在到初始状态的传入跃迁,则要摆脱传入的边缘,请在没有传入边缘的情况下进行新的开始,并通过Ɛ过渡将输出的边缘变为旧的开始状态。之前的初始状态现在是正常状态,并带有传入的Ɛ-跃迁。

规则2:
如果没有从最终状态传出的边沿,则继续检查最后一条规则。如果存在来自最终状态的传出过渡,则要摆脱传出边缘,请创建新的最终状态,不包含传出边缘,而从Ɛ-过渡的旧最终状态引入传入边缘。加上transition的过渡,旧的最终状态将转换为正常状态。

规则3:
如果没有多个最终状态,则消除(最终和初始状态除外)正常状态。如果自动机具有多个最终状态,建议删除其作为最终状态的状态,并将传出Ɛ-跃迁添加到新的且只有最终状态而没有传出跃迁的状态。

消除正常状态:
让我们以DFA为例,尝试通过State Elimination方法找到RE。

以’a’结尾的DFA

现在违反了规则1、2来使它们满足分别以传入Ɛ-跃迁和传出Ɛ-跃迁来建立新的最终状态和新的初始状态。

按照您希望的答案在两种情况下以任意顺序消除状态B和C,现在让我们首先消除B。

消除B并想象如果不存在任何状态B,那么我们将直接从起始状态A到达状态C,输入符号为“Ɛb* a”,我们可以忽略Ɛ,然后输入符号将为A的“ b * a”到C。

由于状态B不存在,因此从状态C到状态B的出站边缘变为自环,请在删除状态B之后比较上方和下方的图像。 C的边沿将到达B,取b *并以’a’返回C,这可能会无限期发生,因此b(b)* a会自循环。我们可以将两个自循环“ a”和“ bb * a”表示为(bb * a + a),这意味着我们可以一次遍历一个循环。作为结果(bb * a + a)的a或bb * a是C状态=(bb * a + a)*的闭包。

现在消除C状态之后,我们将直接从初始状态A到达最终状态D,现在我们通过在C状态上输入“ b * a”到达状态C,我们在(bb * a + a)上进行无限循环,并且Ɛ到达最终状态D。因此最终没有剩余的正常状态,我们得到了从初始到最终直接为b * a(bb * a + a)*的输入符号流。

如果您到现在为止都很感谢您阅读本文,则此方法可帮助您快速找到RE。这也将帮助GATE-CSIT理想者和CS本科生。如果您了解此概念,请尝试查找偶数0和奇数1的RE,这是一个非常棘手的问题,我也会在此发表一篇文章。如果发现任何错误,请ping我。