设计DFA接受可被7整除的十进制字符串

时间:2019-04-11 15:15:39

标签: automata finite-automata dfa

我是一名学习DFA的学生,正在寻找一个DFA,该DFA可以查找小数是否可以被7整除。

今天,我已经解决了数字2、3、4、5、6、8、9的除数问题,但是我无法解决数字7的除数问题。我已经在网上搜索了,但是找不到可以帮助我或让我理解的答案。

所以现在我在这里寻求帮助。预先感谢。

1 个答案:

答案 0 :(得分:1)

基本思想是,我们将跟踪到目前为止所看到的数字的当前值(以7为模)。每个新数字取旧数字,乘以十,然后加上新数字。因此,从与x(mod 7)对应的状态开始,在右边加上数字d意味着我们进入与10x + d(mod 7)对应的状态。此DFA具有70个状态(数字位数为0-9乘以七个0-6所得的余数)。

q    s    q'
------------
q0   0    q0
q0   1    q1
q0   …    …
q0   6    q6

q1   0    q3
q1   1    q4
q1   …    …
q1   6    q2

…

q6   0    q4
q6   1    q5
q6   …    …
q6   6    q3

考虑对号码36736的处理:

(q0) --3--> (q3) --6--> (q1) --7--> (q3) --3--> (q5) --6--> (q0)
0           0*10+3      3*10+6      1*10+7      3*10+3      5*10+6
            0+3         30+6        10+7        30+3        50+6
            3           36          17          33          56
            3           1           3           5           0

该数字可被7整除,因为我们最终进入状态q0,该状态对应于零模7,即7的偶数倍。