这里的第一个技巧是将乘法表视为自动机的转换表,每个状态都代表乘法表中的一个字母,但还不必担心接受。因此,表格左侧和正文中的字母实际上是状态—将它们写为q a,q b,q c会更准确,但我不会。顶部的字母是输入。Aqa,qb,qc
然后通过转置A来构造自动机(用于转置的“ T ”)用于反向乘法:ATTA
ATabcaaacbcabcbca
所以把你带到状态Ç,同样一个牛逼(c ^ b 一)移动到国家一的一个牛逼,你注意。A(abc)cAT(cba)aAT
但是,假设您要从右往左走,而我们仍然想从左往右走。因此,第二个技巧是通过反转所有箭头来反转自动机(而不是乘法,这将使我们重新开始),这将导致下面的转换表给出不确定的自动机A T R,通过串接字母表示的子集,以保持鸡刮了下来,所以一个ç真是{ 一,ç }。(希望我没事-似乎有效)。ATATRac{a,c}
ATRabcabbcacabc∅aab∅cabcabcabc∅bbcabcacababc∅ccabacabcbcabc∅
您可以将其解释为仅在该行上方三行的非确定性自动机,或者将其解释为全部8行的确定性自动机。
最后,解决问题的机器是原始和A T R的叉积自动机,即执行两个自动机的相交行为的A × A T R(我们不再需要A T了) 。 甲× 甲Ť ř具有是对等状态⟨ 一个,一个Ç ⟩。转换函数独立运行A和A T R。一个单一的启动状态⟨ 1 ,1 ⟩AATRA×ATRATA×ATR⟨a,ac⟩AATR⟨1,1⟩进入下输入一个成⟨ b ,b ⟩下输入b等 ⟨a,a⟩a⟨b,b⟩b
在非确定性版本接受状态被等在确定性版本,接受状态是对在该第一成分是∈第二部件组,如⟨ 一个,一个⟩或⟨ b ,b ç ⟩。⟨a,a⟩∈⟨a,a⟩⟨b,bc⟩
增强和确定化如图具有 25 = 3 ⋅ 8 + 1的状态,所以原谅我不写出来的细节。但非确定性版本仅具有 10 = 3 ⋅ 3 + 1的状态。A×ATR25=3⋅8+110=3⋅3+1