如果数据以 LSB 为先,您还可以设计状态机:
这种确定性有限自动机(DFA)的存在直接来自另一个答案,该答案描述了 MSB 优先的 DFA。因为 DFA 接受的语言是常规语言,并且已知常规语言在反转时是封闭的(例如,请参阅此处),因此必须有一个 DFA 接受以下语言:
\$L = \{w\in \{0,1\}^* |\ \text{reverse}(w)_{10}\ \text{可被}5\}\$整除。
建造
从Dave Tweed 的回答中复制 MSB-first DFA 。为此,我使用了自动机工具JFLAP。
对 DFA 反转应用显式变换算法,例如 CS.SE:Designing a DFA and the reverse of it中所述。您可以在此答案的旧版本
中
看到此步骤的(未最小化)结果。
最小化生成的 DFA。不幸的是,这个特性在最新的 JFLAP 版本中有一点缺陷,所以我只能手动将其最小化。
同样,那里有许多算法和资源,我使用了tutorialspoint.com 上“DFA 最小化”中描述的一种。
(实际上,如果你的眼睛在看 DFA 方面训练得足够好,你可以直接看到\$q_0\$ 和 \$q_1\$ 是在第 2 点中获得的 DFA 中的等效状态。我的不是,谢谢注意到它去超级猫的评论!)
事实上,生成的自动机给出了正确的答案:
附录:出于可访问性的原因,接受 LSB 优先的可被 5 整除的二进制数的 DFA 是 \$A_{rev5} = (Q, \Sigma, \delta, q_0, F)\$ with \$Q = \ {q_0, q_1, q_2, q_3, q_4\}\$, \$\Sigma = \{0,1\}\$, \$F = \{q_0\}\$ 和 \$\delta\$ 如下:
\$ \delta(q_0, 0) = q_0,\quad\delta(q_0, 1) = q_1\\ \delta(q_1, 0) = q_4,\quad\delta(q_1, 1) = q_3\\ \delta (q_2, 0) = q_1,\quad\delta(q_2, 1) = q_2\\ \delta(q_3, 0) = q_2,\quad\delta(q_3, 1) = q_4\\ \delta(q_4, 0 ) = q_3,\quad\delta(q_4, 1) = q_0 \$