如何为 DFA 编写正则表达式
在任何自动机中,状态的目的就像记忆元素。状态以自动方式存储一些信息,例如开关风扇开关。
一个确定性有限自动机 (DFA) 称为 有限 自动机,因为 有限的内存量 以状态的形式存在。对于任何正则语言 (RL),DFA 始终是可能的。
让我们看看 DFA 中存储了哪些信息(参考我的彩色图)。
(注意:在我的解释中,任何数字都表示零次或多次,Λ 是空符号)
State-1:是START状态,里面存储的信息是偶数a已经来了。和零 b.
此状态的正则表达式 (RE) 是 = (aa)*。
State-4: a 的奇数已经到来。和零b。
此状态的正则表达式是 = (aa)*a。
图:BLUE状态=偶数个a和RED states = ODD 数量 a 已经到来。
注意:一旦到达第一个b,移动就不能回到状态1 和状态4。
State-5: 在Yellow b 之后。 Yellow b 表示 b after odd numbers of a.
一旦你在奇数个a(在状态5)之后得到b,一切都是可以接受的,因为(b,a)在状态 5。
你可以为 state-5 写:Yellow-b 后跟任意字符串 a、b 即 = Yellow-b (a + b)*
State-6: 只是为了区分奇数 a 还是偶数。
State-2: 出现在 a 之后,然后是 b 然后是任意数量的 b强>。 = (aa)* bb*
State-3: 在 state-2 之后,然后是 a,然后是通过 state-6 的循环。
我们可以为 state-3 写 = state-2 a (aa)* = (aa)*bb* a (aa)*
因为在我们的 DFA 中,我们有三个最终状态,所以 DFA 接受的语言是三个 RL(或三个 RE)的并集(RE 中的 +)。
所以DFA接受的语言对应三个接受states-2,3,5,我们可以这样写:
State-2 + state-3 + state-5
(aa)*bb* + (aa)*bb* a (aa)* + Yellow-b (a + b)*
我忘了解释how Yellow-b comes?
答案:Yellow-b 是在 state-4 或 state-3 之后的b。我们可以这样写:
Yellow-b = ( state-4 + state-3 ) b = ( (aa)*a + (aa)*bb* a (aa)* ) b
[回答]
(aa)*bb* + (aa)*bb* a (aa)* + ( (aa)*a + (aa)*bb* a (aa)* ) b @9876 @
英语语言描述:DFA 接受三种语言的联合
- 偶数个
a,后跟一个或多个 b,
- 偶数个
a,后跟一个或多个b,后跟奇数个a强>的。
-
a 和 b 的前缀字符串,奇数个 a,后跟 b,后跟 a 和 b 和 Λ 的任何字符串。
英语描述很复杂,但这是描述语言的唯一方法。您可以通过首先将给定的 DFA 转换为最小化的 DFA 然后编写 RE 和描述来改进它。
此外,还有一种衍生方法可以使用Arden's Theorem 从给定的转换图中找到 RE。我已经在这里解释了how to write a regular expression for a DFA using Arden's theorem。必须首先将转换图转换为没有空移动和单启动状态的标准形式。但我更喜欢通过分析学习计算理论,而不是使用数学推导方法。