📅  最后修改于: 2023-12-03 15:10:58.842000             🧑  作者: Mango
这是一个关于正规语言的DFA的介绍,该DFA的定义是:对于任意一个字符串w,如果a的个数mod 3大于b的个数mod 3,则w属于L,否则不属于L。
状态0表示还没有读入任何字符,此时a的个数mod 3和b的个数mod 3都为0,因此L中不含有该状态,直接判断下一个字符。
读入下一个字符之后,有以下几种情况:
读入a
如果此时a的个数mod 3大于b的个数mod 3,则进入状态1;否则,进入状态2。
读入b
如果此时a的个数mod 3大于b的个数mod 3,则进入状态2;否则,进入状态1。
读取结束
如果最后a的个数mod 3大于b的个数mod 3,则该字符串w属于L,进入状态3;否则不属于L,进入状态4。
状态3为接受状态,表示当前字符串w属于L。
def check_L(w): # 检查是否属于L
a_count = 0
b_count = 0
for c in w:
if c == 'a':
a_count += 1
elif c == 'b':
b_count += 1
if a_count % 3 > b_count % 3:
current_state = 1
else:
current_state = 2
if a_count % 3 > b_count % 3:
final_state = 3
else:
final_state = 4
return final_state == 3
以上就是关于正规语言的DFA L = {w∈{a,b} *:Na(w)mod 3> Nb(w)mod 3}的介绍和代码片段。