确定性有限自动机 - 状态图

时间:2013-10-11 18:36:42

标签: automata

如果我必须使用状态图绘制确定性有限自动机,以便接受一种语言,例如{λε{a,b} *:单词λ包含偶数个a和奇数个b} ,我怎么知道我有多少个州?

1 个答案:

答案 0 :(得分:1)

4个州就足够了。你有两个条件可以同时满足:a的偶数和b的奇数。无论彼此如何,每种情况都可以是真或假。

如果我们用1表示 true 而用0表示 false ,我们会得到4个不同的不同的可能性:两者都是假的,其中一个(但不是另一个)是真的,或者两者都是真的。因此,我们得到一个真值表:

even a | odd b
---------------
   0       0
   0       1
   1       0
   1       1

让我们用q[0, 0]代表第一行,第二行代表q[0, 1],依此类推。现在我们必须指定每个状态的转换,以及识别我们的初始状态。

无论我们处于什么状态,都有两种可能的输入: a b 。因此,对于每个州,我们必须指定两个过渡。

现在,我们的初始状态是我们在消耗任何输入之前所处的状态。由于0是偶数,我们得到的初始状态为q[1, 0]。我们的接受状态是满足两个条件,即q[1, 1]

最后,我们进行了状态转换,

q[0, 1]是我们的初始状态

q[1, 0] reads b ->  q[1, 1]
q[1, 0] reads a ->  q[0, 0]

q[1, 1]是我们接受的州

q[1, 1] reads b ->  q[1, 0] 
q[1, 1] reads a ->  q[0, 1]

q[0, 1]只有在至少一个

的情况下才能达到此状态
q[0, 1] reads b ->  q[0, 0]
q[0, 1] reads a ->  q[1, 1]  

q[0, 0]只有在至少一个

的情况下才能达到此状态
q[0, 0] reads b ->  q[0, 1]
q[0, 0] reads a ->  q[1, 0]