请帮助我将dfa转换为正则表达式

时间:2018-11-05 15:06:21

标签: regex automata dfa

我不知道如何使用算法将此dfa转换为正则表达式。请帮助我。please click here to get the dfa

1 个答案:

答案 0 :(得分:0)

假设此符号表示(1)既是初始状态又是唯一接受状态,则此自动机的转换表为:

 q     s     q'
(1)    a    (3)
(1)    b    (2)
(2)    a    (1)
(3)    a    (2)
(3)    b    (3)

令r,s和t为导致(1),(2)和(3)的正则表达式。然后

r = e + sa
s = rb + ta
t = ra + tb

我们可以开始迭代解决此系统。首先,我们在t的表达式中看到自引用,并且可以使用以下规则删除x = y + xz <=> x = yz *:

r = e + sa
s = rb + ta
t = rab*

现在我们可以通过替换前两行来摆脱t:

r = e + sa
s = rb + rab*a

现在我们需要r的表达式,所以我们不妨在第一行中将s的子弹和sub插入s的表达式中:

r = e + (rb + rab*a)a
  = e + rba + rab*aa
  = e + r(ba + ab*aa)

根据我们的规则,我们进一步减少:

r = (e)(ba + ab*aa)*
  = (ba + ab*aa)*

抽查表明此正则表达式正确。如果您接受以下规则的有效性以简化涉及正则表达式的表达式(即证明它们或接受它们而没有证明),则派生构成正则表达式的有效证明:

rule 1: x = y + xz IFF x = yz*
rule 2: w = xy AND x = z IFF w = zy
rule 3: w = x + y AND x = z IFF w = z + y

以上对等式的解释是:当且仅当LHS的语言与RHS的语言等效时,LHS才等于RHS。虽然(0 + 1)(0 + 1)和00 + 01 + 10 + 11是不同的正则表达式,但它们生成的是由四个字符串组成的相同语言,因此出于讨论目的是相等的。