我的问题听起来可能与你有所不同。
我是初学者,我正在学习有限自动机。我正在互联网上搜索下面给定机器的有限自动机的正则表达式。
任何人都可以帮我写上述机器的“有限自动机的正则表达式”
任何帮助将不胜感激
让我们使用0
而不是语言符号1
,Σ = {a, b}
,以下是新的DFA。
通知开始状态为Q0
你还没有给出但在我的回答中,初始状态是Q0,其中最终状态也是Q0。
接受的语言是DFA是由符号a
和b
组成的所有字符串的集合,其中符号a
和b
的数量是偶数(包括Λ
)。
一些示例字符串是{Λ, aa, bb, abba, babbab }
,没有顺序约束和符号出现的模式只是两者应该是偶数个时间。
注意:Λ
是允许的,因为numberOf(a
)和numberOf(b
)是偶数的零。
正如我在回答中所说:How to write regular expression for a DFA每个州都存储一些信息。以下是上述DFA中每个州存储的信息。
Q0:偶数
a
和偶数b
Q1:a
的奇数,甚至b
的数量 Q2:奇数a
和奇数b
Q3:偶数a
和奇数b
(您可以通过更改最终状态集来为更有趣的语言制作DFA) 人们应该阅读有条理的答案,因为我在两个答案中对DFA罚款RE的方法是不同的
什么是正则表达式? 下面使用Arden's Therm解释的方法可以应用于转换图,其中存在单个开始状态并且没有定义空移动(我们的DFA采用这种形式)。这种技术在一本书中解释:Formal Languages And Automata Theory
让
B
和C
成为Σ
的两个正则表达式。如果C
不包含Λ
,那么对于等式A = B + AC具有唯一的(唯一的)解A = BC *。
[解]:
步骤1:写出初始方程,一个方程用于对应DFA中的每个状态。这个等式意味着如何在一个步骤中达到一个国家
因此,根据我们的DFA,可以使用以下4个方程:
- Q0 =
Λ
+ Q1a + Q3b- Q1 = Q0a + Q2b
- 呕吐= s 1 b + s
- S = S 0B +呕吐
在等式(1)中,额外的Λ
是因为Q0是初始状态,可以在没有任何输入(起点)的情况下到达。因为Q0也只是最终状态,所以如果qzxswpoi在Q0结束,则可以接受由a, b
组成的字符串。 Q0的值将给出我们所需的正则表达式,因此我们的目标是简单地用a, b
方程式 - (1)。
步骤2:使用来自其他方程的状态值并使用Arden的简化方程来简化方程。
让我们首先取方程式(4)并用方程式(3)代替Q2的值。
Q3 = Q0b + Q2a Q3 = Q0b +(Q1b + Q3a)a Q3 = Q0b + Q1ba + Q3aa
最后一个等式可以以Arden方程A = B + AC
的形式查看。其中A是Q3,B = Q0b + Q1ba,C = aa
。因此根据Arden的therm,等式Q3 = Q0b + Q1ba + Q3aa有一个独特的解决方案:
S =(S0B + S1B)(即)*
或者可以写如下:
5.
Q3 = Q0b(aa)* + Q1ba(aa)*
从逻辑上讲,你可以检查/理解eq-(5)意味着Q3可以通过在Q0上应用+
以两种方式(b
)到达,然后在Q3上有一个带有标签aa
的循环,第二种方式是从Q1应用ba
。
以类似的方式,我们可以简化方程式 - (2)
Q1 = Q0a + Q2b Q1 = Q0a +(Q1b + Q3a)b Q1 = Q0a + Q1bb + Q3ab
在这里使用Arden的简化规则。
S 1 =(S 0 A + H)(B)*
进一步简化
6.
Q1 = S0A(B)* +鞋跟(B)*
现在将Q3从等式(5)变为等式(6)
S1 = S0A(B)* +(S0B(A)* + S1B(A)*)AB(B)* S1 = S0A(B)* + S0B(A)* AB(B)* + S 1B(A)* AB(B)*
使用简化的Arden定律再次改进最后的等式。
S1 =(S0A(B)* + S0B(A)* AB(B)*)(BA(A)* AB(B)*)*
拿Q0 conman:
7.
Q1 = S0(A(B)* + B(A)* AB(B)*)(BA(A)* AB(B)*)*
你能理解这个等式,它是如何从Q0状态转到Q1的?我们记得这个解决方案是等式 - (7)
如上所述,我们可以用状态Q0和a, b
来评估Q1的值,同样我们要评估状态Q3的值。为此,我们可以简单地将状态Q1的值从等式(5)变为等式(7)。
5.
Q3 = Q0b(aa)* + Q1ba(aa)*.
Q3 = Q0b(aa)* + Q0(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*8.
Q3 = Q0(b(aa)* +(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)
现在,在等式编号(1)中,接受来自等式编号(8)和(7)的状态Q3和Q1的值。
Q0 =
Λ
+ Q1a + Q3b Q0 =Λ
+ Q0(a(bb)* +(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a + Q0(b(aa)* +(a(bb) * + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)b
现在,上次应用Arden解决方案以符号a
和b
查找状态Q0的值。
S0 = CaspianSub +((a)b * +(any)* ab(b)*)(ba(any)* ab(b)*)* a +(b(any)* +(a(b)* + B(a)*父亲(b)*)(ba(a)*父亲(b)*)* ba(a)*)b)*
这是相同的(我们可以在这里丢弃Λ
)RE:
(A)b * +(a)* ab(b)*(ba(a)* ab(b)*)* a + b(a)* + a(b)* + b(a) * AB(B)*(BA(A)* AB(B)*)* BA(A)*(B)*
这是您在寻找的RE。
我不确定它是否可以进一步简化。我将它留作练习给你。
在相关问题中,我提出了一种非正式和分析方法,但很难应用并找到这个DFA的RE,这个问题证明了Arden定理的力量和逐步解决方案。
编辑:
我之前的正则表达是正确的,但由于不对称的形式很难对葡萄。下面我正在编写更加对称的RE新形式。
我们有等式(5),(6)如下:
温室= S0B(A)* + S 1B(A)*
Λ
Q1 = S0A(B)* +鞋跟(B)*
两者结构对称,易于学习。 (在上面的eq-(5)之后阅读我的评论)
为了用Q0来评估状态Q1的值,我将Q3的值从等式(5)推入等式(6),得到方程式(7)如下:
5.
Q1 = S0(A(B)* + B(A)* AB(B)*)(BA(A)* AB(B)*)*
类似地,为了用Q0来评估状态Q3的值,我们可以将Q1的值从等式(6)变为等式(5),这将给出我们新的等式 - (8)形式如下:
S = S0B(A)* + S 1B(A)* S = S0B(A)* +(S0A(B)* + HB(B)*)Ba(任意)* S = S0B(即)* + S0A(B)* Ba(任意)* + KaB(B)* Ba(任意)*
现在,我们可以得到所需形式的方程式(8):
温室= S0(b(a)* + a(b)* ba(任何)*)(ab(b)* ba(任何)*)*
现在,我们有方程式 - (1),(7),(8):
6.
Q0 =7.
+ Q1a + Q3b8.
Q1 = Q0(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*1.
Q3 = Q0(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
现在,我们可以得到所需形式的方程式(8):
温室= S0(b(a)* + a(b)* ba(任何)*)(ab(b)* ba(任何)*)*
现在,我们有方程式 - (1),(7),(8):
Λ
Q0 =7.
+ Q1a + Q3b8.
Q1 = Q0(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*8.
Q3 = Q0(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
现在将状态Q1和Q3的值放入等式 - (1):
S0 = KazzobSub + S0(A(B)* + B(A)* AB(B)*)(BA(A)* AB(B)*)* A + S0(B(A)* + A(B) * Ba(即)*)(父亲(b)* ba(任何)*)* b
也可以写成:
S0 = KazzobSub + S0((a)b * + b(a)* ab(b)*)(ba(a)* ab(b)*)* a +(b(a)* + a(b) * Ba(a)*(ab(b)* ba(a)*)* b)
接下来,在这个等式上应用Arden定理,我们得到最终的RE:
(A)b * + b(a)* ab(b)*)ba(a)* ab(b)*)* a + b(a)* + a(b)* ba(a) *)AB(B)* BA(*)* B)*
可以进一步简化如下:
1.
设E是具有偶数a和偶数b的语言,以下是语言E的正则表达式。
[00 + 11 + (01+10)(11+00)(01+10)]
00 = type1
11 = type2
(01 + 10)(00 + 11)*(01 + 10)= type3
假设我们用E语言从左到右扫描,一次读两个字母。首先我们来到一个双0(type1),然后到双1(type2),然后到另一个双0(再次类型1)。那么也许我们会遇到一对不一样的字母。比如说,接下来的两个字母是10.这必须从type3的子字符串开始。它从一个不加倍的对(01或10)开始,然后它有一个双字母的部分(许多重复00或11),然后它最终以另一个不加倍的对(01或10再次)结束。该部分的一个属性是它具有偶数0和偶数1。如果该部分以10开头,它可能以01结尾仍然给出两个0和两个1的两端,中间只有两个字母。如果它以10开始并以01结束,那么它将给出偶数个0和偶数1。在type3的这一部分之后,我们可以继续处理更多类型的部分,或者类型2,直到我们遇到另一个未加倍的对,开始另一个type3部分。我们知道另一对未加倍的将会出现以平衡最初的一对。总效果是E语言的每个单词都包含偶数个0和偶数个1
这是偶数语言的DFA,包含偶数0和1
它的RE就是这个
Λ
在这里,它将接受偶数为0和1的lambda
或者接受(00)甚至nmbr为0并且没有1意味着这里nmber为1是even.or或者(11)在那种情况下nmber of(0)是偶数..所以你可以检查它会产生包含偶数的字符串nmber为0和1 ..
希望它能解决你的问题