【发布时间】:2021-05-23 09:35:33
【问题描述】:
在 {0,1}* 上构造一个 DFA,其中字符串在转换为二进制时必须能被 2 或 3 整除。此外,字符串中 1 的数量不能被 1 整除
【问题讨论】:
标签: dfa
在 {0,1}* 上构造一个 DFA,其中字符串在转换为二进制时必须能被 2 或 3 整除。此外,字符串中 1 的数量不能被 1 整除
【问题讨论】:
标签: dfa
设状态为 (a, b),其中 a 在 {0,1,2,3,4,5} 中,b 为 0 或 1。a 将记录输入数 mod 6,b 为奇偶校验输入中的 1 秒。起始状态是 (0, 0),接受状态是 (0, 1), (2, 1), (3, 1), (4, 1) - 也就是说,它可以被 2 或 3 (即:它是 0、2、3 或 4 mod 6),并且有奇数个 1。
那么转换是:
这是状态机的图片(圆圈是初始状态,双八边形是接受状态)。
使用此python程序以点格式生成状态机图:
def state(a, b):
return 'q%d%d' % (a, b)
print('digraph g {')
print(' node [shape=plaintext];')
print(' %s [shape=circle]' % state(0, 0))
for i in (0, 2, 3, 4):
print(' %s [shape=doubleoctagon]' % state(i, 1))
for a in range(6):
for b in range(2):
for x in range(2):
s0 = state(a, b)
s1 = state((2*a+x) % 6, (b+x) % 2)
print(' %s -> %s [label=%s]' % (s0, s1, str(x)))
print('}')
然后通过 dot 命令运行输出。在 linux 上可能是这样的:python fsm.py > g.dot && dot g.dot -Tpng -o g.png(假设上面的代码保存为 fsm.py)。
【讨论】:
python fsm.py > g.dot && dot g.dot -Tpng -o g.png