我很陌生这些东西,所以在这里请原谅我的新手操作。
构建一个识别以下语言的确定有限自动机:Deterministic Finite Automaton
DFA。
L= { w : w has at least two a's and an odd number of b's}.
每个部分的自动化
(至少有2个a,奇数数量的b)
都很容易单独制作......有人能否解释一种将它们组合成一个的系统方法?谢谢。我很陌生这些东西,所以在这里请原谅我的新手操作。
构建一个识别以下语言的确定有限自动机:Deterministic Finite Automaton
DFA。
L= { w : w has at least two a's and an odd number of b's}.
(至少有2个a,奇数数量的b)
都很容易单独制作......有人能否解释一种将它们组合成一个的系统方法?谢谢。您可以使用以下简单步骤构建组合DFA。
设 Σ = {a1 , a2 , ...,ak }。
第1步: 为两种语言设计DFA,并将它们的状态命名为Q0, Q1, ...
第2步: 为两个DFA中的每个状态重新命名,即将DFA中的所有状态重命名为Q0, Q1, Q2, Q3等,假设您从下标0开始;这意味着没有任何一个状态会有相同的名称。
第3步: 使用以下步骤构建转换表(δ)
3a. 合并DFA的起始状态:
取两个DFA(DFA1 和 DFA2) 的起始状态,并将它们命名为Q[ i , j ],其中i和j是DFA1和DFA2的起始状态下标,即Qi是第一个DFA的起始状态,Qj是第二个DFA的起始状态,并将Q[i, j]标记为合并DFA的起始状态。
3b. 映射两个DFA的状态为:
如果δ(Qi,ak) = Qp1,且δ(Qj,ak) = Qp2,其中Qp1属于DFA1,Qp2属于DFA2,则δ(Q[ i , j ] , ak) = Q[p1,p2]
3c. 在转换表中填充整个表格,直到没有Q[i,j]剩余。
3d. 合并DFA的最终状态:
对于AND
情况,最终状态将是所有Q[i , j],其中Qi和Qj分别是DFA1和DFA2的最终状态。
对于OR
情况,最终状态将是所有Q[i , j],其中Qi或Qj是DFA1和DFA2的最终状态之一。
第4步: 重新命名所有Q[i, j](唯一)并绘制DFA,这将是您的结果。
示例:
L= {w: w has at least two a's and an odd number of b's}.
步骤1:
奇数个b的DFA。
至少有2个a的DFA。
步骤2:
重命名DFA1的状态。
步骤3(a,b,c):
构建的转移表如下。
步骤3d:
由于我们需要对两个DFA进行AND操作,因此最终状态将是Q[2,4],因为它包含了两个DFA的终止状态。
如果我们需要对两个DFA进行OR操作,则最终状态将是Q[0,4],Q[2,3],Q[1,4],Q[2,4]。
添加终态后的转移表如下。
步骤4:
将所有状态Q[i,j]重命名。
Q[0,3] 重命名为 Q0
Q[1,3] 重命名为 Q2
Q[0,4] 重命名为 Q1
Q[2,3] 重命名为 Q4
Q[1,4] 重命名为 Q3
Q[2,4] 重命名为 Q5
因此,最终的DFA如下所示。
当 a
至少有两个且 b
为奇数时,语言 L
是一种正则语言。它的 DFA 如下所示:
在这个 DFA 中,我在概念上结合了两个 DFS
!
DFA-1 = for odd number of `b`'s (placed vertically three times in diagram)
DFA-2 = for >= two a (placed Horizontally two times in diagram)
这个DFA太症结和简单了,所以我认为没有必要在意如何将两个DFA组合起来。
为了绘制这个DFA,您始终需要跟踪已经出现的b的数量是偶数还是奇数。状态0、2和4
表示已经出现了偶数个b。因此,您可以在垂直方向上将此DFA分成两部分,其中底部状态为偶数个b,而上部状态为奇数个b。
同时,如果b的数量为奇数,则接受字符串,因此最终状态应该位于上部的某个状态中。
不仅b
的数量是条件,而且a
应该至少为2
。因此,您可以将此DFA水平分成三个部分,其中a
的数量在state-0和1
处为0,在state-2和3
处为1,在state-4和5
处为2。在前两个a
之后,字符串中允许任意数量的a
,因此状态q4
和q5
上有自环。
所需状态的数量为6,因为奇偶数b
需要2个状态,而且a
至少为2
,因此a=0、a=1、a=2需要3个状态,因此2*3 = 6