我是计算机科学专业的学生-第二年。我研究计算模型。
我试图解决几个小时的问题,但不确定如何准确地解决它。 问题是:
“ DFA(确定性有限自动机),它接受∑ = {0,1, 2}可以被3整除,并且不包含子字符串012。“
有什么可能的方法来解决这个问题而无需猜测?
答案 0 :(得分:0)
由于这是家庭作业,因此我将为您提供解决方案的草图,而不是细节。
第一步是将问题分解为DFA A和B,其中A和B的交点是您想要的DFA。
012
的所有字符串。然后,您可以计算这些DFA的交集,这将是您在问题中描述的语言。
这些DFA是什么样的?
B更容易描述:从包含012
的所有字符串的DFA开始,然后取其补码。
A要求您跟踪余数。基本上,您的接受状态应为余数0,并且余数1和2需要另外两个状态。例如,如果您正在读取字符串012
,则将移至状态0,然后移至状态1 ,然后再设为0(如(1+2) % 3 = 0
)。
您如何与它们相交?创建一个新的DFA,其状态与A和B中状态数的乘积一样多。每个状态由A中的一个状态和B中的一个状态唯一标识。设置转换,就好像每个状态都由A和B操作一样B,移动到代表该输入的新状态对的任何状态。
例如,如果A的q1在输入1
上移至q2,而B的q2在输入1
上移至q2,则交点DFA的过渡为{Aq1,Bq2},1,{Aq2,Bq2}
。
交集DFA中的接受状态将是A和B都接受的状态。