结合确定性有限自动机

时间:2013-02-03 20:17:58

标签: regular-language automata deterministic

我对这些东西真的很陌生,所以我为这里的noobishness道歉。

构建Deterministic Finite Automaton DFA,识别以下语言:

L= { w : w has at least two a's and an odd number of b's}. 

(at least 2 a's, odd # of b's)的每个部分的自动化很容易单独制作......任何人都可以解释一种系统的方法将它们组合成一个吗?感谢。

3 个答案:

答案 0 :(得分:16)

您可以使用以下简单步骤构建组合DFA。

Σ= {a 1 2 ,..., k }
第一步:为两种语言设计DFA并将其状态命名为Q 0 ,Q 1 ,...

第二步:重命名两个DFA中的每个状态,即将DFA中的所有状态重命名为Q 0 ,Q 1 ,Q 2 ,Q 3 ,...假设您已经开始使用下标0;这意味着没有一个州会有相同的名称。

第3步:使用以下步骤构建转换表(δ)

3a。组合DFA的开始状态:
取两个DFA(DFA1和DFA2)的起始状态,并将它们命名为Q [i,j] ,其中i和j分别是DFA1和DFA2的起始状态的下标;即,Q i 是第一个DFA的开始状态,Q j 是第二个DFA的开始状态,并将Q [i,j] 标记为开始状态合并DFA。

3b。将两个DFA的状态映射为
如果δ(Q i ,a k )= Q p1 和δ(Q j ,a k )= Q p2 ,其中Q p1 属于DFA1,Q p2 属于DFA2,然后是δ(Q [i,j] k )= Q [p1,p2]

<强> 3C 即可。在转换表中剩余任何Q [i,j] 时填充整个表。

<强> 3D 即可。合并DFA的最终状态:
对于AND情况,最终状态将是Q [i,j] ,其中Q i 和Q j 是DFA1的最终状态和DFA2分别 对于OR情况,最终状态将是Q [i,j] ,其中Q i 或Q j 是最终状态DFA1和DFA2。

第4步: 重命名所有Q [i,j] (唯一)并绘制DFA,这将是您的结果。

示例:

L= {w: w has at least two a's and an odd number of b's}.

第1步:
DFA为奇数个b
DFA至少为2个

第2步:
重命名DFA1的stae enter image description here

Step3(a,b,c):
构造过渡表将为。
table

Step3d:
由于我们必须使用两个DFA的AND,因此最终状态为Q [2,4] ,因为它包含两个DFA的最终状态。
如果我们必须对两个DFA进行OR,则最终状态为Q [0,4] ,Q [2,3] ,Q [ 1,4] ,Q [2,4]
在添加最终状态后,转换表会这样。

final table

第4步:
重命名所有状态Q [i,j]
Q [0,3] 到Q 0
Q [1,3] 到Q 2
Q [0,4] 到Q 1
Q [2,3] 到Q 4
Q [1,4] 到Q 3
Q [2,4] 至Q 5
所以最终的DFA将如下所示。 table

答案 1 :(得分:1)

使用两个自动机的product完成。

答案 2 :(得分:1)

其中L至少为2且a为奇数的语言b是常用语言。其DFA如下:
a_and_odd_b

在这个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来自偶数或奇数。 States 0, 2 and 4表示偶数b已经到来。因此,您可以将此DFA垂直分为两部分,其中底部状态为偶数b s,上部状态为奇数。

如果奇数b,则接受字符串,因此最终状态应该处于上部的状态之一。

不仅b的数量是条件,而且a应至少是2。因此,您可以将此DFA水平划分为三个部分,其中a的数量为state-0 and 1的0,a的{​​{1}}为state-2 and 3a为2 state-4 and 5。在前两个a之后,字符串中允许任意数量的a s,因此状态q4q5上存在自循环。

所需的状态数是6,因为奇数偶数b的状态为2,并且至少应为2所以3状态a = 0,a = 1,a = 2,因此2 * 3 = 6