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