需要有限自动机的正则表达式:偶数1和偶数0

问题描述 投票:6回答:3

我的问题听起来可能与你有所不同。

我是初学者,我正在学习有限自动机。我正在互联网上搜索下面给定机器的有限自动机的正则表达式。

任何人都可以帮我写上述机器的“有限自动机的正则表达式”

任何帮助将不胜感激

regular-language finite-automata computation-theory dfa
3个回答
21
投票

如何使用Arden定理为DFA编写正则表达式

让我们使用0而不是语言符号1Σ = {a, b},以下是新的D​​FA。

通知开始状态为Q0

你还没有给出但在我的回答中,初始状态是Q0,其中最终状态也是Q0。

接受的语言是DFA是由符号ab组成的所有字符串的集合,其中符号ab的数量是偶数(包括Λ)。

一些示例字符串是{Λ, 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

记住4.2 ARDEN THEOREM

BC成为Σ的两个正则表达式。如果C不包含Λ,那么对于等式A = B + AC具有唯一的(唯一的)解A = BC *。

[解]:

步骤1:写出初始方程,一个方程用于对应DFA中的每个状态。这个等式意味着如何在一个步骤中达到一个国家

因此,根据我们的DFA,可以使用以下4个方程:

  1. Q0 = Λ + Q1a + Q3b
  2. Q1 = Q0a + Q2b
  3. 呕吐= s 1 b + s
  4. 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解决方案以符号ab查找状态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 + Q3b 8. 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 + Q3b 8. 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'的正则表达式:

(A)b * + b(a)* ab(b)*)ba(a)* ab(b)*)* a + b(a)* + a(b)* ba(a) *)AB(B)* BA(*)* B)*

可以进一步简化如下:

1.

0
投票

设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


0
投票

这是偶数语言的DFA,包含偶数0和1

它的RE就是这个

Λ

在这里,它将接受偶数为0和1的lambda

或者接受(00)甚至nmbr为0并且没有1意味着这里nmber为1是even.or或者(11)在那种情况下nmber of(0)是偶数..所以你可以检查它会产生包含偶数的字符串nmber为0和1 ..

希望它能解决你的问题

© www.soinside.com 2019 - 2024. All rights reserved.