jyo*_*oti 6 finite-automata dfa computation-theory regular-language
我的问题听起来可能与你有所不同.
我是初学者,我正在学习有限自动机.我正在互联网上搜索下面给定机器的有限自动机的正则表达式.
任何人都可以帮我写上述机器的"有限自动机的正则表达式"
任何帮助将不胜感激
Gri*_*han 22
让我们来代替语言的符号0,1我们就? = {a, b}和下面是新的DFA.
通知开始状态为Q 0
你还没有给出但在我的回答中,初始状态是Q 0,其中最终状态也是Q 0.
语言通过在DFA设置的所有字符串的接受由符号a和b地方符号的数量a和b甚至(含?).
一些示例字符串是{?, aa, bb, abba, babbab },没有顺序约束和符号出现的模式只是两者应该是偶数个时间.
注意:?是允许的,因为numberOf(a)和numberOf(b)是偶数的零.
正如我在回答中所说:如何为DFA编写正则表达式,每个州都存储一些信息.以下是上述DFA中每个州存储的信息.
Q 0:偶数的
a和偶数的 Q 1:的奇数 和偶数的 Q 2:的奇数 和奇数的 Q 3:偶数 和奇数的bababab
(您可以通过更改最终状态集来为更多有趣的语言制作DFA)应该阅读有条理
的答案,因为我在两个答案中对DFA的罚款RE的方法是不同的
什么是正则表达式?
使用Arden的Therm解释下面的方法可以适用于转换图,其中存在单个启动状态并且没有定义空移动(我们的DFA采用这种形式).这种技术在书中解释:形式语言和自动机理论
设
B和C是两个正则表达式了?.如果C不包含?,那么对于等式A = B + AC具有唯一的(一个且仅一个)解A = BC*.
[解]:
步骤1:写出初始方程,一个方程用于对应DFA中的每个状态.这个等式意味着一个国家如何在一个步骤中达到
因此,根据我们的DFA,可以使用以下4个方程:
- Q 0 =
?+ Q 1 a + Q 3 b- Q 1 = Q 0 a + Q 2 b
- Q 2 = Q 1 b + Q 3 a
- Q 3 = Q 0 b + Q 2 a
在等式(1)中,额外?是因为Q 0是初始状态,可以在没有任何输入(起点)的情况下到达.因为Q 0也只是最终状态,所以a, b如果它在Q 0结束,则字符串组成是可接受的.Q 0的值将给出我们所需的正则表达式,因此我们的目标就是方程式 - (1)a, b.
步骤2:使用来自其他方程的状态值并使用Arden的简化方程来简化方程.
让我们首先取方程式(4)并从方程式(3)中取代Q 2的值.
Q 3 = Q 0 b + Q 2 a
Q 3 = Q 0 b +(Q 1 b + Q 3 a)a
Q 3 = Q 0 b + Q 1 ba + Q 3 aa
最后的等式可以以Arden方程的形式查看A = B + AC.其中A是Q 3,B = Q 0 b + Q 1 ba且C = aa.因此,根据Arden的therm,等式Q 3 = Q 0 b + Q 1 ba + Q 3 aa有一个独特的解决方案:
Q 3 =(Q 0 b + Q 1 ba)(aa)*
或者可以写如下:
5.Q 3 = Q 0 b(aa)*+ Q 1 ba(aa)*
逻辑上你可以检查/理解eq-(5)意味着可以通过两种方式达到Q 3(+)通过应用bQ 0然后aa在Q 3上有一个带有标签的循环,第二种方式是从Q 1应用到ba.
以类似的方式,我们可以简化方程式 - (2)
Q 1 = Q 0 a + Q 2 b
Q 1 = Q 0 a +(Q 1 b + Q 3 a)b
Q 1 = Q 0 a + Q 1 bb + Q 3 ab
在这里使用Arden的简化规则.
Q 1 =(Q 0 a + Q 3 ab)(bb)*
进一步简化
6.Q 1 = Q 0 a(bb)*+ Q 3 ab(bb)*
现在,从等式(5)到方程式(6) 的Q 3值
Q 1 = Q 0 a(bb)*+(Q 0 b(aa)*+ Q 1 ba(aa)*)ab(bb)*
Q 1 = Q 0 a(bb)*+ Q 0 b(aa)*ab(bb)*+ Q 1 ba(aa)*ab(bb)*
使用简化的Arden定律再次改进最后的等式.
Q 1 =(Q 0 a(bb)*+ Q 0 b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*
拿Q 0 conman:
7.Q 1 = Q 0(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*
你能理解这个等式,它是如何从Q 0状态转到Q 1的?我们记得这个解决方案是等式 - (7)
如上所述,我们可以用状态Q 0来评估Q 1的值,并且类似地,我们将评估状态Q 3的值.为此,我们可以简单地将状态Q 1的值 从等式(5)放入等式(7)中. a, b
5.Q 3 = Q 0 b(aa)*+ Q 1 ba(aa)*
.Q 3 = Q 0 b(aa)*+ Q 0(a(bb)*+ b(aa)*ab(bb)*)( ba(aa)*ab(bb)*)*ba(aa)*
8.Q 3 = Q 0(b(aa)*+(a(bb)*+ b(aa)*ab(bb)*)(ba( aa)*ab(bb)*)*ba(aa)*)
现在,在等式编号(1 )中,接受来自等式编号(8)和(7)的状态Q 3和Q 1的值.
Q 0 =
?+ Q 1 a + Q 3 b
Q 0 =?+ Q 0(a(bb)*+(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a + Q 0(b(aa)*+(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*ba(aa)*)b
现在,上次应用Arden解决方案以符号和方式查找状态Q 0的值. ab
Q 0 =
?+((a(bb)*+(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a +(b(aa)*+(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*ba(aa)*)b)*
这与(我们可以? 在这里丢弃)相同RE:
((a(bb)*+(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a +(b(aa)*+(a(bb)*+ b(aa) )*ab(bb)*)(ba(aa)*ab(bb)*)*ba(aa)*)b)*
这是您在寻找的RE.
我不确定它是否可以进一步简化.我将它留作练习给你.
在相关问题中,我提出了一种非正式和分析方法,但很难应用并找到这个DFA的RE,这个问题证明了Arden定理的力量和逐步解决方案.
编辑:
我之前的正则表达是正确的,但由于不对称的形式很难对葡萄.下面我正在编写更加对称的RE新形式.
我们有等式(5),(6)如下:
5.Q 3 = Q 0 b(aa)*+ Q 1 ba(aa)*
6.Q 1 = Q 0 a(bb)*+ Q 3 ab(bb)*
两者结构对称,易于学习.(在上面的eq-(5)之后阅读我的评论)
为了根据Q 0评估状态Q 1的值,我将Q 3的值从等式(5)推入等式 - (6),其给出了等式(7)如下:
7.Q 1 = Q 0(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*
类似地,为了用Q 0来评估状态Q 3的值,我们可以将Q 1的值从等式(6)中放入等式(5)中,这将给出我们新的等式 - (8)形式如下:
Q 3 = Q 0 b(aa)*+ Q 1 ba(aa)*
Q 3 = Q 0 b(aa)*+(Q 0 a(bb)*+ Q 3 ab(bb)*)ba(aa)*
Q 3 = Q 0 b(aa)*+ Q 0 a(bb)*ba(aa)*+ Q 3 ab(bb)*ba(aa)*
现在,我们可以得到所需形式的方程式(8):
8.Q 3 = Q 0(b(aa)*+ a(bb)*ba(aa)*)(ab(bb)*ba(aa)*)*
现在,我们有等式 - (1),(7),(8):
1.Q 0 =?+ Q 1 a + Q 3 b
7.Q 1 = Q 0(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*
8.Q 3 = Q 0(b(aa)*+ a(bb)*ba(aa)*)(ab(bb)*ba(aa)*)*
现在,我们可以得到所需形式的方程式(8):
8.Q 3 = Q 0(b(aa)*+ a(bb)*ba(aa)*)(ab(bb)*ba(aa)*)*
现在,我们有等式 - (1),(7),(8):
1.Q 0 =?+ Q 1 a + Q 3 b
7.Q 1 = Q 0(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*
8.Q 3 = Q 0(b(aa)*+ a(bb)*ba(aa)*)(ab(bb)*ba(aa)*)*
现在将状态Q 1和Q 3的值放入等式 - (1):
Q 0 =
?+ Q 0(a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a + Q 0(b(aa)*+ a( bb)*ba(aa)*)(ab(bb)*ba(aa)*)*b
也可以写成:
Q 0 =
?+ Q 0((a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a +(b(aa)*+ a(bb )*ba(aa)*)(ab(bb)*ba(aa)*)*b)
接下来,在这个等式上应用Arden定理,我们得到最终的RE:
((a(bb)*+ b(aa)*ab(bb)*)(ba(aa)*ab(bb)*)*a +(b(aa)*+ a(bb)*ba(aa)*)(ab(bb)*ba(aa)*)*b)*
可以进一步简化如下:
((a + b(aa)*ab)(bb)*(ba(aa)*ab(bb)*)*a + (b + a(bb)*ba)(aa)*(ab(bb)*ba(aa)*)*b)*
Run Code Online (Sandbox Code Playgroud)